From 7434f45b97886fea07bcac90a0f129fa92673580 Mon Sep 17 00:00:00 2001 From: "Flemming N. Larsen" Date: Wed, 9 Sep 2026 19:48:25 +0200 Subject: [PATCH 1/5] Propose versioned M-006 parity campaign --- .../references/analysis-workflow.md | 1 + .agents/skills/clue-analysis/skill.md | 2 +- .../clue-delta/references/change-loop.md | 2 +- .../clue-delta/references/intent-model.md | 41 + .../repository-local-conventions.md | 2 + .../clue-delta/references/review-boundary.md | 2 +- .agents/skills/clue-delta/skill.md | 3 +- .agents/skills/clue-extract/mappings/madr.md | 2 - .../references/intent-discovery.md | 25 + .../clue-extract/references/intent-model.md | 41 + .../repository-local-conventions.md | 2 + .../references/review-boundary.md | 2 +- .agents/skills/clue-extract/skill.md | 4 +- .../clue-plan/references/intent-discovery.md | 25 + .../clue-plan/references/intent-model.md | 41 + .../clue-plan/references/planning-workflow.md | 9 +- .agents/skills/clue-plan/skill.md | 4 +- .../repository-local-conventions.md | 2 + .../references/review-boundary.md | 2 +- .../references/upgrade-workflow.md | 20 +- .agents/skills/clue-upgrade/skill.md | 2 +- .../references/agentic-review-loop.md | 7 +- .../repository-local-conventions.md | 2 + .../clue-verify/references/review-boundary.md | 2 +- .../references/verification-checklist.md | 1 + .agents/skills/clue-verify/skill.md | 2 +- .claude/skills/clue-analysis/SKILL.md | 2 +- .../references/analysis-workflow.md | 1 + .claude/skills/clue-delta/SKILL.md | 3 +- .../clue-delta/references/change-loop.md | 2 +- .../repository-local-conventions.md | 2 + .../clue-delta/references/review-boundary.md | 2 +- .claude/skills/clue-extract/SKILL.md | 4 +- .claude/skills/clue-extract/mappings/madr.md | 2 - .../repository-local-conventions.md | 2 + .../references/review-boundary.md | 2 +- .claude/skills/clue-plan/SKILL.md | 4 +- .../clue-plan/references/planning-workflow.md | 9 +- .claude/skills/clue-upgrade/SKILL.md | 2 +- .../repository-local-conventions.md | 2 + .../references/review-boundary.md | 2 +- .../references/upgrade-workflow.md | 20 +- .claude/skills/clue-verify/SKILL.md | 2 +- .../references/agentic-review-loop.md | 7 +- .../repository-local-conventions.md | 2 + .../clue-verify/references/review-boundary.md | 2 +- .../references/verification-checklist.md | 1 + .clue/id-coordination.yaml | 2 + .clue/id-ledger.yaml | 820 ++++-------------- .clue/role.yaml | 1 + .gitattributes | 1 + .github/workflows/clue.yml | 4 +- .../open-questions.md | 3 + .../proposal.md | 15 + .../tasks.md | 9 + docs/README.md | 1 + docs/use-cases/README.md | 16 + 57 files changed, 483 insertions(+), 712 deletions(-) create mode 100644 .agents/skills/clue-delta/references/intent-model.md create mode 100644 .agents/skills/clue-extract/references/intent-discovery.md create mode 100644 .agents/skills/clue-extract/references/intent-model.md create mode 100644 .agents/skills/clue-plan/references/intent-discovery.md create mode 100644 .agents/skills/clue-plan/references/intent-model.md create mode 100644 .clue/id-coordination.yaml create mode 100644 .clue/role.yaml create mode 100644 .gitattributes create mode 100644 changes/CH-014-m006-versioned-parity-registry/open-questions.md create mode 100644 changes/CH-014-m006-versioned-parity-registry/proposal.md create mode 100644 changes/CH-014-m006-versioned-parity-registry/tasks.md create mode 100644 docs/use-cases/README.md diff --git a/.agents/skills/clue-analysis/references/analysis-workflow.md b/.agents/skills/clue-analysis/references/analysis-workflow.md index 57382a5..b239bd8 100644 --- a/.agents/skills/clue-analysis/references/analysis-workflow.md +++ b/.agents/skills/clue-analysis/references/analysis-workflow.md @@ -9,5 +9,6 @@ Use when a change has unclear risks or unknowns — **before** planning or imple 5. Run a **spike**: a throwaway investigation such as a prototype, measurement, or literature scan. Spikes are disposable; their findings are not. 6. End every spike with a findings document in `/docs/analysis/` (`AN-xxx-slug.md`, frontmatter: `id`, `type: analysis`, `status`, `links`, `title`). Include what was tried, what was rejected, and why; discarded options are half of why the system looks as it does. - If the finding is an incident where the corpus was green but reality proved a claim wrong, add `reality: contradicted` and link every failed capability or acceptance criterion as well as the decisions, constraints, or process carriers that failed to prevent it. This records the edge from reality; it does not ingest production telemetry or open the operations loop. + - When the findings reach a durable artifact — an architecture or design overview, a decision, a capability — record that in `carried-by:` naming those artifacts. A spike is a measurement pinned to the revision it observed, so it is not permanent truth; the field is what lets `clue migrate` later report the spike as spent, once every plan it serves is complete and no live decision or constraint still cites it. A standing rule whose evidence is gone is readable but no longer reviewable, so a citation keeps the spike; where the citation is provenance rather than evidence, remove it from the live record first. Retiring it then deletes the file in a reviewed change, with Git history as the archive. Never hollow a spike out into a stub: that keeps the index row, the link targets, and the reader's navigation cost while removing the only part with value. 7. Route any outcome that constitutes a decision under [Decision records](decision-records.md). A rejected alternative that is itself a decision gets a rejected decision record, not only a paragraph in the findings. 8. Feed findings to `clue-plan` or `clue-delta`. Analysis with no consumer is doc-slop; do not write it. diff --git a/.agents/skills/clue-analysis/skill.md b/.agents/skills/clue-analysis/skill.md index a18bb24..b3e664d 100644 --- a/.agents/skills/clue-analysis/skill.md +++ b/.agents/skills/clue-analysis/skill.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- diff --git a/.agents/skills/clue-delta/references/change-loop.md b/.agents/skills/clue-delta/references/change-loop.md index 68b3d7e..76b1bb4 100644 --- a/.agents/skills/clue-delta/references/change-loop.md +++ b/.agents/skills/clue-delta/references/change-loop.md @@ -2,7 +2,7 @@ Use when the user chooses the full Cliewen loop recommended for accepted-contract change. Simple work is recommended before this skill and does not invoke it. Apply [Decision records](decision-records.md), [Repository-local conventions](repository-local-conventions.md), and [Durable work state](durable-work-state.md) throughout the loop. -1. **Branch:** Follow the review boundary, get the next CH identity with `clue id next CH`, and name the branch `ch-xxx-slug` with that identity. +1. **Branch:** Follow the review boundary, get the next CH identity with `clue id next CH`, and name the branch `ch-xxx-slug` with that identity. The command follows the ledger's tracked coordination mode. When it warns that allocation is local and contributors may work in parallel clones or worktrees, stop and either serialize allocation on the integration branch or have a maintainer enable Git coordination with `clue id coordinate` before contributors branch. A contributor given a preallocated identity runs `clue id sync`, uses that reservation, and never allocates independently from a stale local ledger. If remote allocation fails, do not guess, reuse, or edit the number by hand; retry or sync the allocator's permanent claims. Coordination settings live in `.clue/id-coordination.yaml`, not in the ledger; commit both after `clue id coordinate`, and treat a merge conflict in that file as the user's decision about which remote the team meant, never yours to resolve. Never re-point an established repository at a different remote. When a command reports that Git's union merge combined the ledger, the identities are intact: run `clue id repair`, or let the next command that saves the ledger rewrite it, and never hand-edit an append-only log. If two artifacts hold one identity, allocate a fresh one for the later artifact and update its references rather than renumbering either by hand. 2. **Propose:** Create `/changes/CH-xxx-slug/`, commit and push it before implementation, and open the draft PR under the review boundary: - `proposal.md` states what and why; its frontmatter `links` names the real plan item it serves or explicitly declares the change plan-less. - `tasks.md` is an ordered `- [ ]` checklist with dependencies first and at most one nested level. Mark an infeasible task `[-]` with its reason on the same line, whenever it is marked. A behavior-changing task names the acceptance-criterion IDs it serves; if none exists, add the criterion before implementation. Tests trace to criteria, never transient tasks. diff --git a/.agents/skills/clue-delta/references/intent-model.md b/.agents/skills/clue-delta/references/intent-model.md new file mode 100644 index 0000000..9d3debd --- /dev/null +++ b/.agents/skills/clue-delta/references/intent-model.md @@ -0,0 +1,41 @@ +## Intent model + +A corpus carries two threads, and they meet only at the goal. + +The **intent thread** says what the product means: `VIS-001` (the vision, at `docs/vision.md`) → goal → optional use case → capability → acceptance criterion → evidence. The **delivery thread** says how that meaning gets built: goal → plan → milestone → change → accepted merge commit. Plan, milestone, and change never join the semantic hierarchy, which is what keeps a change from editing the vision merely because it edited code. + +Each artifact answers one question, and none of them answers another's. A **goal** says who wants something and why. A **use case** says what one actor does, end to end, across capabilities. A **capability** says what the system can do. An **acceptance criterion** says what would prove it. A vision that lists goals, a use case that restates criteria, or a capability that argues for its own existence has taken over a neighbour's job — link instead of repeating. + +**Both intent artifacts are optional to have.** `clue validate` never requires a vision or a use case, never reports one missing as an issue, and computes no coverage figure over either; absence is not a gap. Run `clue validate --intent` to see what a corpus states. + +**Links point down.** A use case names the goal it serves and every capability it crosses; a goal names the vision. A capability never names a use case back, so no edge is written twice and none can drift. Reading it the other way is `clue context `, which names the use cases reaching an artifact by identity and title without following them. + +### The vision + +One per corpus, roughly one screen, at `docs/vision.md`. It answers what the product or system is, whom it serves, what problem it addresses and what value it intends to create, what is in scope and what is deliberately out, what principles constrain its direction, how success would be recognized, and which assumptions are still uncertain. It is not a roadmap, a backlog, an architecture document, a requirements list, or a marketing statement, and it needs no business case. + +Edit it only when the direction itself changes. Restating a new feature there is how a vision becomes a changelog and stops being read. + +### When a use case is worth creating + +Write one when it changes what a reader understands: + +- an actor's journey crosses several capabilities; +- ordering, interaction, alternatives, or failure recovery carries meaning; +- the individual criteria are each locally correct and still do not explain the outcome; +- several actors collaborate through the system; +- a brownfield system holds important behaviour no single capability explains. + +Do not write one when a capability and its criteria already describe the behaviour clearly, when there is no meaningful actor interaction, when it would restate an existing goal or capability, or when the subject is internal implementation behaviour that design, architecture, a constraint, or an IDR owns. Never create one for trivial create-read-update-delete behaviour to satisfy a process, and never let one grow into a design or prescribe interface details that are not themselves accepted intent. + +Recommend for or against one, say why, and let the human decide. A use case is created because it earns its place, never because a capability lacks one. + +### Its shape + +`docs/use-cases/UC--.md`, `type: use-case`, links naming the goal and the capabilities it crosses, and four sections: `## Actors`, `## Trigger`, `## Main flow`, `## Outcome`. Add preconditions, alternative and failure flows, and open questions when they carry meaning; leave them out when they do not. + +### Marking what is not yet confirmed + +Agent-drafted intent is `status: draft` with `provenance: inferred` and a stated `reversal-cost`, and its assumptions and open questions stay visible in the artifact. Promotion is a human act. Never present an inference as a fact, and never resolve a contradiction between sources by picking the convenient reading — record it and ask. + +**A full change's acceptance brief states the vision it proceeds under**, or states that the repository has none and that the change proceeds without one. When unresolved meaning would materially change what the system is for, stop and ask rather than deciding it inside an implementation. diff --git a/.agents/skills/clue-delta/references/repository-local-conventions.md b/.agents/skills/clue-delta/references/repository-local-conventions.md index 0e4094b..9dc9ca1 100644 --- a/.agents/skills/clue-delta/references/repository-local-conventions.md +++ b/.agents/skills/clue-delta/references/repository-local-conventions.md @@ -1,3 +1,5 @@ ## Repository-local conventions +Before applying a rule that differs by repository kind, read the role in `.clue/role.yaml`. `role: adopter` is a repository that has adopted Cliewen; `role: source` is Cliewen's own repository, which generates the skills and templates adopters receive and therefore carries rules no adopter ever inherits. A repository with no marker is an adopter. Do not infer the role from a directory listing, and do not apply a source-repository rule to an adopter's work. + For a full Cliewen change, apply the repository-local conventions declared in AGENTS.md, including digest requirements such as a user-facing changelog entry. When a release adds or narrows a corpus obligation, preview and apply the supported `clue migrate` migrations before validating the adopted repository; `clue init` remains a non-destructive materializer, not an updater. Simple work follows the repository conventions and checks that apply to its changed surfaces. Repository-local conventions may be stricter about integration. If a full-loop skill conflicts with a local rule, record the conflict in `open-questions.md` and stop for a human decision; never choose silently. diff --git a/.agents/skills/clue-delta/references/review-boundary.md b/.agents/skills/clue-delta/references/review-boundary.md index 5c49576..dddbc96 100644 --- a/.agents/skills/clue-delta/references/review-boundary.md +++ b/.agents/skills/clue-delta/references/review-boundary.md @@ -14,7 +14,7 @@ A PR alone displays hosted CI but does not enforce it. Where hosting supports en Every review of an existing hosted PR is bound to its observed head SHA. A clean result applies only to that commit; every substantive edit invalidates it. An advisory from a pass with no blocking findings stays in the verification handoff for a later change rather than editing the clean commit: the bounded loop is over, and an edit would create a new candidate that this exact-commit rule requires reviewing. A blocking finding is actionable durable PR state, not private agent memory: where the host supports resolvable review conversations, publish the finding there and leave it unresolved until a hosted commit contains the reviewed repair. Advisories do not become repair-required conversations. If the reviewer cannot publish a resolvable finding, report the PR as not merge-ready and disclose that the host cannot enforce the finding; this fail-safe applies to blocking findings, while advisories stay in the handoff; never claim a chat-only finding has equivalent protection. -Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If accepted `main` advances while the change is open, incorporate it by merging `main` into the change branch with a normal push, never by rewriting hosted history, then repeat verification and review. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. +Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. Ready means the hosted PR contains the exact locally reviewed and verified state, and marking it ready is the only claim of readiness. Before marking a change ready, commit every intended edit, run the applicable local verification and a clean agentic review pass against that commit, require `git status --porcelain` to be empty, push, and confirm that the hosted PR's head branch and SHA equal the current local branch and `HEAD`; then mark the PR ready and perform the hosted check again immediately after. Resolve satisfied review conversations only after the hosted head contains their reviewed repair. If either side differs, apply the updater rule above, rerun verification and review on the resulting commit, and check again. Stopping anywhere else is ordinary, not an exception: the branch is pushed, the PR is a draft, and no claim of readiness exists — say where the work stands rather than that a ready PR exists. diff --git a/.agents/skills/clue-delta/skill.md b/.agents/skills/clue-delta/skill.md index 4220045..2af6c46 100644 --- a/.agents/skills/clue-delta/skill.md +++ b/.agents/skills/clue-delta/skill.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- @@ -16,6 +16,7 @@ Read each reference when its condition is reached, before taking action governed - Before recommending a route or starting a full change, read [Change routing](references/change-scope-and-tiers.md). - Before branching, publishing, updating a hosted PR, or handing work to a human, read [Review boundary](references/review-boundary.md). - After the user chooses the recommended full loop, read [Change loop](references/change-loop.md). +- When the change touches what the product means, or the acceptance brief must state the vision it proceeds under, read [Intent model](references/intent-model.md). - When the change makes, rejects, or carries a decision, read [Decision records](references/decision-records.md). - Before applying repository-specific implementation or digest rules, read [Repository-local conventions](references/repository-local-conventions.md). - When a change starts or resumes, a suggestion arrives, or a merge is reported, read [Durable work state](references/durable-work-state.md). diff --git a/.agents/skills/clue-extract/mappings/madr.md b/.agents/skills/clue-extract/mappings/madr.md index 59f3152..9e6f805 100644 --- a/.agents/skills/clue-extract/mappings/madr.md +++ b/.agents/skills/clue-extract/mappings/madr.md @@ -25,6 +25,4 @@ Layout: decision records live in `docs/decisions/` or `doc/adr/`, one file per r | older Nygard headings (`## Status`, `## Context`, `## Decision`, `## Consequences`) | `## Status` converts per the status-vocabulary rows above; `## Context` and `## Decision` become `## Context and problem statement` and `## Decision outcome`; `## Consequences` folds into body prose under Decision outcome or its own trailing sentence | | Hand-maintained per-folder index (`INDEX.md`, `index.md`, a `## Contents` table) | absorbed into that folder's README `clue:index` rows, then deleted — the description, purpose, or scope column becomes the row's sentence, while a column that only restates a `links:` edge (a design or related-decision pointer) is dropped rather than carried | -Worked case: Robocode Tank Royale, a public repository extracted through `clue-extract` in 2026. Its decision corpus is what these rows are written against — 41 records in one `docs/decisions/` folder beside that folder's `README.md` and `log.md`, every record carrying a numeric filename prefix, five written to the MADR template headings and the rest to Nygard's `## Context` / `## Decision` / `## Consequences`. That conversion happened before this mapping existed, and it is where the `decision-makers` row above comes from: it wrote the records' own pre-Cliewen acceptance into `accepted-by:` (annotated `pre-Cliewen MADR acceptance`) and left them `status: verified`, so the corpus now shows approvals no human ever gave under its merge boundary. It also carried the source padding into the IDs themselves, which is the form that corpus now keeps — an already-converted corpus is never re-styled, per the numeric-prefix row above. The rows above are what that conversion would have followed. - Watch for: a folder mixing MADR and Nygard records side by side, where only some files carry frontmatter; a `superseded by` reference written three ways (a plain-prose mention in the Decision Outcome section, a `superseded-by:` frontmatter key, or an inline link to the successor file) that all mean the same `links:` edge; a record's number reused across `doc/adr/` and `docs/decisions/` from a past folder migration; a `proposed` record nobody ever acted on, which is an open question rather than a decision the merge would make binding; and the temptation to write `decision-makers` straight into `accepted-by:` because the names are already there — the shortcut looks harmless but a converted record's `accepted-by:` has to mean the same thing as every other record's. diff --git a/.agents/skills/clue-extract/references/intent-discovery.md b/.agents/skills/clue-extract/references/intent-discovery.md new file mode 100644 index 0000000..e1a0be6 --- /dev/null +++ b/.agents/skills/clue-extract/references/intent-discovery.md @@ -0,0 +1,25 @@ +## Intent discovery + +Use when a repository has no usable vision. `clue` reports whether one exists and what its provenance is; it never interviews and never infers. Interpretation is yours, and accepting meaning is the human's. + +### Greenfield: interview, then summarize + +A user may start from one informal sentence — "I want to build a service that helps local running clubs organize weekly runs" — and that is enough to begin. + +Ask only questions whose answers would change the vision, the initial goals, the system boundary, or a candidate use case. Ask a few at a time and let each round follow from the last; a fixed questionnaire asked in one block is not this. Do not make the user learn Cliewen's vocabulary to answer — ask about their product, and do the translation yourself. Do not demand complete requirements before anything useful can start. + +Across the rounds, find out who the actors are, what outcome each wants, what is inside the boundary and what is deliberately outside it, what would count as succeeding, what constrains the direction, what is being assumed, and which end-to-end interactions matter enough to be use cases. Stop as soon as another question would not change what you would write. + +Then summarize what you understood in plain language and ask the user to correct or confirm it. Only after that does any of it become accepted intent. Write the vision, the initial goals, and the use cases you recommend — with your reason for each, and for any you considered and are not recommending. + +If the user explicitly asks you to draft from what little they have said, do it. What changes is how much you write, never how honestly you label it: the vision stays `draft` with `provenance: inferred`, every uncertainty appears as a stated assumption or an open question, and nothing you guessed is presented as something they told you. + +### Brownfield: read first, then ask what the repository cannot answer + +Inspect the repository before asking anything. The README and other documentation, architecture and design material, any existing Cliewen corpus, source and public APIs, tests and acceptance scenarios, command-line help and user interfaces, configuration, package metadata, deployment definitions, existing ADRs, PDRs, and IDRs, the change history available inside the repository, and examples and integration tests. + +Then produce a concise draft that cites the repository sources behind each material claim, keeps what you observed separate from what you concluded, and names the contradictions, stale documents, and gaps you found rather than smoothing them over. Ask only what the repository genuinely cannot answer. + +**Code demonstrates what a system does; it cannot establish why the product exists or what anyone wants.** Never derive strategic intent from implementation structure. Where sources disagree and the disagreement affects durable meaning, record the conflict and ask for a decision instead of choosing the convenient reading. A partially documented repository is the normal case, and missing documentation is a reason to mark uncertainty, never a reason to invent certainty. + +Present the proposed vision and any candidate use cases for correction or acceptance. Recommend a use case only where the existing capabilities genuinely fail to explain an outcome; a brownfield system's behaviour is mostly ordinary, and most of it needs no journey written down. diff --git a/.agents/skills/clue-extract/references/intent-model.md b/.agents/skills/clue-extract/references/intent-model.md new file mode 100644 index 0000000..9d3debd --- /dev/null +++ b/.agents/skills/clue-extract/references/intent-model.md @@ -0,0 +1,41 @@ +## Intent model + +A corpus carries two threads, and they meet only at the goal. + +The **intent thread** says what the product means: `VIS-001` (the vision, at `docs/vision.md`) → goal → optional use case → capability → acceptance criterion → evidence. The **delivery thread** says how that meaning gets built: goal → plan → milestone → change → accepted merge commit. Plan, milestone, and change never join the semantic hierarchy, which is what keeps a change from editing the vision merely because it edited code. + +Each artifact answers one question, and none of them answers another's. A **goal** says who wants something and why. A **use case** says what one actor does, end to end, across capabilities. A **capability** says what the system can do. An **acceptance criterion** says what would prove it. A vision that lists goals, a use case that restates criteria, or a capability that argues for its own existence has taken over a neighbour's job — link instead of repeating. + +**Both intent artifacts are optional to have.** `clue validate` never requires a vision or a use case, never reports one missing as an issue, and computes no coverage figure over either; absence is not a gap. Run `clue validate --intent` to see what a corpus states. + +**Links point down.** A use case names the goal it serves and every capability it crosses; a goal names the vision. A capability never names a use case back, so no edge is written twice and none can drift. Reading it the other way is `clue context `, which names the use cases reaching an artifact by identity and title without following them. + +### The vision + +One per corpus, roughly one screen, at `docs/vision.md`. It answers what the product or system is, whom it serves, what problem it addresses and what value it intends to create, what is in scope and what is deliberately out, what principles constrain its direction, how success would be recognized, and which assumptions are still uncertain. It is not a roadmap, a backlog, an architecture document, a requirements list, or a marketing statement, and it needs no business case. + +Edit it only when the direction itself changes. Restating a new feature there is how a vision becomes a changelog and stops being read. + +### When a use case is worth creating + +Write one when it changes what a reader understands: + +- an actor's journey crosses several capabilities; +- ordering, interaction, alternatives, or failure recovery carries meaning; +- the individual criteria are each locally correct and still do not explain the outcome; +- several actors collaborate through the system; +- a brownfield system holds important behaviour no single capability explains. + +Do not write one when a capability and its criteria already describe the behaviour clearly, when there is no meaningful actor interaction, when it would restate an existing goal or capability, or when the subject is internal implementation behaviour that design, architecture, a constraint, or an IDR owns. Never create one for trivial create-read-update-delete behaviour to satisfy a process, and never let one grow into a design or prescribe interface details that are not themselves accepted intent. + +Recommend for or against one, say why, and let the human decide. A use case is created because it earns its place, never because a capability lacks one. + +### Its shape + +`docs/use-cases/UC--.md`, `type: use-case`, links naming the goal and the capabilities it crosses, and four sections: `## Actors`, `## Trigger`, `## Main flow`, `## Outcome`. Add preconditions, alternative and failure flows, and open questions when they carry meaning; leave them out when they do not. + +### Marking what is not yet confirmed + +Agent-drafted intent is `status: draft` with `provenance: inferred` and a stated `reversal-cost`, and its assumptions and open questions stay visible in the artifact. Promotion is a human act. Never present an inference as a fact, and never resolve a contradiction between sources by picking the convenient reading — record it and ask. + +**A full change's acceptance brief states the vision it proceeds under**, or states that the repository has none and that the change proceeds without one. When unresolved meaning would materially change what the system is for, stop and ask rather than deciding it inside an implementation. diff --git a/.agents/skills/clue-extract/references/repository-local-conventions.md b/.agents/skills/clue-extract/references/repository-local-conventions.md index 0e4094b..9dc9ca1 100644 --- a/.agents/skills/clue-extract/references/repository-local-conventions.md +++ b/.agents/skills/clue-extract/references/repository-local-conventions.md @@ -1,3 +1,5 @@ ## Repository-local conventions +Before applying a rule that differs by repository kind, read the role in `.clue/role.yaml`. `role: adopter` is a repository that has adopted Cliewen; `role: source` is Cliewen's own repository, which generates the skills and templates adopters receive and therefore carries rules no adopter ever inherits. A repository with no marker is an adopter. Do not infer the role from a directory listing, and do not apply a source-repository rule to an adopter's work. + For a full Cliewen change, apply the repository-local conventions declared in AGENTS.md, including digest requirements such as a user-facing changelog entry. When a release adds or narrows a corpus obligation, preview and apply the supported `clue migrate` migrations before validating the adopted repository; `clue init` remains a non-destructive materializer, not an updater. Simple work follows the repository conventions and checks that apply to its changed surfaces. Repository-local conventions may be stricter about integration. If a full-loop skill conflicts with a local rule, record the conflict in `open-questions.md` and stop for a human decision; never choose silently. diff --git a/.agents/skills/clue-extract/references/review-boundary.md b/.agents/skills/clue-extract/references/review-boundary.md index 5c49576..dddbc96 100644 --- a/.agents/skills/clue-extract/references/review-boundary.md +++ b/.agents/skills/clue-extract/references/review-boundary.md @@ -14,7 +14,7 @@ A PR alone displays hosted CI but does not enforce it. Where hosting supports en Every review of an existing hosted PR is bound to its observed head SHA. A clean result applies only to that commit; every substantive edit invalidates it. An advisory from a pass with no blocking findings stays in the verification handoff for a later change rather than editing the clean commit: the bounded loop is over, and an edit would create a new candidate that this exact-commit rule requires reviewing. A blocking finding is actionable durable PR state, not private agent memory: where the host supports resolvable review conversations, publish the finding there and leave it unresolved until a hosted commit contains the reviewed repair. Advisories do not become repair-required conversations. If the reviewer cannot publish a resolvable finding, report the PR as not merge-ready and disclose that the host cannot enforce the finding; this fail-safe applies to blocking findings, while advisories stay in the handoff; never claim a chat-only finding has equivalent protection. -Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If accepted `main` advances while the change is open, incorporate it by merging `main` into the change branch with a normal push, never by rewriting hosted history, then repeat verification and review. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. +Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. Ready means the hosted PR contains the exact locally reviewed and verified state, and marking it ready is the only claim of readiness. Before marking a change ready, commit every intended edit, run the applicable local verification and a clean agentic review pass against that commit, require `git status --porcelain` to be empty, push, and confirm that the hosted PR's head branch and SHA equal the current local branch and `HEAD`; then mark the PR ready and perform the hosted check again immediately after. Resolve satisfied review conversations only after the hosted head contains their reviewed repair. If either side differs, apply the updater rule above, rerun verification and review on the resulting commit, and check again. Stopping anywhere else is ordinary, not an exception: the branch is pushed, the PR is a draft, and no claim of readiness exists — say where the work stands rather than that a ready PR exists. diff --git a/.agents/skills/clue-extract/skill.md b/.agents/skills/clue-extract/skill.md index 32651dd..957f346 100644 --- a/.agents/skills/clue-extract/skill.md +++ b/.agents/skills/clue-extract/skill.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- @@ -17,6 +17,8 @@ Read each reference when its condition is reached, before taking action governed - Before beginning an extraction, read [Boundaries](references/boundaries.md). - After proposal and before changing the target corpus, tests, routing, or hosted state, read [Rehearsal before mutation](references/rehearsal-before-mutation.md). - After the human authorizes mutation and while constructing the target corpus, read [Target contract](references/target-contract.md). +- Before proposing a vision or any use case for the target corpus, read [Intent model](references/intent-model.md). +- When the source repository states no usable vision, read [Intent discovery](references/intent-discovery.md). - When the source uses a supported format or needs a new mapping, read [Source mappings](references/source-mappings.md). - When extraction classifies or records a consequential choice, read [Decision records](references/decision-records.md). - Before reconciling source instructions with repository-specific rules, read [Repository-local conventions](references/repository-local-conventions.md). diff --git a/.agents/skills/clue-plan/references/intent-discovery.md b/.agents/skills/clue-plan/references/intent-discovery.md new file mode 100644 index 0000000..e1a0be6 --- /dev/null +++ b/.agents/skills/clue-plan/references/intent-discovery.md @@ -0,0 +1,25 @@ +## Intent discovery + +Use when a repository has no usable vision. `clue` reports whether one exists and what its provenance is; it never interviews and never infers. Interpretation is yours, and accepting meaning is the human's. + +### Greenfield: interview, then summarize + +A user may start from one informal sentence — "I want to build a service that helps local running clubs organize weekly runs" — and that is enough to begin. + +Ask only questions whose answers would change the vision, the initial goals, the system boundary, or a candidate use case. Ask a few at a time and let each round follow from the last; a fixed questionnaire asked in one block is not this. Do not make the user learn Cliewen's vocabulary to answer — ask about their product, and do the translation yourself. Do not demand complete requirements before anything useful can start. + +Across the rounds, find out who the actors are, what outcome each wants, what is inside the boundary and what is deliberately outside it, what would count as succeeding, what constrains the direction, what is being assumed, and which end-to-end interactions matter enough to be use cases. Stop as soon as another question would not change what you would write. + +Then summarize what you understood in plain language and ask the user to correct or confirm it. Only after that does any of it become accepted intent. Write the vision, the initial goals, and the use cases you recommend — with your reason for each, and for any you considered and are not recommending. + +If the user explicitly asks you to draft from what little they have said, do it. What changes is how much you write, never how honestly you label it: the vision stays `draft` with `provenance: inferred`, every uncertainty appears as a stated assumption or an open question, and nothing you guessed is presented as something they told you. + +### Brownfield: read first, then ask what the repository cannot answer + +Inspect the repository before asking anything. The README and other documentation, architecture and design material, any existing Cliewen corpus, source and public APIs, tests and acceptance scenarios, command-line help and user interfaces, configuration, package metadata, deployment definitions, existing ADRs, PDRs, and IDRs, the change history available inside the repository, and examples and integration tests. + +Then produce a concise draft that cites the repository sources behind each material claim, keeps what you observed separate from what you concluded, and names the contradictions, stale documents, and gaps you found rather than smoothing them over. Ask only what the repository genuinely cannot answer. + +**Code demonstrates what a system does; it cannot establish why the product exists or what anyone wants.** Never derive strategic intent from implementation structure. Where sources disagree and the disagreement affects durable meaning, record the conflict and ask for a decision instead of choosing the convenient reading. A partially documented repository is the normal case, and missing documentation is a reason to mark uncertainty, never a reason to invent certainty. + +Present the proposed vision and any candidate use cases for correction or acceptance. Recommend a use case only where the existing capabilities genuinely fail to explain an outcome; a brownfield system's behaviour is mostly ordinary, and most of it needs no journey written down. diff --git a/.agents/skills/clue-plan/references/intent-model.md b/.agents/skills/clue-plan/references/intent-model.md new file mode 100644 index 0000000..9d3debd --- /dev/null +++ b/.agents/skills/clue-plan/references/intent-model.md @@ -0,0 +1,41 @@ +## Intent model + +A corpus carries two threads, and they meet only at the goal. + +The **intent thread** says what the product means: `VIS-001` (the vision, at `docs/vision.md`) → goal → optional use case → capability → acceptance criterion → evidence. The **delivery thread** says how that meaning gets built: goal → plan → milestone → change → accepted merge commit. Plan, milestone, and change never join the semantic hierarchy, which is what keeps a change from editing the vision merely because it edited code. + +Each artifact answers one question, and none of them answers another's. A **goal** says who wants something and why. A **use case** says what one actor does, end to end, across capabilities. A **capability** says what the system can do. An **acceptance criterion** says what would prove it. A vision that lists goals, a use case that restates criteria, or a capability that argues for its own existence has taken over a neighbour's job — link instead of repeating. + +**Both intent artifacts are optional to have.** `clue validate` never requires a vision or a use case, never reports one missing as an issue, and computes no coverage figure over either; absence is not a gap. Run `clue validate --intent` to see what a corpus states. + +**Links point down.** A use case names the goal it serves and every capability it crosses; a goal names the vision. A capability never names a use case back, so no edge is written twice and none can drift. Reading it the other way is `clue context `, which names the use cases reaching an artifact by identity and title without following them. + +### The vision + +One per corpus, roughly one screen, at `docs/vision.md`. It answers what the product or system is, whom it serves, what problem it addresses and what value it intends to create, what is in scope and what is deliberately out, what principles constrain its direction, how success would be recognized, and which assumptions are still uncertain. It is not a roadmap, a backlog, an architecture document, a requirements list, or a marketing statement, and it needs no business case. + +Edit it only when the direction itself changes. Restating a new feature there is how a vision becomes a changelog and stops being read. + +### When a use case is worth creating + +Write one when it changes what a reader understands: + +- an actor's journey crosses several capabilities; +- ordering, interaction, alternatives, or failure recovery carries meaning; +- the individual criteria are each locally correct and still do not explain the outcome; +- several actors collaborate through the system; +- a brownfield system holds important behaviour no single capability explains. + +Do not write one when a capability and its criteria already describe the behaviour clearly, when there is no meaningful actor interaction, when it would restate an existing goal or capability, or when the subject is internal implementation behaviour that design, architecture, a constraint, or an IDR owns. Never create one for trivial create-read-update-delete behaviour to satisfy a process, and never let one grow into a design or prescribe interface details that are not themselves accepted intent. + +Recommend for or against one, say why, and let the human decide. A use case is created because it earns its place, never because a capability lacks one. + +### Its shape + +`docs/use-cases/UC--.md`, `type: use-case`, links naming the goal and the capabilities it crosses, and four sections: `## Actors`, `## Trigger`, `## Main flow`, `## Outcome`. Add preconditions, alternative and failure flows, and open questions when they carry meaning; leave them out when they do not. + +### Marking what is not yet confirmed + +Agent-drafted intent is `status: draft` with `provenance: inferred` and a stated `reversal-cost`, and its assumptions and open questions stay visible in the artifact. Promotion is a human act. Never present an inference as a fact, and never resolve a contradiction between sources by picking the convenient reading — record it and ask. + +**A full change's acceptance brief states the vision it proceeds under**, or states that the repository has none and that the change proceeds without one. When unresolved meaning would materially change what the system is for, stop and ask rather than deciding it inside an implementation. diff --git a/.agents/skills/clue-plan/references/planning-workflow.md b/.agents/skills/clue-plan/references/planning-workflow.md index c8faadb..21efe49 100644 --- a/.agents/skills/clue-plan/references/planning-workflow.md +++ b/.agents/skills/clue-plan/references/planning-workflow.md @@ -2,9 +2,10 @@ Use when creating a plan or changing what a plan promises. -1. Create or revise a plan through `clue-delta`; a plan mutation is itself a branch and PR. The digest is the plan file in `/docs/plans/`. -2. Keep plans as flat `P-xxx-slug.md` files with status in frontmatter (`draft` → `active` → `completed`). Milestones (`M-xxx`) are rows in the plan's milestone table, each with a verifiable exit criterion. -3. Treat semantic mutation and bookkeeping differently: +1. Before planning anything, check what direction the corpus states: run `clue validate --intent`. A plan whose goals serve no stated vision is not blocked, but a repository that has never stated one is the moment to offer [Intent discovery](intent-discovery.md), and a plan that contradicts an active vision is a conflict to raise rather than to plan around. +2. Create or revise a plan through `clue-delta`; a plan mutation is itself a branch and PR. The digest is the plan file in `/docs/plans/`. +3. Keep plans as flat `P-xxx-slug.md` files with status in frontmatter (`draft` → `active` → `completed`). Milestones (`M-xxx`) are rows in the plan's milestone table, each with a verifiable exit criterion. +4. Treat semantic mutation and bookkeeping differently: - **Semantic:** Direction, scope, milestone addition/removal, or anything else that changes the plan's promise requires human acceptance and a decision record under [Decision records](decision-records.md). Agents may propose; only humans accept. The default vehicle is a dedicated plan change and PR. A revision discovered during implementation may ride with that implementing change only when the PR declares the plan revision, a correctly typed decision record backs it, the PR calls it out for deliberate approval, and an explicit objection can revert the revision while leaving the milestone open without blocking the rest of the change. - **Bookkeeping:** Marking a milestone done belongs in the implementing change's merge digest, never a separate PR. Closing the plan is the same bookkeeping: the change completing the last milestone also sets it `completed`, in that digest. A campaign is over the moment its last milestone is evidenced, so leaving it `active` publishes an index claiming work is in flight that is not. Designate the successor plan there too when one is decided; not having decided one never holds the closure open. Every milestone's evidence must be in the table before that digest lands, because the closed plan is immutable afterwards. -4. Treat `status: completed` as immutable and never delete a completed plan. +5. Treat `status: completed` as immutable and never delete a completed plan. diff --git a/.agents/skills/clue-plan/skill.md b/.agents/skills/clue-plan/skill.md index 67b1be8..d527151 100644 --- a/.agents/skills/clue-plan/skill.md +++ b/.agents/skills/clue-plan/skill.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- @@ -14,4 +14,6 @@ Create or revise a verifiable campaign plan through the reviewed Cliewen change Read each reference when its condition is reached, before taking action governed by it. The references are required instructions, not optional background. - Before creating or revising a plan, read [Planning workflow](references/planning-workflow.md). +- Before deciding which goals a plan serves, and whether any journey needs a use case, read [Intent model](references/intent-model.md). +- When the repository states no usable vision, read [Intent discovery](references/intent-discovery.md). - When plan meaning or another consequential choice is recorded, read [Decision records](references/decision-records.md). diff --git a/.agents/skills/clue-upgrade/references/repository-local-conventions.md b/.agents/skills/clue-upgrade/references/repository-local-conventions.md index 0e4094b..9dc9ca1 100644 --- a/.agents/skills/clue-upgrade/references/repository-local-conventions.md +++ b/.agents/skills/clue-upgrade/references/repository-local-conventions.md @@ -1,3 +1,5 @@ ## Repository-local conventions +Before applying a rule that differs by repository kind, read the role in `.clue/role.yaml`. `role: adopter` is a repository that has adopted Cliewen; `role: source` is Cliewen's own repository, which generates the skills and templates adopters receive and therefore carries rules no adopter ever inherits. A repository with no marker is an adopter. Do not infer the role from a directory listing, and do not apply a source-repository rule to an adopter's work. + For a full Cliewen change, apply the repository-local conventions declared in AGENTS.md, including digest requirements such as a user-facing changelog entry. When a release adds or narrows a corpus obligation, preview and apply the supported `clue migrate` migrations before validating the adopted repository; `clue init` remains a non-destructive materializer, not an updater. Simple work follows the repository conventions and checks that apply to its changed surfaces. Repository-local conventions may be stricter about integration. If a full-loop skill conflicts with a local rule, record the conflict in `open-questions.md` and stop for a human decision; never choose silently. diff --git a/.agents/skills/clue-upgrade/references/review-boundary.md b/.agents/skills/clue-upgrade/references/review-boundary.md index 5c49576..dddbc96 100644 --- a/.agents/skills/clue-upgrade/references/review-boundary.md +++ b/.agents/skills/clue-upgrade/references/review-boundary.md @@ -14,7 +14,7 @@ A PR alone displays hosted CI but does not enforce it. Where hosting supports en Every review of an existing hosted PR is bound to its observed head SHA. A clean result applies only to that commit; every substantive edit invalidates it. An advisory from a pass with no blocking findings stays in the verification handoff for a later change rather than editing the clean commit: the bounded loop is over, and an edit would create a new candidate that this exact-commit rule requires reviewing. A blocking finding is actionable durable PR state, not private agent memory: where the host supports resolvable review conversations, publish the finding there and leave it unresolved until a hosted commit contains the reviewed repair. Advisories do not become repair-required conversations. If the reviewer cannot publish a resolvable finding, report the PR as not merge-ready and disclose that the host cannot enforce the finding; this fail-safe applies to blocking findings, while advisories stay in the handoff; never claim a chat-only finding has equivalent protection. -Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If accepted `main` advances while the change is open, incorporate it by merging `main` into the change branch with a normal push, never by rewriting hosted history, then repeat verification and review. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. +Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. Ready means the hosted PR contains the exact locally reviewed and verified state, and marking it ready is the only claim of readiness. Before marking a change ready, commit every intended edit, run the applicable local verification and a clean agentic review pass against that commit, require `git status --porcelain` to be empty, push, and confirm that the hosted PR's head branch and SHA equal the current local branch and `HEAD`; then mark the PR ready and perform the hosted check again immediately after. Resolve satisfied review conversations only after the hosted head contains their reviewed repair. If either side differs, apply the updater rule above, rerun verification and review on the resulting commit, and check again. Stopping anywhere else is ordinary, not an exception: the branch is pushed, the PR is a draft, and no claim of readiness exists — say where the work stands rather than that a ready PR exists. diff --git a/.agents/skills/clue-upgrade/references/upgrade-workflow.md b/.agents/skills/clue-upgrade/references/upgrade-workflow.md index 5e3dfd3..475be75 100644 --- a/.agents/skills/clue-upgrade/references/upgrade-workflow.md +++ b/.agents/skills/clue-upgrade/references/upgrade-workflow.md @@ -7,9 +7,19 @@ Use when a repository already uses Cliewen and the human wants to find out wheth Escalate only on a semantic discovery: when applying the release requires this repository to decide something of its own — an obligation it must choose how to meet, a reconciliation that changes what its own criteria or its own wall promise, or a finding whose resolution is a judgment about this repository rather than a transcription of the release — recommend the full loop for that decision on its own terms. The mechanical move around it stays simple. 1. Run `clue latest`. It determines whether a newer release is available and, when one is, prints the installation route for the machine it is running on. Do not reproduce an installation command here: one distributed skill cannot know the user's platform. If the release list cannot be reached, explain that Cliewen cannot tell whether a newer release exists; do not call the repository current on that basis, and continue to the next step. -2. Regardless of whether `clue latest` could reach the release list, run `clue migrate` without `--apply` as a preview, even when `clue latest` says the installed release is the newest. `clue latest` checks published CLI availability; the migration preview checks whether this repository's managed carriers match the installed binary and needs no network access. Treat planned changes, findings, and notices as repository drift to resolve. Call the repository current only when the release list was reachable and reported no newer release, and the preview reports no changes, no findings, and no notices other than the explicitly non-blocking `MIG-009` competing-wall notice, which a repository that keeps its own validation job beside the thin caller emits on every preview and which no command may repair. -3. If `clue latest` reports a newer release, or the migration preview reports drift against the installed release, read the relevant release notes, including their `### Migration` section. If the release list was unavailable but the preview reports drift, the installed release is the target for the carrier repair; do not invent a newer release, and if its notes cannot be fetched, say so and proceed on the preview alone rather than reconstructing what they say. Identify the coordinated corpus, generated-skill, and CI-caller changes before proposing any repository write. -4. If the release list was unavailable and the preview reports no changes, no findings, and no notices beyond that same non-blocking `MIG-009`, report that the local carriers match the installed binary but release freshness is unknown, then stop without calling the repository current or asking whether to upgrade. -5. When a newer release or carrier drift is known, ask the human whether to upgrade now or later. Do nothing to the repository until they explicitly choose now. A later answer is complete: report the release or carrier drift found and stop without applying migration, creating a branch, changing a file, or opening a pull request. -6. On an explicit yes, make the repository green and create a branch through its normal review process. Move the binary and repository together: use the already reviewed `clue migrate` preview, resolve every finding and notice — including those no command may repair — except the explicitly non-blocking `MIG-009` competing-wall notice, and apply only the complete, preflighted plan with the required reversal-cost choice. Keep the managed skills, the thin caller, and any repository corpus obligations on the chosen release together. When migration adds or reports an unactivated architecture or design overview, inspect the repository and existing documentation, draft concise repository-specific truth, and ask only about material unknowns. If a suitable overview exists outside `docs/architecture/README.md` or `docs/design/README.md`, present one grouped move and link-rewrite mapping; move it only after explicit human consent, or retain it and write a concise canonical pointer if consent is declined. A repository whose adoption predates the thin caller has none, and the migration creates it; if the migration reports a job in the repository's own workflows that validates beside the caller, reconcile that job by hand after applying, because two walls judge the same pull request under different rules and no command may rewrite a workflow Cliewen did not write. +2. Regardless of whether `clue latest` could reach the release list, run `clue migrate` without `--apply` as a preview, even when `clue latest` says the installed release is the newest. `clue latest` checks published CLI availability; the migration preview checks whether this repository's managed carriers match the installed binary and needs no network access. Treat planned changes, findings, and notices as drift, except the explicitly non-blocking `MIG-009` competing-wall notice that no command may repair. + +| What the checks report | Next action | +|---|---| +| The release list was reachable, reports no newer release, and the preview reports no changes, no findings, and no notices other than `MIG-009` | Call the repository current only when the release list was reachable and reported no newer release. | +| The release list was unavailable and the preview is clean except for `MIG-009` | Report that local carriers match the installed binary but release freshness is unknown; stop without calling the repository current or asking whether to upgrade. | +| A newer release is available or the preview reports drift | Read the relevant release notes, including their `### Migration` section, and identify the coordinated corpus, generated-skill, and CI-caller changes before proposing a write. If the release list was unavailable, the installed release is the target for the carrier repair; do not invent a newer release. If its notes cannot be fetched, say so and proceed on the preview alone. | + +3. When a newer release or carrier drift is known, ask the human whether to upgrade now or later. Do nothing to the repository until they explicitly choose now. A later answer is complete: report the release or drift found and stop without applying migration, creating a branch, changing a file, or opening a pull request. +4. On an explicit yes, make the repository green and create a branch through its normal review process. Move the binary and repository together: use the already reviewed `clue migrate` preview and apply only its complete, preflighted plan with the required reversal-cost choice. The migration must resolve every finding and notice — including those no command may repair — except the explicitly non-blocking `MIG-009` competing-wall notice and `MIG-013`; the latter invites separate work rather than upgrade work. Keep the managed skills, thin caller, and repository corpus obligations on the chosen release together. +5. Reconcile migration-specific repository state: + - `MIG-012` means the repository has not declared its role. Add `.clue/role.yaml`; an adopted repository declares `role: adopter`. + - When migration adds or reports an unactivated architecture or design overview, inspect the repository and existing documentation, draft concise repository-specific truth, and ask only about material unknowns. For a suitable overview outside `docs/architecture/README.md` or `docs/design/README.md`, present one grouped move and link-rewrite mapping; move it only with explicit human consent, otherwise retain it with a concise canonical pointer. + - An adopter that predates the thin caller receives one from migration. If migration reports a repository-owned workflow that validates beside it, reconcile that job by hand after applying: two walls judge one pull request under different rules, and no command may rewrite a workflow Cliewen did not write. +6. If the preview reported `MIG-013`, present the list and ask, one document at a time, whether each has anything left to say. A reported spike has complete plans, resolved declared carriers, and no live decision or constraint citation; it is a candidate, never a verdict. Retire an approved spike in its own reviewed change by deleting it and naming it in `supersedes:` on the artifact carrying its findings. Never empty it, fold its retirement into the upgrade, or move an unapproved document. 7. Verify the upgraded repository, commit the complete candidate, and run its required checks. Hand the upgrade to the human under the repository's integration rules; where agent-authored work uses a pull request, mark it ready. Never merge it: the repository's human merge boundary accepts the upgrade. diff --git a/.agents/skills/clue-upgrade/skill.md b/.agents/skills/clue-upgrade/skill.md index df03aeb..1377d3c 100644 --- a/.agents/skills/clue-upgrade/skill.md +++ b/.agents/skills/clue-upgrade/skill.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- diff --git a/.agents/skills/clue-verify/references/agentic-review-loop.md b/.agents/skills/clue-verify/references/agentic-review-loop.md index cc53525..dde19f1 100644 --- a/.agents/skills/clue-verify/references/agentic-review-loop.md +++ b/.agents/skills/clue-verify/references/agentic-review-loop.md @@ -4,7 +4,12 @@ Run this loop automatically; never ask the human to clear context or initiate a 1. Finish every intended edit and commit the complete candidate. Determine the current commit and its base on accepted `main`, then run the applicable local checks against that commit. 2. If the coding-agent host supports context-isolated delegation, start a new read-only reviewer without the implementation conversation. Give it only the repository, branch, base, and declared intent: recover a full change's proposal from branch history. If isolated delegation is unavailable, perform an explicit adversarial pass in the current context and label it `in-context fallback`; never describe that fallback as independent review. -3. Instruct the reviewer to inspect the complete base diff, durable corpus, tests, and constraints. It returns no edits, only findings about correctness, intent mismatch, regressions, security, missing evidence, or unjustified complexity. Each finding includes severity, location, evidence, the operative requirement or declared intent that is violated, the concrete consequence, and a remediation; an ID cited as evidence or as the violated requirement never stands alone — say in a few words what it is about, the same rule an index row follows. Apply authoritative decisions and the repository's explicit lifecycle rules before treating nearby wording as contradictory: human-controlled merge does not require duplicate human code review, and lifecycle-successor evidence satisfies a requirement when the repository declares that transition. Historical descriptions, optional activity, alternative readings, and lifecycle-correct state are not actionable defects by themselves. Exclude stylistic preference, optional improvement, and speculative scope expansion. Every finding is classified **blocking** or **advisory** and the reviewer's verdict is about the blocking set alone: a blocking finding is actionable and means the change breaks the corpus, gets behaviour wrong, leaves a false normative claim in a live carrier, or ships a criterion its evidence does not hold; an advisory is a non-actionable observation for the readiness gate, such as a stale figure a command computes, wording that drifted from a carrier without asserting anything false, or an inaccuracy in a comment. The loop owns this classification: a reviewer brief cannot redefine the severity model, and asking for an exhaustive sweep of an advisory class does not change the verdict. A finding whose substance is a count, total, population figure, or arithmetic disagreement is **advisory** whatever the brief called it; a wrong, missing, or reused identity remains **blocking**, because allocating an identity is not counting. The reviewer spends no pass re-deriving figures; that is the author's verification work before the ready mark. A reviewer that reports one undifferentiated list forces the implementing context to spend the same effort on a wrong function name in a carrier line as on a corpus-breaking defect, which is where a review loop's cost actually goes. When reviewing an existing hosted PR, bind the result to its observed head and ensure blocking findings become unresolved hosted review conversations under the **Review boundary**; advisories stay in the verification handoff rather than becoming repair-required conversations; the isolated reviewer itself remains read-only. +3. Instruct the reviewer to inspect the complete base diff, durable corpus, tests, and constraints. It returns no edits, only findings about correctness, intent mismatch, regressions, security, missing evidence, or unjustified complexity. + - Each finding includes severity, location, evidence, the operative requirement or declared intent that is violated, the concrete consequence, and a remediation. An ID never stands alone: say briefly what the cited evidence or requirement is about. + - Apply authoritative decisions and the repository's explicit lifecycle rules before treating wording as contradictory. A human-controlled merge does not require duplicate human code review, and lifecycle-successor evidence satisfies a requirement when the repository declares that transition. Historical descriptions, optional activity, alternative readings, and lifecycle-correct state are not actionable defects by themselves. Exclude stylistic preference, optional improvement, and speculative scope expansion. + - Every finding is classified **blocking** or **advisory**; the verdict concerns the blocking set alone, and a blocking finding is actionable: the change breaks the corpus, gets behaviour wrong, leaves a false normative claim in a live carrier, or ships a criterion its evidence does not hold; an advisory is a non-actionable observation for the readiness gate, such as a stale computed figure, non-normative carrier drift, or an inaccurate comment. The loop owns this classification; a reviewer brief cannot redefine the severity model. + - A finding whose substance is a count, total, population figure, or arithmetic disagreement is **advisory** whatever the brief called it; a wrong, missing, or reused identity remains **blocking**. The reviewer spends no pass re-deriving figures; that is the author's verification work before readiness. + - For an existing hosted PR, bind the result to its observed head. Under the **Review boundary**, publish blocking findings as unresolved hosted review conversations where supported; advisories stay in the verification handoff rather than becoming repair-required conversations, and the isolated reviewer itself remains read-only. 4. For every added or changed acceptance criterion, compare each scenario against its referenced tests' setup, action, and assertions. Record an advisory verdict for the acceptance brief: `verifies`, `verifies-something-adjacent`, or `undetermined`. This scenario-resolution result is not an actionable finding and does not gate `clue validate`; if it exposes a real defect, report that defect through the ordinary finding lifecycle. A `Human`-class criterion has no test to compare — name it in the brief instead, stating that the brief line is its proof, rather than recording a scenario-resolution verdict for it. 5. Resolve every blocking finding in the implementing context. A finding that requires a new decision or changed intent becomes an open question and stops the change. Otherwise the implementing context becomes the updater for that turn, follows the **Review boundary**, commits and pushes the repairs with the turn that made them, and reruns applicable local checks against the repaired commit. Advisories are carried in the verification evidence, not in unresolved repair-required review conversations, and never gate the ready mark. An advisory repair may ride before a review pass already required by a blocking repair; an advisory first reported by a pass with no blocking findings stays in the handoff for a later change, because editing the clean commit would create a new candidate that the exact-commit boundary requires reviewing. 6. Start a new review pass after every blocking repair; a previous clean result applies only to the commit it reviewed. Scope that pass to the diff since the reviewed commit plus the carriers those files declare, not to the whole change again — re-auditing unchanged work is what makes each pass cost as much as the first. An advisory finding alone does not start another pass, so the loop terminates on a pass with no blocking findings without changing its reviewed commit. **At most five passes** run for one change. That is a maximum, never a quota: the ordinary case is one pass that finds nothing blocking, and a further pass runs only when the immediately preceding pass returned at least one blocking finding. When the maximum is reached and blocking findings remain, stop and report them to the human — what was found, not how many passes ran — and ask whether to run further passes; only that answer runs another. Five is the default; a repository that wants a different maximum states it in its own `AGENTS.md` conventions, and that number governs there. Continue until the current commit receives a pass with no blocking findings. Do not mark the PR ready with unresolved blocking findings or without such a pass, whether or not the maximum was reached; the pushed branch and its draft PR simply show where the work stands. diff --git a/.agents/skills/clue-verify/references/repository-local-conventions.md b/.agents/skills/clue-verify/references/repository-local-conventions.md index 0e4094b..9dc9ca1 100644 --- a/.agents/skills/clue-verify/references/repository-local-conventions.md +++ b/.agents/skills/clue-verify/references/repository-local-conventions.md @@ -1,3 +1,5 @@ ## Repository-local conventions +Before applying a rule that differs by repository kind, read the role in `.clue/role.yaml`. `role: adopter` is a repository that has adopted Cliewen; `role: source` is Cliewen's own repository, which generates the skills and templates adopters receive and therefore carries rules no adopter ever inherits. A repository with no marker is an adopter. Do not infer the role from a directory listing, and do not apply a source-repository rule to an adopter's work. + For a full Cliewen change, apply the repository-local conventions declared in AGENTS.md, including digest requirements such as a user-facing changelog entry. When a release adds or narrows a corpus obligation, preview and apply the supported `clue migrate` migrations before validating the adopted repository; `clue init` remains a non-destructive materializer, not an updater. Simple work follows the repository conventions and checks that apply to its changed surfaces. Repository-local conventions may be stricter about integration. If a full-loop skill conflicts with a local rule, record the conflict in `open-questions.md` and stop for a human decision; never choose silently. diff --git a/.agents/skills/clue-verify/references/review-boundary.md b/.agents/skills/clue-verify/references/review-boundary.md index 5c49576..dddbc96 100644 --- a/.agents/skills/clue-verify/references/review-boundary.md +++ b/.agents/skills/clue-verify/references/review-boundary.md @@ -14,7 +14,7 @@ A PR alone displays hosted CI but does not enforce it. Where hosting supports en Every review of an existing hosted PR is bound to its observed head SHA. A clean result applies only to that commit; every substantive edit invalidates it. An advisory from a pass with no blocking findings stays in the verification handoff for a later change rather than editing the clean commit: the bounded loop is over, and an edit would create a new candidate that this exact-commit rule requires reviewing. A blocking finding is actionable durable PR state, not private agent memory: where the host supports resolvable review conversations, publish the finding there and leave it unresolved until a hosted commit contains the reviewed repair. Advisories do not become repair-required conversations. If the reviewer cannot publish a resolvable finding, report the PR as not merge-ready and disclose that the host cannot enforce the finding; this fail-safe applies to blocking findings, while advisories stay in the handoff; never claim a chat-only finding has equivalent protection. -Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If accepted `main` advances while the change is open, incorporate it by merging `main` into the change branch with a normal push, never by rewriting hosted history, then repeat verification and review. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. +Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. Ready means the hosted PR contains the exact locally reviewed and verified state, and marking it ready is the only claim of readiness. Before marking a change ready, commit every intended edit, run the applicable local verification and a clean agentic review pass against that commit, require `git status --porcelain` to be empty, push, and confirm that the hosted PR's head branch and SHA equal the current local branch and `HEAD`; then mark the PR ready and perform the hosted check again immediately after. Resolve satisfied review conversations only after the hosted head contains their reviewed repair. If either side differs, apply the updater rule above, rerun verification and review on the resulting commit, and check again. Stopping anywhere else is ordinary, not an exception: the branch is pushed, the PR is a draft, and no claim of readiness exists — say where the work stands rather than that a ready PR exists. diff --git a/.agents/skills/clue-verify/references/verification-checklist.md b/.agents/skills/clue-verify/references/verification-checklist.md index eb0694b..8d92b8d 100644 --- a/.agents/skills/clue-verify/references/verification-checklist.md +++ b/.agents/skills/clue-verify/references/verification-checklist.md @@ -11,6 +11,7 @@ Run this verification and review workflow before marking a full Cliewen PR ready - [ ] Plan bookkeeping reflects the merge, and no completed plan changed. A change completing a plan's last milestone closes that plan `completed` in this same digest. - [ ] Every active acceptance criterion satisfies its evidence contract: its identity uses the canonical uppercase segmented-prefix, decimal-digit, and lowercase-suffix grammar, a declared machine proof type has supported Go, JVM, or Cucumber evidence classified by that type and positive/negative direction (or the criterion records `(single-direction)`); JVM evidence carries its AC identity, type, and direction on the same Java or Kotlin executable through literal JUnit method tags or the stable named-executable form; a genuine `Human` criterion is named in the acceptance brief as its proof; an individual not-yet-proven criterion carries `@draft`; and an unannotated legacy criterion has its one supported reference. - [ ] Every `/docs/**` folder has a README; index blocks list every sibling artifact and no deleted file. +- [ ] Any vision or use case the change touched still states durable meaning rather than this change's news, drafted intent is still marked `draft` with `provenance: inferred`, and the acceptance brief names the vision the change proceeds under or states that the repository has none. - [ ] The architecture and design overviews are activated, concise, and current for the diff: architecture covers system structure, design covers cross-cutting behaviour, capability designs hold local detail, and the handoff names the documentation-impact disposition rather than a second change history. - [ ] The change was checked against each constraint listed in `docs/constraints/README.md`'s index (including verifiable quality bars), naming any that do not apply. - [ ] [Repository-local conventions](repository-local-conventions.md) satisfy their contract. diff --git a/.agents/skills/clue-verify/skill.md b/.agents/skills/clue-verify/skill.md index 3eda0d1..852f1f1 100644 --- a/.agents/skills/clue-verify/skill.md +++ b/.agents/skills/clue-verify/skill.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- diff --git a/.claude/skills/clue-analysis/SKILL.md b/.claude/skills/clue-analysis/SKILL.md index a18bb24..b3e664d 100644 --- a/.claude/skills/clue-analysis/SKILL.md +++ b/.claude/skills/clue-analysis/SKILL.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- diff --git a/.claude/skills/clue-analysis/references/analysis-workflow.md b/.claude/skills/clue-analysis/references/analysis-workflow.md index 57382a5..b239bd8 100644 --- a/.claude/skills/clue-analysis/references/analysis-workflow.md +++ b/.claude/skills/clue-analysis/references/analysis-workflow.md @@ -9,5 +9,6 @@ Use when a change has unclear risks or unknowns — **before** planning or imple 5. Run a **spike**: a throwaway investigation such as a prototype, measurement, or literature scan. Spikes are disposable; their findings are not. 6. End every spike with a findings document in `/docs/analysis/` (`AN-xxx-slug.md`, frontmatter: `id`, `type: analysis`, `status`, `links`, `title`). Include what was tried, what was rejected, and why; discarded options are half of why the system looks as it does. - If the finding is an incident where the corpus was green but reality proved a claim wrong, add `reality: contradicted` and link every failed capability or acceptance criterion as well as the decisions, constraints, or process carriers that failed to prevent it. This records the edge from reality; it does not ingest production telemetry or open the operations loop. + - When the findings reach a durable artifact — an architecture or design overview, a decision, a capability — record that in `carried-by:` naming those artifacts. A spike is a measurement pinned to the revision it observed, so it is not permanent truth; the field is what lets `clue migrate` later report the spike as spent, once every plan it serves is complete and no live decision or constraint still cites it. A standing rule whose evidence is gone is readable but no longer reviewable, so a citation keeps the spike; where the citation is provenance rather than evidence, remove it from the live record first. Retiring it then deletes the file in a reviewed change, with Git history as the archive. Never hollow a spike out into a stub: that keeps the index row, the link targets, and the reader's navigation cost while removing the only part with value. 7. Route any outcome that constitutes a decision under [Decision records](decision-records.md). A rejected alternative that is itself a decision gets a rejected decision record, not only a paragraph in the findings. 8. Feed findings to `clue-plan` or `clue-delta`. Analysis with no consumer is doc-slop; do not write it. diff --git a/.claude/skills/clue-delta/SKILL.md b/.claude/skills/clue-delta/SKILL.md index 4220045..2af6c46 100644 --- a/.claude/skills/clue-delta/SKILL.md +++ b/.claude/skills/clue-delta/SKILL.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- @@ -16,6 +16,7 @@ Read each reference when its condition is reached, before taking action governed - Before recommending a route or starting a full change, read [Change routing](references/change-scope-and-tiers.md). - Before branching, publishing, updating a hosted PR, or handing work to a human, read [Review boundary](references/review-boundary.md). - After the user chooses the recommended full loop, read [Change loop](references/change-loop.md). +- When the change touches what the product means, or the acceptance brief must state the vision it proceeds under, read [Intent model](references/intent-model.md). - When the change makes, rejects, or carries a decision, read [Decision records](references/decision-records.md). - Before applying repository-specific implementation or digest rules, read [Repository-local conventions](references/repository-local-conventions.md). - When a change starts or resumes, a suggestion arrives, or a merge is reported, read [Durable work state](references/durable-work-state.md). diff --git a/.claude/skills/clue-delta/references/change-loop.md b/.claude/skills/clue-delta/references/change-loop.md index 68b3d7e..76b1bb4 100644 --- a/.claude/skills/clue-delta/references/change-loop.md +++ b/.claude/skills/clue-delta/references/change-loop.md @@ -2,7 +2,7 @@ Use when the user chooses the full Cliewen loop recommended for accepted-contract change. Simple work is recommended before this skill and does not invoke it. Apply [Decision records](decision-records.md), [Repository-local conventions](repository-local-conventions.md), and [Durable work state](durable-work-state.md) throughout the loop. -1. **Branch:** Follow the review boundary, get the next CH identity with `clue id next CH`, and name the branch `ch-xxx-slug` with that identity. +1. **Branch:** Follow the review boundary, get the next CH identity with `clue id next CH`, and name the branch `ch-xxx-slug` with that identity. The command follows the ledger's tracked coordination mode. When it warns that allocation is local and contributors may work in parallel clones or worktrees, stop and either serialize allocation on the integration branch or have a maintainer enable Git coordination with `clue id coordinate` before contributors branch. A contributor given a preallocated identity runs `clue id sync`, uses that reservation, and never allocates independently from a stale local ledger. If remote allocation fails, do not guess, reuse, or edit the number by hand; retry or sync the allocator's permanent claims. Coordination settings live in `.clue/id-coordination.yaml`, not in the ledger; commit both after `clue id coordinate`, and treat a merge conflict in that file as the user's decision about which remote the team meant, never yours to resolve. Never re-point an established repository at a different remote. When a command reports that Git's union merge combined the ledger, the identities are intact: run `clue id repair`, or let the next command that saves the ledger rewrite it, and never hand-edit an append-only log. If two artifacts hold one identity, allocate a fresh one for the later artifact and update its references rather than renumbering either by hand. 2. **Propose:** Create `/changes/CH-xxx-slug/`, commit and push it before implementation, and open the draft PR under the review boundary: - `proposal.md` states what and why; its frontmatter `links` names the real plan item it serves or explicitly declares the change plan-less. - `tasks.md` is an ordered `- [ ]` checklist with dependencies first and at most one nested level. Mark an infeasible task `[-]` with its reason on the same line, whenever it is marked. A behavior-changing task names the acceptance-criterion IDs it serves; if none exists, add the criterion before implementation. Tests trace to criteria, never transient tasks. diff --git a/.claude/skills/clue-delta/references/repository-local-conventions.md b/.claude/skills/clue-delta/references/repository-local-conventions.md index 0e4094b..9dc9ca1 100644 --- a/.claude/skills/clue-delta/references/repository-local-conventions.md +++ b/.claude/skills/clue-delta/references/repository-local-conventions.md @@ -1,3 +1,5 @@ ## Repository-local conventions +Before applying a rule that differs by repository kind, read the role in `.clue/role.yaml`. `role: adopter` is a repository that has adopted Cliewen; `role: source` is Cliewen's own repository, which generates the skills and templates adopters receive and therefore carries rules no adopter ever inherits. A repository with no marker is an adopter. Do not infer the role from a directory listing, and do not apply a source-repository rule to an adopter's work. + For a full Cliewen change, apply the repository-local conventions declared in AGENTS.md, including digest requirements such as a user-facing changelog entry. When a release adds or narrows a corpus obligation, preview and apply the supported `clue migrate` migrations before validating the adopted repository; `clue init` remains a non-destructive materializer, not an updater. Simple work follows the repository conventions and checks that apply to its changed surfaces. Repository-local conventions may be stricter about integration. If a full-loop skill conflicts with a local rule, record the conflict in `open-questions.md` and stop for a human decision; never choose silently. diff --git a/.claude/skills/clue-delta/references/review-boundary.md b/.claude/skills/clue-delta/references/review-boundary.md index 5c49576..dddbc96 100644 --- a/.claude/skills/clue-delta/references/review-boundary.md +++ b/.claude/skills/clue-delta/references/review-boundary.md @@ -14,7 +14,7 @@ A PR alone displays hosted CI but does not enforce it. Where hosting supports en Every review of an existing hosted PR is bound to its observed head SHA. A clean result applies only to that commit; every substantive edit invalidates it. An advisory from a pass with no blocking findings stays in the verification handoff for a later change rather than editing the clean commit: the bounded loop is over, and an edit would create a new candidate that this exact-commit rule requires reviewing. A blocking finding is actionable durable PR state, not private agent memory: where the host supports resolvable review conversations, publish the finding there and leave it unresolved until a hosted commit contains the reviewed repair. Advisories do not become repair-required conversations. If the reviewer cannot publish a resolvable finding, report the PR as not merge-ready and disclose that the host cannot enforce the finding; this fail-safe applies to blocking findings, while advisories stay in the handoff; never claim a chat-only finding has equivalent protection. -Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If accepted `main` advances while the change is open, incorporate it by merging `main` into the change branch with a normal push, never by rewriting hosted history, then repeat verification and review. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. +Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. Ready means the hosted PR contains the exact locally reviewed and verified state, and marking it ready is the only claim of readiness. Before marking a change ready, commit every intended edit, run the applicable local verification and a clean agentic review pass against that commit, require `git status --porcelain` to be empty, push, and confirm that the hosted PR's head branch and SHA equal the current local branch and `HEAD`; then mark the PR ready and perform the hosted check again immediately after. Resolve satisfied review conversations only after the hosted head contains their reviewed repair. If either side differs, apply the updater rule above, rerun verification and review on the resulting commit, and check again. Stopping anywhere else is ordinary, not an exception: the branch is pushed, the PR is a draft, and no claim of readiness exists — say where the work stands rather than that a ready PR exists. diff --git a/.claude/skills/clue-extract/SKILL.md b/.claude/skills/clue-extract/SKILL.md index 32651dd..957f346 100644 --- a/.claude/skills/clue-extract/SKILL.md +++ b/.claude/skills/clue-extract/SKILL.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- @@ -17,6 +17,8 @@ Read each reference when its condition is reached, before taking action governed - Before beginning an extraction, read [Boundaries](references/boundaries.md). - After proposal and before changing the target corpus, tests, routing, or hosted state, read [Rehearsal before mutation](references/rehearsal-before-mutation.md). - After the human authorizes mutation and while constructing the target corpus, read [Target contract](references/target-contract.md). +- Before proposing a vision or any use case for the target corpus, read [Intent model](references/intent-model.md). +- When the source repository states no usable vision, read [Intent discovery](references/intent-discovery.md). - When the source uses a supported format or needs a new mapping, read [Source mappings](references/source-mappings.md). - When extraction classifies or records a consequential choice, read [Decision records](references/decision-records.md). - Before reconciling source instructions with repository-specific rules, read [Repository-local conventions](references/repository-local-conventions.md). diff --git a/.claude/skills/clue-extract/mappings/madr.md b/.claude/skills/clue-extract/mappings/madr.md index 59f3152..9e6f805 100644 --- a/.claude/skills/clue-extract/mappings/madr.md +++ b/.claude/skills/clue-extract/mappings/madr.md @@ -25,6 +25,4 @@ Layout: decision records live in `docs/decisions/` or `doc/adr/`, one file per r | older Nygard headings (`## Status`, `## Context`, `## Decision`, `## Consequences`) | `## Status` converts per the status-vocabulary rows above; `## Context` and `## Decision` become `## Context and problem statement` and `## Decision outcome`; `## Consequences` folds into body prose under Decision outcome or its own trailing sentence | | Hand-maintained per-folder index (`INDEX.md`, `index.md`, a `## Contents` table) | absorbed into that folder's README `clue:index` rows, then deleted — the description, purpose, or scope column becomes the row's sentence, while a column that only restates a `links:` edge (a design or related-decision pointer) is dropped rather than carried | -Worked case: Robocode Tank Royale, a public repository extracted through `clue-extract` in 2026. Its decision corpus is what these rows are written against — 41 records in one `docs/decisions/` folder beside that folder's `README.md` and `log.md`, every record carrying a numeric filename prefix, five written to the MADR template headings and the rest to Nygard's `## Context` / `## Decision` / `## Consequences`. That conversion happened before this mapping existed, and it is where the `decision-makers` row above comes from: it wrote the records' own pre-Cliewen acceptance into `accepted-by:` (annotated `pre-Cliewen MADR acceptance`) and left them `status: verified`, so the corpus now shows approvals no human ever gave under its merge boundary. It also carried the source padding into the IDs themselves, which is the form that corpus now keeps — an already-converted corpus is never re-styled, per the numeric-prefix row above. The rows above are what that conversion would have followed. - Watch for: a folder mixing MADR and Nygard records side by side, where only some files carry frontmatter; a `superseded by` reference written three ways (a plain-prose mention in the Decision Outcome section, a `superseded-by:` frontmatter key, or an inline link to the successor file) that all mean the same `links:` edge; a record's number reused across `doc/adr/` and `docs/decisions/` from a past folder migration; a `proposed` record nobody ever acted on, which is an open question rather than a decision the merge would make binding; and the temptation to write `decision-makers` straight into `accepted-by:` because the names are already there — the shortcut looks harmless but a converted record's `accepted-by:` has to mean the same thing as every other record's. diff --git a/.claude/skills/clue-extract/references/repository-local-conventions.md b/.claude/skills/clue-extract/references/repository-local-conventions.md index 0e4094b..9dc9ca1 100644 --- a/.claude/skills/clue-extract/references/repository-local-conventions.md +++ b/.claude/skills/clue-extract/references/repository-local-conventions.md @@ -1,3 +1,5 @@ ## Repository-local conventions +Before applying a rule that differs by repository kind, read the role in `.clue/role.yaml`. `role: adopter` is a repository that has adopted Cliewen; `role: source` is Cliewen's own repository, which generates the skills and templates adopters receive and therefore carries rules no adopter ever inherits. A repository with no marker is an adopter. Do not infer the role from a directory listing, and do not apply a source-repository rule to an adopter's work. + For a full Cliewen change, apply the repository-local conventions declared in AGENTS.md, including digest requirements such as a user-facing changelog entry. When a release adds or narrows a corpus obligation, preview and apply the supported `clue migrate` migrations before validating the adopted repository; `clue init` remains a non-destructive materializer, not an updater. Simple work follows the repository conventions and checks that apply to its changed surfaces. Repository-local conventions may be stricter about integration. If a full-loop skill conflicts with a local rule, record the conflict in `open-questions.md` and stop for a human decision; never choose silently. diff --git a/.claude/skills/clue-extract/references/review-boundary.md b/.claude/skills/clue-extract/references/review-boundary.md index 5c49576..dddbc96 100644 --- a/.claude/skills/clue-extract/references/review-boundary.md +++ b/.claude/skills/clue-extract/references/review-boundary.md @@ -14,7 +14,7 @@ A PR alone displays hosted CI but does not enforce it. Where hosting supports en Every review of an existing hosted PR is bound to its observed head SHA. A clean result applies only to that commit; every substantive edit invalidates it. An advisory from a pass with no blocking findings stays in the verification handoff for a later change rather than editing the clean commit: the bounded loop is over, and an edit would create a new candidate that this exact-commit rule requires reviewing. A blocking finding is actionable durable PR state, not private agent memory: where the host supports resolvable review conversations, publish the finding there and leave it unresolved until a hosted commit contains the reviewed repair. Advisories do not become repair-required conversations. If the reviewer cannot publish a resolvable finding, report the PR as not merge-ready and disclose that the host cannot enforce the finding; this fail-safe applies to blocking findings, while advisories stay in the handoff; never claim a chat-only finding has equivalent protection. -Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If accepted `main` advances while the change is open, incorporate it by merging `main` into the change branch with a normal push, never by rewriting hosted history, then repeat verification and review. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. +Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. Ready means the hosted PR contains the exact locally reviewed and verified state, and marking it ready is the only claim of readiness. Before marking a change ready, commit every intended edit, run the applicable local verification and a clean agentic review pass against that commit, require `git status --porcelain` to be empty, push, and confirm that the hosted PR's head branch and SHA equal the current local branch and `HEAD`; then mark the PR ready and perform the hosted check again immediately after. Resolve satisfied review conversations only after the hosted head contains their reviewed repair. If either side differs, apply the updater rule above, rerun verification and review on the resulting commit, and check again. Stopping anywhere else is ordinary, not an exception: the branch is pushed, the PR is a draft, and no claim of readiness exists — say where the work stands rather than that a ready PR exists. diff --git a/.claude/skills/clue-plan/SKILL.md b/.claude/skills/clue-plan/SKILL.md index 67b1be8..d527151 100644 --- a/.claude/skills/clue-plan/SKILL.md +++ b/.claude/skills/clue-plan/SKILL.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- @@ -14,4 +14,6 @@ Create or revise a verifiable campaign plan through the reviewed Cliewen change Read each reference when its condition is reached, before taking action governed by it. The references are required instructions, not optional background. - Before creating or revising a plan, read [Planning workflow](references/planning-workflow.md). +- Before deciding which goals a plan serves, and whether any journey needs a use case, read [Intent model](references/intent-model.md). +- When the repository states no usable vision, read [Intent discovery](references/intent-discovery.md). - When plan meaning or another consequential choice is recorded, read [Decision records](references/decision-records.md). diff --git a/.claude/skills/clue-plan/references/planning-workflow.md b/.claude/skills/clue-plan/references/planning-workflow.md index c8faadb..21efe49 100644 --- a/.claude/skills/clue-plan/references/planning-workflow.md +++ b/.claude/skills/clue-plan/references/planning-workflow.md @@ -2,9 +2,10 @@ Use when creating a plan or changing what a plan promises. -1. Create or revise a plan through `clue-delta`; a plan mutation is itself a branch and PR. The digest is the plan file in `/docs/plans/`. -2. Keep plans as flat `P-xxx-slug.md` files with status in frontmatter (`draft` → `active` → `completed`). Milestones (`M-xxx`) are rows in the plan's milestone table, each with a verifiable exit criterion. -3. Treat semantic mutation and bookkeeping differently: +1. Before planning anything, check what direction the corpus states: run `clue validate --intent`. A plan whose goals serve no stated vision is not blocked, but a repository that has never stated one is the moment to offer [Intent discovery](intent-discovery.md), and a plan that contradicts an active vision is a conflict to raise rather than to plan around. +2. Create or revise a plan through `clue-delta`; a plan mutation is itself a branch and PR. The digest is the plan file in `/docs/plans/`. +3. Keep plans as flat `P-xxx-slug.md` files with status in frontmatter (`draft` → `active` → `completed`). Milestones (`M-xxx`) are rows in the plan's milestone table, each with a verifiable exit criterion. +4. Treat semantic mutation and bookkeeping differently: - **Semantic:** Direction, scope, milestone addition/removal, or anything else that changes the plan's promise requires human acceptance and a decision record under [Decision records](decision-records.md). Agents may propose; only humans accept. The default vehicle is a dedicated plan change and PR. A revision discovered during implementation may ride with that implementing change only when the PR declares the plan revision, a correctly typed decision record backs it, the PR calls it out for deliberate approval, and an explicit objection can revert the revision while leaving the milestone open without blocking the rest of the change. - **Bookkeeping:** Marking a milestone done belongs in the implementing change's merge digest, never a separate PR. Closing the plan is the same bookkeeping: the change completing the last milestone also sets it `completed`, in that digest. A campaign is over the moment its last milestone is evidenced, so leaving it `active` publishes an index claiming work is in flight that is not. Designate the successor plan there too when one is decided; not having decided one never holds the closure open. Every milestone's evidence must be in the table before that digest lands, because the closed plan is immutable afterwards. -4. Treat `status: completed` as immutable and never delete a completed plan. +5. Treat `status: completed` as immutable and never delete a completed plan. diff --git a/.claude/skills/clue-upgrade/SKILL.md b/.claude/skills/clue-upgrade/SKILL.md index df03aeb..1377d3c 100644 --- a/.claude/skills/clue-upgrade/SKILL.md +++ b/.claude/skills/clue-upgrade/SKILL.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- diff --git a/.claude/skills/clue-upgrade/references/repository-local-conventions.md b/.claude/skills/clue-upgrade/references/repository-local-conventions.md index 0e4094b..9dc9ca1 100644 --- a/.claude/skills/clue-upgrade/references/repository-local-conventions.md +++ b/.claude/skills/clue-upgrade/references/repository-local-conventions.md @@ -1,3 +1,5 @@ ## Repository-local conventions +Before applying a rule that differs by repository kind, read the role in `.clue/role.yaml`. `role: adopter` is a repository that has adopted Cliewen; `role: source` is Cliewen's own repository, which generates the skills and templates adopters receive and therefore carries rules no adopter ever inherits. A repository with no marker is an adopter. Do not infer the role from a directory listing, and do not apply a source-repository rule to an adopter's work. + For a full Cliewen change, apply the repository-local conventions declared in AGENTS.md, including digest requirements such as a user-facing changelog entry. When a release adds or narrows a corpus obligation, preview and apply the supported `clue migrate` migrations before validating the adopted repository; `clue init` remains a non-destructive materializer, not an updater. Simple work follows the repository conventions and checks that apply to its changed surfaces. Repository-local conventions may be stricter about integration. If a full-loop skill conflicts with a local rule, record the conflict in `open-questions.md` and stop for a human decision; never choose silently. diff --git a/.claude/skills/clue-upgrade/references/review-boundary.md b/.claude/skills/clue-upgrade/references/review-boundary.md index 5c49576..dddbc96 100644 --- a/.claude/skills/clue-upgrade/references/review-boundary.md +++ b/.claude/skills/clue-upgrade/references/review-boundary.md @@ -14,7 +14,7 @@ A PR alone displays hosted CI but does not enforce it. Where hosting supports en Every review of an existing hosted PR is bound to its observed head SHA. A clean result applies only to that commit; every substantive edit invalidates it. An advisory from a pass with no blocking findings stays in the verification handoff for a later change rather than editing the clean commit: the bounded loop is over, and an edit would create a new candidate that this exact-commit rule requires reviewing. A blocking finding is actionable durable PR state, not private agent memory: where the host supports resolvable review conversations, publish the finding there and leave it unresolved until a hosted commit contains the reviewed repair. Advisories do not become repair-required conversations. If the reviewer cannot publish a resolvable finding, report the PR as not merge-ready and disclose that the host cannot enforce the finding; this fail-safe applies to blocking findings, while advisories stay in the handoff; never claim a chat-only finding has equivalent protection. -Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If accepted `main` advances while the change is open, incorporate it by merging `main` into the change branch with a normal push, never by rewriting hosted history, then repeat verification and review. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. +Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. Ready means the hosted PR contains the exact locally reviewed and verified state, and marking it ready is the only claim of readiness. Before marking a change ready, commit every intended edit, run the applicable local verification and a clean agentic review pass against that commit, require `git status --porcelain` to be empty, push, and confirm that the hosted PR's head branch and SHA equal the current local branch and `HEAD`; then mark the PR ready and perform the hosted check again immediately after. Resolve satisfied review conversations only after the hosted head contains their reviewed repair. If either side differs, apply the updater rule above, rerun verification and review on the resulting commit, and check again. Stopping anywhere else is ordinary, not an exception: the branch is pushed, the PR is a draft, and no claim of readiness exists — say where the work stands rather than that a ready PR exists. diff --git a/.claude/skills/clue-upgrade/references/upgrade-workflow.md b/.claude/skills/clue-upgrade/references/upgrade-workflow.md index 5e3dfd3..475be75 100644 --- a/.claude/skills/clue-upgrade/references/upgrade-workflow.md +++ b/.claude/skills/clue-upgrade/references/upgrade-workflow.md @@ -7,9 +7,19 @@ Use when a repository already uses Cliewen and the human wants to find out wheth Escalate only on a semantic discovery: when applying the release requires this repository to decide something of its own — an obligation it must choose how to meet, a reconciliation that changes what its own criteria or its own wall promise, or a finding whose resolution is a judgment about this repository rather than a transcription of the release — recommend the full loop for that decision on its own terms. The mechanical move around it stays simple. 1. Run `clue latest`. It determines whether a newer release is available and, when one is, prints the installation route for the machine it is running on. Do not reproduce an installation command here: one distributed skill cannot know the user's platform. If the release list cannot be reached, explain that Cliewen cannot tell whether a newer release exists; do not call the repository current on that basis, and continue to the next step. -2. Regardless of whether `clue latest` could reach the release list, run `clue migrate` without `--apply` as a preview, even when `clue latest` says the installed release is the newest. `clue latest` checks published CLI availability; the migration preview checks whether this repository's managed carriers match the installed binary and needs no network access. Treat planned changes, findings, and notices as repository drift to resolve. Call the repository current only when the release list was reachable and reported no newer release, and the preview reports no changes, no findings, and no notices other than the explicitly non-blocking `MIG-009` competing-wall notice, which a repository that keeps its own validation job beside the thin caller emits on every preview and which no command may repair. -3. If `clue latest` reports a newer release, or the migration preview reports drift against the installed release, read the relevant release notes, including their `### Migration` section. If the release list was unavailable but the preview reports drift, the installed release is the target for the carrier repair; do not invent a newer release, and if its notes cannot be fetched, say so and proceed on the preview alone rather than reconstructing what they say. Identify the coordinated corpus, generated-skill, and CI-caller changes before proposing any repository write. -4. If the release list was unavailable and the preview reports no changes, no findings, and no notices beyond that same non-blocking `MIG-009`, report that the local carriers match the installed binary but release freshness is unknown, then stop without calling the repository current or asking whether to upgrade. -5. When a newer release or carrier drift is known, ask the human whether to upgrade now or later. Do nothing to the repository until they explicitly choose now. A later answer is complete: report the release or carrier drift found and stop without applying migration, creating a branch, changing a file, or opening a pull request. -6. On an explicit yes, make the repository green and create a branch through its normal review process. Move the binary and repository together: use the already reviewed `clue migrate` preview, resolve every finding and notice — including those no command may repair — except the explicitly non-blocking `MIG-009` competing-wall notice, and apply only the complete, preflighted plan with the required reversal-cost choice. Keep the managed skills, the thin caller, and any repository corpus obligations on the chosen release together. When migration adds or reports an unactivated architecture or design overview, inspect the repository and existing documentation, draft concise repository-specific truth, and ask only about material unknowns. If a suitable overview exists outside `docs/architecture/README.md` or `docs/design/README.md`, present one grouped move and link-rewrite mapping; move it only after explicit human consent, or retain it and write a concise canonical pointer if consent is declined. A repository whose adoption predates the thin caller has none, and the migration creates it; if the migration reports a job in the repository's own workflows that validates beside the caller, reconcile that job by hand after applying, because two walls judge the same pull request under different rules and no command may rewrite a workflow Cliewen did not write. +2. Regardless of whether `clue latest` could reach the release list, run `clue migrate` without `--apply` as a preview, even when `clue latest` says the installed release is the newest. `clue latest` checks published CLI availability; the migration preview checks whether this repository's managed carriers match the installed binary and needs no network access. Treat planned changes, findings, and notices as drift, except the explicitly non-blocking `MIG-009` competing-wall notice that no command may repair. + +| What the checks report | Next action | +|---|---| +| The release list was reachable, reports no newer release, and the preview reports no changes, no findings, and no notices other than `MIG-009` | Call the repository current only when the release list was reachable and reported no newer release. | +| The release list was unavailable and the preview is clean except for `MIG-009` | Report that local carriers match the installed binary but release freshness is unknown; stop without calling the repository current or asking whether to upgrade. | +| A newer release is available or the preview reports drift | Read the relevant release notes, including their `### Migration` section, and identify the coordinated corpus, generated-skill, and CI-caller changes before proposing a write. If the release list was unavailable, the installed release is the target for the carrier repair; do not invent a newer release. If its notes cannot be fetched, say so and proceed on the preview alone. | + +3. When a newer release or carrier drift is known, ask the human whether to upgrade now or later. Do nothing to the repository until they explicitly choose now. A later answer is complete: report the release or drift found and stop without applying migration, creating a branch, changing a file, or opening a pull request. +4. On an explicit yes, make the repository green and create a branch through its normal review process. Move the binary and repository together: use the already reviewed `clue migrate` preview and apply only its complete, preflighted plan with the required reversal-cost choice. The migration must resolve every finding and notice — including those no command may repair — except the explicitly non-blocking `MIG-009` competing-wall notice and `MIG-013`; the latter invites separate work rather than upgrade work. Keep the managed skills, thin caller, and repository corpus obligations on the chosen release together. +5. Reconcile migration-specific repository state: + - `MIG-012` means the repository has not declared its role. Add `.clue/role.yaml`; an adopted repository declares `role: adopter`. + - When migration adds or reports an unactivated architecture or design overview, inspect the repository and existing documentation, draft concise repository-specific truth, and ask only about material unknowns. For a suitable overview outside `docs/architecture/README.md` or `docs/design/README.md`, present one grouped move and link-rewrite mapping; move it only with explicit human consent, otherwise retain it with a concise canonical pointer. + - An adopter that predates the thin caller receives one from migration. If migration reports a repository-owned workflow that validates beside it, reconcile that job by hand after applying: two walls judge one pull request under different rules, and no command may rewrite a workflow Cliewen did not write. +6. If the preview reported `MIG-013`, present the list and ask, one document at a time, whether each has anything left to say. A reported spike has complete plans, resolved declared carriers, and no live decision or constraint citation; it is a candidate, never a verdict. Retire an approved spike in its own reviewed change by deleting it and naming it in `supersedes:` on the artifact carrying its findings. Never empty it, fold its retirement into the upgrade, or move an unapproved document. 7. Verify the upgraded repository, commit the complete candidate, and run its required checks. Hand the upgrade to the human under the repository's integration rules; where agent-authored work uses a pull request, mark it ready. Never merge it: the repository's human merge boundary accepts the upgrade. diff --git a/.claude/skills/clue-verify/SKILL.md b/.claude/skills/clue-verify/SKILL.md index 3eda0d1..852f1f1 100644 --- a/.claude/skills/clue-verify/SKILL.md +++ b/.claude/skills/clue-verify/SKILL.md @@ -1,6 +1,6 @@ --- cliewen-skill: true -version: 0.21.0 +version: 0.24.1 --- diff --git a/.claude/skills/clue-verify/references/agentic-review-loop.md b/.claude/skills/clue-verify/references/agentic-review-loop.md index cc53525..dde19f1 100644 --- a/.claude/skills/clue-verify/references/agentic-review-loop.md +++ b/.claude/skills/clue-verify/references/agentic-review-loop.md @@ -4,7 +4,12 @@ Run this loop automatically; never ask the human to clear context or initiate a 1. Finish every intended edit and commit the complete candidate. Determine the current commit and its base on accepted `main`, then run the applicable local checks against that commit. 2. If the coding-agent host supports context-isolated delegation, start a new read-only reviewer without the implementation conversation. Give it only the repository, branch, base, and declared intent: recover a full change's proposal from branch history. If isolated delegation is unavailable, perform an explicit adversarial pass in the current context and label it `in-context fallback`; never describe that fallback as independent review. -3. Instruct the reviewer to inspect the complete base diff, durable corpus, tests, and constraints. It returns no edits, only findings about correctness, intent mismatch, regressions, security, missing evidence, or unjustified complexity. Each finding includes severity, location, evidence, the operative requirement or declared intent that is violated, the concrete consequence, and a remediation; an ID cited as evidence or as the violated requirement never stands alone — say in a few words what it is about, the same rule an index row follows. Apply authoritative decisions and the repository's explicit lifecycle rules before treating nearby wording as contradictory: human-controlled merge does not require duplicate human code review, and lifecycle-successor evidence satisfies a requirement when the repository declares that transition. Historical descriptions, optional activity, alternative readings, and lifecycle-correct state are not actionable defects by themselves. Exclude stylistic preference, optional improvement, and speculative scope expansion. Every finding is classified **blocking** or **advisory** and the reviewer's verdict is about the blocking set alone: a blocking finding is actionable and means the change breaks the corpus, gets behaviour wrong, leaves a false normative claim in a live carrier, or ships a criterion its evidence does not hold; an advisory is a non-actionable observation for the readiness gate, such as a stale figure a command computes, wording that drifted from a carrier without asserting anything false, or an inaccuracy in a comment. The loop owns this classification: a reviewer brief cannot redefine the severity model, and asking for an exhaustive sweep of an advisory class does not change the verdict. A finding whose substance is a count, total, population figure, or arithmetic disagreement is **advisory** whatever the brief called it; a wrong, missing, or reused identity remains **blocking**, because allocating an identity is not counting. The reviewer spends no pass re-deriving figures; that is the author's verification work before the ready mark. A reviewer that reports one undifferentiated list forces the implementing context to spend the same effort on a wrong function name in a carrier line as on a corpus-breaking defect, which is where a review loop's cost actually goes. When reviewing an existing hosted PR, bind the result to its observed head and ensure blocking findings become unresolved hosted review conversations under the **Review boundary**; advisories stay in the verification handoff rather than becoming repair-required conversations; the isolated reviewer itself remains read-only. +3. Instruct the reviewer to inspect the complete base diff, durable corpus, tests, and constraints. It returns no edits, only findings about correctness, intent mismatch, regressions, security, missing evidence, or unjustified complexity. + - Each finding includes severity, location, evidence, the operative requirement or declared intent that is violated, the concrete consequence, and a remediation. An ID never stands alone: say briefly what the cited evidence or requirement is about. + - Apply authoritative decisions and the repository's explicit lifecycle rules before treating wording as contradictory. A human-controlled merge does not require duplicate human code review, and lifecycle-successor evidence satisfies a requirement when the repository declares that transition. Historical descriptions, optional activity, alternative readings, and lifecycle-correct state are not actionable defects by themselves. Exclude stylistic preference, optional improvement, and speculative scope expansion. + - Every finding is classified **blocking** or **advisory**; the verdict concerns the blocking set alone, and a blocking finding is actionable: the change breaks the corpus, gets behaviour wrong, leaves a false normative claim in a live carrier, or ships a criterion its evidence does not hold; an advisory is a non-actionable observation for the readiness gate, such as a stale computed figure, non-normative carrier drift, or an inaccurate comment. The loop owns this classification; a reviewer brief cannot redefine the severity model. + - A finding whose substance is a count, total, population figure, or arithmetic disagreement is **advisory** whatever the brief called it; a wrong, missing, or reused identity remains **blocking**. The reviewer spends no pass re-deriving figures; that is the author's verification work before readiness. + - For an existing hosted PR, bind the result to its observed head. Under the **Review boundary**, publish blocking findings as unresolved hosted review conversations where supported; advisories stay in the verification handoff rather than becoming repair-required conversations, and the isolated reviewer itself remains read-only. 4. For every added or changed acceptance criterion, compare each scenario against its referenced tests' setup, action, and assertions. Record an advisory verdict for the acceptance brief: `verifies`, `verifies-something-adjacent`, or `undetermined`. This scenario-resolution result is not an actionable finding and does not gate `clue validate`; if it exposes a real defect, report that defect through the ordinary finding lifecycle. A `Human`-class criterion has no test to compare — name it in the brief instead, stating that the brief line is its proof, rather than recording a scenario-resolution verdict for it. 5. Resolve every blocking finding in the implementing context. A finding that requires a new decision or changed intent becomes an open question and stops the change. Otherwise the implementing context becomes the updater for that turn, follows the **Review boundary**, commits and pushes the repairs with the turn that made them, and reruns applicable local checks against the repaired commit. Advisories are carried in the verification evidence, not in unresolved repair-required review conversations, and never gate the ready mark. An advisory repair may ride before a review pass already required by a blocking repair; an advisory first reported by a pass with no blocking findings stays in the handoff for a later change, because editing the clean commit would create a new candidate that the exact-commit boundary requires reviewing. 6. Start a new review pass after every blocking repair; a previous clean result applies only to the commit it reviewed. Scope that pass to the diff since the reviewed commit plus the carriers those files declare, not to the whole change again — re-auditing unchanged work is what makes each pass cost as much as the first. An advisory finding alone does not start another pass, so the loop terminates on a pass with no blocking findings without changing its reviewed commit. **At most five passes** run for one change. That is a maximum, never a quota: the ordinary case is one pass that finds nothing blocking, and a further pass runs only when the immediately preceding pass returned at least one blocking finding. When the maximum is reached and blocking findings remain, stop and report them to the human — what was found, not how many passes ran — and ask whether to run further passes; only that answer runs another. Five is the default; a repository that wants a different maximum states it in its own `AGENTS.md` conventions, and that number governs there. Continue until the current commit receives a pass with no blocking findings. Do not mark the PR ready with unresolved blocking findings or without such a pass, whether or not the maximum was reached; the pushed branch and its draft PR simply show where the work stands. diff --git a/.claude/skills/clue-verify/references/repository-local-conventions.md b/.claude/skills/clue-verify/references/repository-local-conventions.md index 0e4094b..9dc9ca1 100644 --- a/.claude/skills/clue-verify/references/repository-local-conventions.md +++ b/.claude/skills/clue-verify/references/repository-local-conventions.md @@ -1,3 +1,5 @@ ## Repository-local conventions +Before applying a rule that differs by repository kind, read the role in `.clue/role.yaml`. `role: adopter` is a repository that has adopted Cliewen; `role: source` is Cliewen's own repository, which generates the skills and templates adopters receive and therefore carries rules no adopter ever inherits. A repository with no marker is an adopter. Do not infer the role from a directory listing, and do not apply a source-repository rule to an adopter's work. + For a full Cliewen change, apply the repository-local conventions declared in AGENTS.md, including digest requirements such as a user-facing changelog entry. When a release adds or narrows a corpus obligation, preview and apply the supported `clue migrate` migrations before validating the adopted repository; `clue init` remains a non-destructive materializer, not an updater. Simple work follows the repository conventions and checks that apply to its changed surfaces. Repository-local conventions may be stricter about integration. If a full-loop skill conflicts with a local rule, record the conflict in `open-questions.md` and stop for a human decision; never choose silently. diff --git a/.claude/skills/clue-verify/references/review-boundary.md b/.claude/skills/clue-verify/references/review-boundary.md index 5c49576..dddbc96 100644 --- a/.claude/skills/clue-verify/references/review-boundary.md +++ b/.claude/skills/clue-verify/references/review-boundary.md @@ -14,7 +14,7 @@ A PR alone displays hosted CI but does not enforce it. Where hosting supports en Every review of an existing hosted PR is bound to its observed head SHA. A clean result applies only to that commit; every substantive edit invalidates it. An advisory from a pass with no blocking findings stays in the verification handoff for a later change rather than editing the clean commit: the bounded loop is over, and an edit would create a new candidate that this exact-commit rule requires reviewing. A blocking finding is actionable durable PR state, not private agent memory: where the host supports resolvable review conversations, publish the finding there and leave it unresolved until a hosted commit contains the reviewed repair. Advisories do not become repair-required conversations. If the reviewer cannot publish a resolvable finding, report the PR as not merge-ready and disclose that the host cannot enforce the finding; this fail-safe applies to blocking findings, while advisories stay in the handoff; never claim a chat-only finding has equivalent protection. -Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If accepted `main` advances while the change is open, incorporate it by merging `main` into the change branch with a normal push, never by rewriting hosted history, then repeat verification and review. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. +Any agent that edits an existing PR becomes the updater for that turn. Before editing, fetch the PR and record its hosted head; push only normal fast-forward updates, never force. If the head changed underneath the turn or a push is rejected as non-fast-forward, fetch and reconcile without overwriting remote work, then rerun verification and review on the resulting commit. A repair pushed to a ready PR returns it to draft until the repaired head has its own verification and clean review pass. If the PR merged or closed, stop without pushing — the one case where a turn ends unpushed — report the work and where it stands, and never create a follow-up change without explicit human scope. Ready means the hosted PR contains the exact locally reviewed and verified state, and marking it ready is the only claim of readiness. Before marking a change ready, commit every intended edit, run the applicable local verification and a clean agentic review pass against that commit, require `git status --porcelain` to be empty, push, and confirm that the hosted PR's head branch and SHA equal the current local branch and `HEAD`; then mark the PR ready and perform the hosted check again immediately after. Resolve satisfied review conversations only after the hosted head contains their reviewed repair. If either side differs, apply the updater rule above, rerun verification and review on the resulting commit, and check again. Stopping anywhere else is ordinary, not an exception: the branch is pushed, the PR is a draft, and no claim of readiness exists — say where the work stands rather than that a ready PR exists. diff --git a/.claude/skills/clue-verify/references/verification-checklist.md b/.claude/skills/clue-verify/references/verification-checklist.md index eb0694b..8d92b8d 100644 --- a/.claude/skills/clue-verify/references/verification-checklist.md +++ b/.claude/skills/clue-verify/references/verification-checklist.md @@ -11,6 +11,7 @@ Run this verification and review workflow before marking a full Cliewen PR ready - [ ] Plan bookkeeping reflects the merge, and no completed plan changed. A change completing a plan's last milestone closes that plan `completed` in this same digest. - [ ] Every active acceptance criterion satisfies its evidence contract: its identity uses the canonical uppercase segmented-prefix, decimal-digit, and lowercase-suffix grammar, a declared machine proof type has supported Go, JVM, or Cucumber evidence classified by that type and positive/negative direction (or the criterion records `(single-direction)`); JVM evidence carries its AC identity, type, and direction on the same Java or Kotlin executable through literal JUnit method tags or the stable named-executable form; a genuine `Human` criterion is named in the acceptance brief as its proof; an individual not-yet-proven criterion carries `@draft`; and an unannotated legacy criterion has its one supported reference. - [ ] Every `/docs/**` folder has a README; index blocks list every sibling artifact and no deleted file. +- [ ] Any vision or use case the change touched still states durable meaning rather than this change's news, drafted intent is still marked `draft` with `provenance: inferred`, and the acceptance brief names the vision the change proceeds under or states that the repository has none. - [ ] The architecture and design overviews are activated, concise, and current for the diff: architecture covers system structure, design covers cross-cutting behaviour, capability designs hold local detail, and the handoff names the documentation-impact disposition rather than a second change history. - [ ] The change was checked against each constraint listed in `docs/constraints/README.md`'s index (including verifiable quality bars), naming any that do not apply. - [ ] [Repository-local conventions](repository-local-conventions.md) satisfy their contract. diff --git a/.clue/id-coordination.yaml b/.clue/id-coordination.yaml new file mode 100644 index 0000000..1359259 --- /dev/null +++ b/.clue/id-coordination.yaml @@ -0,0 +1,2 @@ +mode: git +remote: origin diff --git a/.clue/id-ledger.yaml b/.clue/id-ledger.yaml index c263092..be0a680 100644 --- a/.clue/id-ledger.yaml +++ b/.clue/id-ledger.yaml @@ -1,664 +1,156 @@ -counters: - ADR: "2" - AN: "14" - API: "6" - ARCH: "3" - C: "7" - CAP: "8" - CH: "12" - CRIT: "8" - DES: "8" - EVT: "15" - FIO: "4" - G: "2" - IDR: "8" - OQ: "4" - P: "1" - PDR: "2" - REH: "1" - ROUTE: "12" - TASKS: "6" - TEAM: "3" -entries: - - id: ADR-001 - kind: numeric - state: live - prefix: ADR - component: "1" - - id: ADR-002 - kind: numeric - state: live - prefix: ADR - component: "2" - - id: AN-001 - kind: numeric - state: live - prefix: AN - component: "1" - - id: AN-002 - kind: numeric - state: live - prefix: AN - component: "2" - - id: AN-003 - kind: numeric - state: live - prefix: AN - component: "3" - - id: AN-004 - kind: numeric - state: live - prefix: AN - component: "4" - - id: AN-005 - kind: numeric - state: live - prefix: AN - component: "5" - - id: AN-006 - kind: numeric - state: live - prefix: AN - component: "6" - - id: AN-007 - kind: numeric - state: live - prefix: AN - component: "7" - - id: AN-008 - kind: numeric - state: live - prefix: AN - component: "8" - - id: AN-009 - kind: numeric - state: live - prefix: AN - component: "9" - - id: AN-010 - kind: numeric - state: live - prefix: AN - component: "10" - - id: AN-011 - kind: numeric - state: live - prefix: AN - component: "11" - - id: AN-012 - kind: numeric - state: live - prefix: AN - component: "12" - - id: AN-013 - kind: numeric - state: live - prefix: AN - component: "13" - - id: AN-014 - kind: numeric - state: live - prefix: AN - component: "14" - - id: API-001 - kind: numeric - state: live - prefix: API - component: "1" - - id: API-002 - kind: numeric - state: live - prefix: API - component: "2" - - id: API-003 - kind: numeric - state: live - prefix: API - component: "3" - - id: API-004 - kind: numeric - state: live - prefix: API - component: "4" - - id: API-005 - kind: numeric - state: live - prefix: API - component: "5" - - id: API-006 - kind: numeric - state: live - prefix: API - component: "6" - - id: ARCH-001 - kind: numeric - state: live - prefix: ARCH - component: "1" - - id: ARCH-002 - kind: numeric - state: live - prefix: ARCH - component: "2" - - id: ARCH-003 - kind: numeric - state: live - prefix: ARCH - component: "3" - - id: C-001 - kind: numeric - state: live - prefix: C - component: "1" - - id: C-002 - kind: numeric - state: live - prefix: C - component: "2" - - id: C-003 - kind: numeric - state: live - prefix: C - component: "3" - - id: C-004 - kind: numeric - state: live - prefix: C - component: "4" - - id: C-005 - kind: numeric - state: live - prefix: C - component: "5" - - id: C-006 - kind: numeric - state: live - prefix: C - component: "6" - - id: C-007 - kind: numeric - state: live - prefix: C - component: "7" - - id: CAP-001 - kind: numeric - state: live - prefix: CAP - component: "1" - - id: CAP-002 - kind: numeric - state: live - prefix: CAP - component: "2" - - id: CAP-003 - kind: numeric - state: live - prefix: CAP - component: "3" - - id: CAP-004 - kind: numeric - state: live - prefix: CAP - component: "4" - - id: CAP-005 - kind: numeric - state: live - prefix: CAP - component: "5" - - id: CAP-006 - kind: numeric - state: live - prefix: CAP - component: "6" - - id: CAP-007 - kind: numeric - state: live - prefix: CAP - component: "7" - - id: CAP-008 - kind: numeric - state: live - prefix: CAP - component: "8" - - id: CH-001 - kind: numeric - state: live - prefix: CH - component: "1" - - id: CH-002 - kind: numeric - state: live - prefix: CH - component: "2" - - id: CH-003 - kind: numeric - state: live - prefix: CH - component: "3" - - id: CH-004 - kind: numeric - state: live - prefix: CH - component: "4" - - id: CH-005 - kind: numeric - state: live - prefix: CH - component: "5" - - id: CH-006 - kind: numeric - state: live - prefix: CH - component: "6" - - id: CH-007 - kind: numeric - state: live - prefix: CH - component: "7" - - id: CH-008 - kind: numeric - state: reserved - prefix: CH - component: "8" - - id: CH-009 - kind: numeric - state: live - prefix: CH - component: "9" - - id: CH-010 - kind: numeric - state: live - prefix: CH - component: "10" - - id: CH-011 - kind: numeric - state: reserved - prefix: CH - component: "11" - - id: CH-012 - kind: numeric - state: live - prefix: CH - component: "12" - - id: CH-012-proposal - kind: opaque - state: live - - id: CH-012-tasks - kind: opaque - state: live - - id: CH-012-open-questions - kind: opaque - state: live - - id: CH-012-verification - kind: opaque - state: live - - id: CRIT-001 - kind: numeric - state: live - prefix: CRIT - component: "1" - - id: CRIT-002 - kind: numeric - state: live - prefix: CRIT - component: "2" - - id: CRIT-003 - kind: numeric - state: live - prefix: CRIT - component: "3" - - id: CRIT-004 - kind: numeric - state: live - prefix: CRIT - component: "4" - - id: CRIT-005 - kind: numeric - state: live - prefix: CRIT - component: "5" - - id: CRIT-006 - kind: numeric - state: live - prefix: CRIT - component: "6" - - id: CRIT-007 - kind: numeric - state: live - prefix: CRIT - component: "7" - - id: CRIT-008 - kind: numeric - state: live - prefix: CRIT - component: "8" - - id: DES-001 - kind: numeric - state: live - prefix: DES - component: "1" - - id: DES-002 - kind: numeric - state: live - prefix: DES - component: "2" - - id: DES-003 - kind: numeric - state: live - prefix: DES - component: "3" - - id: DES-004 - kind: numeric - state: live - prefix: DES - component: "4" - - id: DES-005 - kind: numeric - state: live - prefix: DES - component: "5" - - id: DES-006 - kind: numeric - state: live - prefix: DES - component: "6" - - id: DES-007 - kind: numeric - state: live - prefix: DES - component: "7" - - id: DES-008 - kind: numeric - state: live - prefix: DES - component: "8" - - id: EVT-001 - kind: numeric - state: retired - prefix: EVT - component: "1" - - id: EVT-002 - kind: numeric - state: live - prefix: EVT - component: "2" - - id: EVT-003 - kind: numeric - state: retired - prefix: EVT - component: "3" - - id: EVT-004 - kind: numeric - state: live - prefix: EVT - component: "4" - - id: EVT-005 - kind: numeric - state: live - prefix: EVT - component: "5" - - id: EVT-006 - kind: numeric - state: live - prefix: EVT - component: "6" - - id: EVT-007 - kind: numeric - state: retired - prefix: EVT - component: "7" - - id: EVT-008 - kind: numeric - state: live - prefix: EVT - component: "8" - - id: EVT-009 - kind: numeric - state: live - prefix: EVT - component: "9" - - id: EVT-010 - kind: numeric - state: live - prefix: EVT - component: "10" - - id: EVT-011 - kind: numeric - state: live - prefix: EVT - component: "11" - - id: EVT-012 - kind: numeric - state: live - prefix: EVT - component: "12" - - id: EVT-013 - kind: numeric - state: live - prefix: EVT - component: "13" - - id: EVT-014 - kind: numeric - state: live - prefix: EVT - component: "14" - - id: EVT-015 - kind: numeric - state: live - prefix: EVT - component: "15" - - id: FIO-001 - kind: numeric - state: live - prefix: FIO - component: "1" - - id: FIO-002 - kind: numeric - state: live - prefix: FIO - component: "2" - - id: FIO-003 - kind: numeric - state: live - prefix: FIO - component: "3" - - id: FIO-004 - kind: numeric - state: live - prefix: FIO - component: "4" - - id: G-001 - kind: numeric - state: live - prefix: G - component: "1" - - id: G-002 - kind: numeric - state: live - prefix: G - component: "2" - - id: IDR-001 - kind: numeric - state: live - prefix: IDR - component: "1" - - id: IDR-002 - kind: numeric - state: live - prefix: IDR - component: "2" - - id: IDR-003 - kind: numeric - state: live - prefix: IDR - component: "3" - - id: IDR-004 - kind: numeric - state: live - prefix: IDR - component: "4" - - id: IDR-005 - kind: numeric - state: live - prefix: IDR - component: "5" - - id: IDR-006 - kind: numeric - state: live - prefix: IDR - component: "6" - - id: IDR-007 - kind: numeric - state: live - prefix: IDR - component: "7" - - id: IDR-008 - kind: numeric - state: live - prefix: IDR - component: "8" - - id: OQ-001 - kind: numeric - state: live - prefix: OQ - component: "1" - - id: OQ-002 - kind: numeric - state: live - prefix: OQ - component: "2" - - id: OQ-003 - kind: numeric - state: live - prefix: OQ - component: "3" - - id: OQ-004 - kind: numeric - state: live - prefix: OQ - component: "4" - - id: P-001 - kind: numeric - state: live - prefix: P - component: "1" - - id: PDR-001 - kind: numeric - state: live - prefix: PDR - component: "1" - - id: PDR-002 - kind: numeric - state: live - prefix: PDR - component: "2" - - id: REH-001 - kind: numeric - state: live - prefix: REH - component: "1" - - id: ROUTE-001 - kind: numeric - state: live - prefix: ROUTE - component: "1" - - id: ROUTE-002 - kind: numeric - state: live - prefix: ROUTE - component: "2" - - id: ROUTE-003 - kind: numeric - state: live - prefix: ROUTE - component: "3" - - id: ROUTE-004 - kind: numeric - state: live - prefix: ROUTE - component: "4" - - id: ROUTE-005 - kind: numeric - state: live - prefix: ROUTE - component: "5" - - id: ROUTE-006 - kind: numeric - state: live - prefix: ROUTE - component: "6" - - id: ROUTE-007 - kind: numeric - state: live - prefix: ROUTE - component: "7" - - id: ROUTE-008 - kind: numeric - state: live - prefix: ROUTE - component: "8" - - id: ROUTE-009 - kind: numeric - state: live - prefix: ROUTE - component: "9" - - id: ROUTE-010 - kind: numeric - state: live - prefix: ROUTE - component: "10" - - id: ROUTE-011 - kind: numeric - state: live - prefix: ROUTE - component: "11" - - id: ROUTE-012 - kind: numeric - state: live - prefix: ROUTE - component: "12" - - id: TASKS-001 - kind: numeric - state: live - prefix: TASKS - component: "1" - - id: TASKS-002 - kind: numeric - state: live - prefix: TASKS - component: "2" - - id: TASKS-003 - kind: numeric - state: live - prefix: TASKS - component: "3" - - id: TASKS-004 - kind: numeric - state: live - prefix: TASKS - component: "4" - - id: TASKS-005 - kind: numeric - state: live - prefix: TASKS - component: "5" - - id: TASKS-006 - kind: numeric - state: live - prefix: TASKS - component: "6" - - id: TEAM-001 - kind: numeric - state: live - prefix: TEAM - component: "1" - - id: TEAM-002 - kind: numeric - state: live - prefix: TEAM - component: "2" - - id: TEAM-003 - kind: numeric - state: live - prefix: TEAM - component: "3" +version: 2 +events: + - {id: ADR-001, kind: numeric, state: live, prefix: ADR, component: "1"} + - {id: ADR-002, kind: numeric, state: live, prefix: ADR, component: "2"} + - {id: AN-001, kind: numeric, state: live, prefix: AN, component: "1"} + - {id: AN-002, kind: numeric, state: live, prefix: AN, component: "2"} + - {id: AN-003, kind: numeric, state: live, prefix: AN, component: "3"} + - {id: AN-004, kind: numeric, state: live, prefix: AN, component: "4"} + - {id: AN-005, kind: numeric, state: live, prefix: AN, component: "5"} + - {id: AN-006, kind: numeric, state: live, prefix: AN, component: "6"} + - {id: AN-007, kind: numeric, state: live, prefix: AN, component: "7"} + - {id: AN-008, kind: numeric, state: live, prefix: AN, component: "8"} + - {id: AN-009, kind: numeric, state: live, prefix: AN, component: "9"} + - {id: AN-010, kind: numeric, state: live, prefix: AN, component: "10"} + - {id: AN-011, kind: numeric, state: live, prefix: AN, component: "11"} + - {id: AN-012, kind: numeric, state: live, prefix: AN, component: "12"} + - {id: AN-013, kind: numeric, state: live, prefix: AN, component: "13"} + - {id: AN-014, kind: numeric, state: live, prefix: AN, component: "14"} + - {id: API-001, kind: numeric, state: live, prefix: API, component: "1"} + - {id: API-002, kind: numeric, state: live, prefix: API, component: "2"} + - {id: API-003, kind: numeric, state: live, prefix: API, component: "3"} + - {id: API-004, kind: numeric, state: live, prefix: API, component: "4"} + - {id: API-005, kind: numeric, state: live, prefix: API, component: "5"} + - {id: API-006, kind: numeric, state: live, prefix: API, component: "6"} + - {id: ARCH-001, kind: numeric, state: live, prefix: ARCH, component: "1"} + - {id: ARCH-002, kind: numeric, state: live, prefix: ARCH, component: "2"} + - {id: ARCH-003, kind: numeric, state: live, prefix: ARCH, component: "3"} + - {id: C-001, kind: numeric, state: live, prefix: C, component: "1"} + - {id: C-002, kind: numeric, state: live, prefix: C, component: "2"} + - {id: C-003, kind: numeric, state: live, prefix: C, component: "3"} + - {id: C-004, kind: numeric, state: live, prefix: C, component: "4"} + - {id: C-005, kind: numeric, state: live, prefix: C, component: "5"} + - {id: C-006, kind: numeric, state: live, prefix: C, component: "6"} + - {id: C-007, kind: numeric, state: live, prefix: C, component: "7"} + - {id: CAP-001, kind: numeric, state: live, prefix: CAP, component: "1"} + - {id: CAP-002, kind: numeric, state: live, prefix: CAP, component: "2"} + - {id: CAP-003, kind: numeric, state: live, prefix: CAP, component: "3"} + - {id: CAP-004, kind: numeric, state: live, prefix: CAP, component: "4"} + - {id: CAP-005, kind: numeric, state: live, prefix: CAP, component: "5"} + - {id: CAP-006, kind: numeric, state: live, prefix: CAP, component: "6"} + - {id: CAP-007, kind: numeric, state: live, prefix: CAP, component: "7"} + - {id: CAP-008, kind: numeric, state: live, prefix: CAP, component: "8"} + - {id: CH-001, kind: numeric, state: live, prefix: CH, component: "1"} + - {id: CH-002, kind: numeric, state: live, prefix: CH, component: "2"} + - {id: CH-003, kind: numeric, state: live, prefix: CH, component: "3"} + - {id: CH-004, kind: numeric, state: live, prefix: CH, component: "4"} + - {id: CH-005, kind: numeric, state: live, prefix: CH, component: "5"} + - {id: CH-006, kind: numeric, state: live, prefix: CH, component: "6"} + - {id: CH-007, kind: numeric, state: live, prefix: CH, component: "7"} + - {id: CH-008, kind: numeric, state: reserved, prefix: CH, component: "8"} + - {id: CH-009, kind: numeric, state: live, prefix: CH, component: "9"} + - {id: CH-010, kind: numeric, state: live, prefix: CH, component: "10"} + - {id: CH-011, kind: numeric, state: reserved, prefix: CH, component: "11"} + - {id: CH-012, kind: numeric, state: live, prefix: CH, component: "12"} + - {id: CH-012-open-questions, kind: opaque, state: live} + - {id: CH-012-proposal, kind: opaque, state: live} + - {id: CH-012-tasks, kind: opaque, state: live} + - {id: CH-012-verification, kind: opaque, state: live} + - {id: CH-013, kind: numeric, state: reserved, prefix: CH, component: "13"} + - {id: CRIT-001, kind: numeric, state: live, prefix: CRIT, component: "1"} + - {id: CRIT-002, kind: numeric, state: live, prefix: CRIT, component: "2"} + - {id: CRIT-003, kind: numeric, state: live, prefix: CRIT, component: "3"} + - {id: CRIT-004, kind: numeric, state: live, prefix: CRIT, component: "4"} + - {id: CRIT-005, kind: numeric, state: live, prefix: CRIT, component: "5"} + - {id: CRIT-006, kind: numeric, state: live, prefix: CRIT, component: "6"} + - {id: CRIT-007, kind: numeric, state: live, prefix: CRIT, component: "7"} + - {id: CRIT-008, kind: numeric, state: live, prefix: CRIT, component: "8"} + - {id: DES-001, kind: numeric, state: live, prefix: DES, component: "1"} + - {id: DES-002, kind: numeric, state: live, prefix: DES, component: "2"} + - {id: DES-003, kind: numeric, state: live, prefix: DES, component: "3"} + - {id: DES-004, kind: numeric, state: live, prefix: DES, component: "4"} + - {id: DES-005, kind: numeric, state: live, prefix: DES, component: "5"} + - {id: DES-006, kind: numeric, state: live, prefix: DES, component: "6"} + - {id: DES-007, kind: numeric, state: live, prefix: DES, component: "7"} + - {id: DES-008, kind: numeric, state: live, prefix: DES, component: "8"} + - {id: EVT-001, kind: numeric, state: retired, prefix: EVT, component: "1"} + - {id: EVT-002, kind: numeric, state: live, prefix: EVT, component: "2"} + - {id: EVT-003, kind: numeric, state: retired, prefix: EVT, component: "3"} + - {id: EVT-004, kind: numeric, state: live, prefix: EVT, component: "4"} + - {id: EVT-005, kind: numeric, state: live, prefix: EVT, component: "5"} + - {id: EVT-006, kind: numeric, state: live, prefix: EVT, component: "6"} + - {id: EVT-007, kind: numeric, state: retired, prefix: EVT, component: "7"} + - {id: EVT-008, kind: numeric, state: live, prefix: EVT, component: "8"} + - {id: EVT-009, kind: numeric, state: live, prefix: EVT, component: "9"} + - {id: EVT-010, kind: numeric, state: live, prefix: EVT, component: "10"} + - {id: EVT-011, kind: numeric, state: live, prefix: EVT, component: "11"} + - {id: EVT-012, kind: numeric, state: live, prefix: EVT, component: "12"} + - {id: EVT-013, kind: numeric, state: live, prefix: EVT, component: "13"} + - {id: EVT-014, kind: numeric, state: live, prefix: EVT, component: "14"} + - {id: EVT-015, kind: numeric, state: live, prefix: EVT, component: "15"} + - {id: FIO-001, kind: numeric, state: live, prefix: FIO, component: "1"} + - {id: FIO-002, kind: numeric, state: live, prefix: FIO, component: "2"} + - {id: FIO-003, kind: numeric, state: live, prefix: FIO, component: "3"} + - {id: FIO-004, kind: numeric, state: live, prefix: FIO, component: "4"} + - {id: G-001, kind: numeric, state: live, prefix: G, component: "1"} + - {id: G-002, kind: numeric, state: live, prefix: G, component: "2"} + - {id: IDR-001, kind: numeric, state: live, prefix: IDR, component: "1"} + - {id: IDR-002, kind: numeric, state: live, prefix: IDR, component: "2"} + - {id: IDR-003, kind: numeric, state: live, prefix: IDR, component: "3"} + - {id: IDR-004, kind: numeric, state: live, prefix: IDR, component: "4"} + - {id: IDR-005, kind: numeric, state: live, prefix: IDR, component: "5"} + - {id: IDR-006, kind: numeric, state: live, prefix: IDR, component: "6"} + - {id: IDR-007, kind: numeric, state: live, prefix: IDR, component: "7"} + - {id: IDR-008, kind: numeric, state: live, prefix: IDR, component: "8"} + - {id: OQ-001, kind: numeric, state: live, prefix: OQ, component: "1"} + - {id: OQ-002, kind: numeric, state: live, prefix: OQ, component: "2"} + - {id: OQ-003, kind: numeric, state: live, prefix: OQ, component: "3"} + - {id: OQ-004, kind: numeric, state: live, prefix: OQ, component: "4"} + - {id: P-001, kind: numeric, state: live, prefix: P, component: "1"} + - {id: PDR-001, kind: numeric, state: live, prefix: PDR, component: "1"} + - {id: PDR-002, kind: numeric, state: live, prefix: PDR, component: "2"} + - {id: REH-001, kind: numeric, state: live, prefix: REH, component: "1"} + - {id: ROUTE-001, kind: numeric, state: live, prefix: ROUTE, component: "1"} + - {id: ROUTE-002, kind: numeric, state: live, prefix: ROUTE, component: "2"} + - {id: ROUTE-003, kind: numeric, state: live, prefix: ROUTE, component: "3"} + - {id: ROUTE-004, kind: numeric, state: live, prefix: ROUTE, component: "4"} + - {id: ROUTE-005, kind: numeric, state: live, prefix: ROUTE, component: "5"} + - {id: ROUTE-006, kind: numeric, state: live, prefix: ROUTE, component: "6"} + - {id: ROUTE-007, kind: numeric, state: live, prefix: ROUTE, component: "7"} + - {id: ROUTE-008, kind: numeric, state: live, prefix: ROUTE, component: "8"} + - {id: ROUTE-009, kind: numeric, state: live, prefix: ROUTE, component: "9"} + - {id: ROUTE-010, kind: numeric, state: live, prefix: ROUTE, component: "10"} + - {id: ROUTE-011, kind: numeric, state: live, prefix: ROUTE, component: "11"} + - {id: ROUTE-012, kind: numeric, state: live, prefix: ROUTE, component: "12"} + - {id: TASKS-001, kind: numeric, state: live, prefix: TASKS, component: "1"} + - {id: TASKS-002, kind: numeric, state: live, prefix: TASKS, component: "2"} + - {id: TASKS-003, kind: numeric, state: live, prefix: TASKS, component: "3"} + - {id: TASKS-004, kind: numeric, state: live, prefix: TASKS, component: "4"} + - {id: TASKS-005, kind: numeric, state: live, prefix: TASKS, component: "5"} + - {id: TASKS-006, kind: numeric, state: live, prefix: TASKS, component: "6"} + - {id: TEAM-001, kind: numeric, state: live, prefix: TEAM, component: "1"} + - {id: TEAM-002, kind: numeric, state: live, prefix: TEAM, component: "2"} + - {id: TEAM-003, kind: numeric, state: live, prefix: TEAM, component: "3"} + - {id: CH-014, kind: numeric, state: reserved, prefix: CH, component: "14"} + - {id: CH-014, kind: numeric, state: live, prefix: CH, component: "14"} +high-water: + - {id: ADR-002, kind: numeric, state: reserved, prefix: ADR, component: "2"} + - {id: AN-014, kind: numeric, state: reserved, prefix: AN, component: "14"} + - {id: API-006, kind: numeric, state: reserved, prefix: API, component: "6"} + - {id: ARCH-003, kind: numeric, state: reserved, prefix: ARCH, component: "3"} + - {id: C-007, kind: numeric, state: reserved, prefix: C, component: "7"} + - {id: CAP-008, kind: numeric, state: reserved, prefix: CAP, component: "8"} + - {id: CH-013, kind: numeric, state: reserved, prefix: CH, component: "13"} + - {id: CRIT-008, kind: numeric, state: reserved, prefix: CRIT, component: "8"} + - {id: DES-008, kind: numeric, state: reserved, prefix: DES, component: "8"} + - {id: EVT-015, kind: numeric, state: reserved, prefix: EVT, component: "15"} + - {id: FIO-004, kind: numeric, state: reserved, prefix: FIO, component: "4"} + - {id: G-002, kind: numeric, state: reserved, prefix: G, component: "2"} + - {id: IDR-008, kind: numeric, state: reserved, prefix: IDR, component: "8"} + - {id: OQ-004, kind: numeric, state: reserved, prefix: OQ, component: "4"} + - {id: P-001, kind: numeric, state: reserved, prefix: P, component: "1"} + - {id: PDR-002, kind: numeric, state: reserved, prefix: PDR, component: "2"} + - {id: REH-001, kind: numeric, state: reserved, prefix: REH, component: "1"} + - {id: ROUTE-012, kind: numeric, state: reserved, prefix: ROUTE, component: "12"} + - {id: TASKS-006, kind: numeric, state: reserved, prefix: TASKS, component: "6"} + - {id: TEAM-003, kind: numeric, state: reserved, prefix: TEAM, component: "3"} diff --git a/.clue/role.yaml b/.clue/role.yaml new file mode 100644 index 0000000..3b913db --- /dev/null +++ b/.clue/role.yaml @@ -0,0 +1 @@ +role: adopter diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7ba97d1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +/.clue/id-ledger.yaml merge=union diff --git a/.github/workflows/clue.yml b/.github/workflows/clue.yml index 64d1756..d3a24c7 100644 --- a/.github/workflows/clue.yml +++ b/.github/workflows/clue.yml @@ -18,10 +18,10 @@ permissions: jobs: validate: name: validate - uses: cliewen/cliewen/.github/workflows/clue-validation.yml@12ca1063247e60d7d241bd2a9f35c5f27849f122 + uses: cliewen/cliewen/.github/workflows/clue-validation.yml@v0.24.1 with: runner: '["ubuntu-latest"]' - clue-version: 0.21.0 + clue-version: 0.24.1 # release rather than vendored: the binary is downloaded and its checksum # verified per run, so a multi-megabyte executable stays out of a repository # whose whole purpose is comparing robot behaviour. The version is pinned diff --git a/changes/CH-014-m006-versioned-parity-registry/open-questions.md b/changes/CH-014-m006-versioned-parity-registry/open-questions.md new file mode 100644 index 0000000..afb6441 --- /dev/null +++ b/changes/CH-014-m006-versioned-parity-registry/open-questions.md @@ -0,0 +1,3 @@ +# Open questions + +None currently. A missing classic baseline, an unclassifiable error origin, or an upstream behaviour that cannot be reproduced locally becomes a registry case and a diagnosis task; it does not silently pass. diff --git a/changes/CH-014-m006-versioned-parity-registry/proposal.md b/changes/CH-014-m006-versioned-parity-registry/proposal.md new file mode 100644 index 0000000..90a9378 --- /dev/null +++ b/changes/CH-014-m006-versioned-parity-registry/proposal.md @@ -0,0 +1,15 @@ +--- +id: CH-014 +type: change +status: proposed +links: [P-001#M-006] +title: Turn M-006 into a versioned legacy-robot parity campaign +--- + +# Proposal + +M-006 currently promises one sweep report. That report is ignored by Git, records only the latest observation, and cannot tell a reviewer whether a failure on Tank Royale is equivalent to classic Robocode or whether a later repair fixed the affected robots. + +This change makes classic Robocode the explicit behavioural reference and adds a tracked parity registry for every rumble jar and team. The registry records pinned engine artifacts, official division setup, outcome, normalized errors, score evidence, diagnosis, and repair retests. It retains healthy cases without rerunning them after unrelated repairs, while batches of unresolved cases are retested by named cause. + +The change revises M-006, C-004, CAP-005, and CAP-007 because it changes the campaign and measurement methodology. It records the decision in a PDR, upgrades the generated Cliewen carriers needed for coordinated identity allocation, and updates the harness and its tests. Participant jars remain read-only. diff --git a/changes/CH-014-m006-versioned-parity-registry/tasks.md b/changes/CH-014-m006-versioned-parity-registry/tasks.md new file mode 100644 index 0000000..ecc7882 --- /dev/null +++ b/changes/CH-014-m006-versioned-parity-registry/tasks.md @@ -0,0 +1,9 @@ +# Tasks + +- [ ] Commit the required Cliewen carrier migration, coordinated identity ledger, adopter role, and proposal; serves `P-001#M-006`. +- [ ] Record the versioned parity-registry decision and revise the M-006 campaign, constraints, capabilities, criteria, designs, and harness guidance; serves `SCORE-001`, `SCORE-002`, `SCORE-003`, `SCORE-006`, `HARN-001`, `HARN-003`, and `HARN-006`. +- [ ] Add a tracked parity registry, generated review table, artifact manifest, and migration path for checkpoint state; serves `SCORE-001` and `HARN-001`. +- [ ] Extend the harness with origin-aware error equivalence, unresolved and cause-based retests, and 25-subject batch checkpoints; serves `SCORE-003`, `HARN-003`, and `HARN-006`. +- [ ] Add focused positive and negative tests for registry identity, status transitions, error normalization, score confirmation, and team cases; serves `SCORE-002`, `SCORE-003`, `HARN-001`, and `HARN-003`. +- [ ] Import eligible official observations, run focused real-engine checks, and save the first registry checkpoint; serves `SCORE-001` and `SCORE-006`. +- [ ] Regenerate indexes, digest the permanent corpus, verify the committed candidate, and prepare the draft PR for review. diff --git a/docs/README.md b/docs/README.md index a592e28..d66734f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -55,4 +55,5 @@ Each folder below holds one kind of record. A full change (the `clue-delta` loop - [decisions/](decisions/README.md) — ADR-xxx, PDR-xxx, and IDR-xxx future-shaping choices - [constraints/](constraints/README.md) — C-xxx: laws, licenses, policies, and verifiable quality bars you must not break - [analysis/](analysis/README.md) — spike findings, extraction reports +- [use-cases/](use-cases/README.md) diff --git a/docs/use-cases/README.md b/docs/use-cases/README.md new file mode 100644 index 0000000..becbd18 --- /dev/null +++ b/docs/use-cases/README.md @@ -0,0 +1,16 @@ +# Use cases + +UC-xxx: one actor's end-to-end path across capabilities. `type: use-case`, filename `UC--.md`. + +**This folder is optional and staying empty is a normal outcome.** Nothing requires a goal, a capability, or a criterion to have a use case, no report counts coverage over them, and absence is never a gap. + +Write one when it changes what a reader understands: a journey crossing several capabilities, ordering or failure recovery that carries meaning, criteria that are each locally correct and still do not add up to the outcome, several actors collaborating, or brownfield behaviour no single capability explains. + +Do not write one when a capability and its criteria already describe the behaviour clearly, when there is no meaningful actor interaction, when it would restate a goal, or when the subject is internal implementation behaviour that design, architecture, a constraint, or an IDR owns. A use case never restates an acceptance criterion and never becomes a design. + +**Links point down.** A use case names the goal it serves and every capability it crosses; capabilities do not name their use cases, so the edge is written once. `clue context ` names the use cases that reach an artifact, by identity and title, without following them. + +Each use case carries `## Actors`, `## Trigger`, `## Main flow`, and `## Outcome`, and adds preconditions, alternative and failure flows, and open questions when they carry meaning. + + + From 61d983a123ed0f82b700e108c2f0ba8ccc508f93 Mon Sep 17 00:00:00 2001 From: "Flemming N. Larsen" Date: Wed, 9 Sep 2026 19:58:18 +0200 Subject: [PATCH 2/5] Add versioned parity registry harness --- .clue/id-ledger.yaml | 3 + .../tasks.md | 10 +- compat-test/README.md | 9 +- compat-test/compat_test.py | 130 +- compat-test/parity-registry.json | 20742 ++++++++++++++++ compat-test/parity-registry.md | 243 + compat-test/parity_registry.py | 159 + compat-test/test_parity_registry.py | 77 + .../CAP-005-score-parity/README.md | 2 +- .../CAP-005-score-parity/criteria.md | 5 +- .../CAP-007-compatibility-harness/README.md | 2 +- .../CAP-007-compatibility-harness/criteria.md | 6 +- .../CAP-007-compatibility-harness/design.md | 12 +- docs/constraints/C-004-regression-gate.md | 10 +- .../PDR-003-versioned-parity-registry.md | 23 + docs/decisions/README.md | 1 + docs/plans/P-001-bridge-parity-campaign.md | 4 +- 17 files changed, 21397 insertions(+), 41 deletions(-) create mode 100644 compat-test/parity-registry.json create mode 100644 compat-test/parity-registry.md create mode 100644 compat-test/parity_registry.py create mode 100644 compat-test/test_parity_registry.py create mode 100644 docs/decisions/PDR-003-versioned-parity-registry.md diff --git a/.clue/id-ledger.yaml b/.clue/id-ledger.yaml index be0a680..b16bc1c 100644 --- a/.clue/id-ledger.yaml +++ b/.clue/id-ledger.yaml @@ -133,6 +133,9 @@ events: - {id: TEAM-003, kind: numeric, state: live, prefix: TEAM, component: "3"} - {id: CH-014, kind: numeric, state: reserved, prefix: CH, component: "14"} - {id: CH-014, kind: numeric, state: live, prefix: CH, component: "14"} + - {id: PDR-003, kind: numeric, state: reserved, prefix: PDR, component: "3"} + - {id: HARN-001, kind: numeric, state: reserved, prefix: HARN, component: "1"} + - {id: PDR-003, kind: numeric, state: live, prefix: PDR, component: "3"} high-water: - {id: ADR-002, kind: numeric, state: reserved, prefix: ADR, component: "2"} - {id: AN-014, kind: numeric, state: reserved, prefix: AN, component: "14"} diff --git a/changes/CH-014-m006-versioned-parity-registry/tasks.md b/changes/CH-014-m006-versioned-parity-registry/tasks.md index ecc7882..729b47b 100644 --- a/changes/CH-014-m006-versioned-parity-registry/tasks.md +++ b/changes/CH-014-m006-versioned-parity-registry/tasks.md @@ -1,9 +1,9 @@ # Tasks -- [ ] Commit the required Cliewen carrier migration, coordinated identity ledger, adopter role, and proposal; serves `P-001#M-006`. -- [ ] Record the versioned parity-registry decision and revise the M-006 campaign, constraints, capabilities, criteria, designs, and harness guidance; serves `SCORE-001`, `SCORE-002`, `SCORE-003`, `SCORE-006`, `HARN-001`, `HARN-003`, and `HARN-006`. -- [ ] Add a tracked parity registry, generated review table, artifact manifest, and migration path for checkpoint state; serves `SCORE-001` and `HARN-001`. -- [ ] Extend the harness with origin-aware error equivalence, unresolved and cause-based retests, and 25-subject batch checkpoints; serves `SCORE-003`, `HARN-003`, and `HARN-006`. +- [x] Commit the required Cliewen carrier migration, coordinated identity ledger, adopter role, and proposal; serves `P-001#M-006`. +- [x] Record the versioned parity-registry decision and revise the M-006 campaign, constraints, capabilities, criteria, designs, and harness guidance; serves `SCORE-001`, `SCORE-002`, `SCORE-003`, `SCORE-006`, `HARN-001`, `HARN-003`, and `HARN-006`. +- [x] Add a tracked parity registry, generated review table, artifact manifest, and migration path for checkpoint state; serves `SCORE-001` and `HARN-001`. +- [x] Extend the harness with origin-aware error equivalence, unresolved and cause-based retests, and 25-subject batch checkpoints; serves `SCORE-003`, `HARN-003`, and `HARN-006`. - [ ] Add focused positive and negative tests for registry identity, status transitions, error normalization, score confirmation, and team cases; serves `SCORE-002`, `SCORE-003`, `HARN-001`, and `HARN-003`. -- [ ] Import eligible official observations, run focused real-engine checks, and save the first registry checkpoint; serves `SCORE-001` and `SCORE-006`. +- [x] Import eligible official observations, run focused real-engine checks, and save the first registry checkpoint; serves `SCORE-001` and `SCORE-006`. - [ ] Regenerate indexes, digest the permanent corpus, verify the committed candidate, and prepare the draft PR for review. diff --git a/compat-test/README.md b/compat-test/README.md index 09ec552..c2e65ed 100644 --- a/compat-test/README.md +++ b/compat-test/README.md @@ -11,6 +11,8 @@ bridge), then compares scores and errors. |---|---| | `compat_test.py` | Orchestrator: staging, checkpointing, error logs, report generation | | `regression-set.json` | The pinned watch list the regression gate measures against | +| `parity-registry.json` | Tracked, append-only observations for every jar or team | +| `parity-registry.md` | Generated review table for the parity registry | | `trace-robot/` | Robots that report their own state: `TraceRobot` for `--trace`, `TurnSignProbe` for settling a convention question by measurement | | `RcBattleWorker.java` | Single-file worker (run uncompiled) driving the classic Robocode Control API | | `TrBattleWorker.java` | Single-file worker (run uncompiled) driving the Tank Royale Battle Runner API | @@ -70,11 +72,14 @@ incomparable with the rumble, so the report records the setup each row was measu ```bash cd compat-test -python compat_test.py # test all collections, resume-aware +python compat_test.py # run the next 25-subject checkpoint python compat_test.py --collections roborumble --limit 50 python compat_test.py --only Waylander # substring filter on jar name python compat_test.py --rounds 5 # override the official round count python compat_test.py --retry-failed # re-run only FAIL/ERROR robots +python compat_test.py --retry-unresolved # re-run every unresolved parity case +python compat_test.py --retest-cause lifecycle # re-run unresolved cases tagged to one cause +python compat_test.py --sync-registry --registry-manifest C:\path\to\run-manifest.json python compat_test.py --force # re-run everything python compat_test.py --report-only # just regenerate the report ``` @@ -193,6 +198,8 @@ untested robot. Completed robots are never re-run unless `--force` (everything) Full error details land in `errors/robocode/.log` and `errors/tank-royale/.log`; the master table is `compatibility_report.md`. +`parity-registry.json` is the tracked evidence carrier. It appends each subject observation with its jar identity, setup, engine artifacts, normalized errors, and current diagnosis. `parity-registry.md` renders the current status of every subject for review. Import an existing checkpoint with `--sync-registry`; after a diagnosis, tag a case with `--set-cause ` and rerun that cause with `--retest-cause `. + **Every row states the setup it was measured at.** The report is regenerated from the state file long after the battles ran, so a single header describing the current configuration would restate every stored row as though it had been measured under today's settings -- diff --git a/compat-test/compat_test.py b/compat-test/compat_test.py index 27172d1..09d0715 100644 --- a/compat-test/compat_test.py +++ b/compat-test/compat_test.py @@ -38,6 +38,16 @@ from datetime import datetime, timezone from pathlib import Path +from parity_registry import ( + compare_errors, + error_signatures, + is_unresolved, + load_registry, + save_registry, + signature_keys, + sync_state, +) + # ---------------------------------------------------------------------------------- # Configuration (override with CLI options or environment variables) # ---------------------------------------------------------------------------------- @@ -125,6 +135,9 @@ def local_bot_api_jar(): # verdict is stated as movement from a recorded baseline rather than as an absolute delta: # a bot that has always differed by a given margin and still does has not regressed. REGRESSION_SET_FILE = BASE_DIR / "regression-set.json" +PARITY_REGISTRY_FILE = BASE_DIR / "parity-registry.json" +PARITY_REGISTRY_REPORT = BASE_DIR / "parity-registry.md" +DEFAULT_BATCH_SIZE = 25 REGRESSION_REPEATS = 5 REGRESSION_BAND_POINTS = 15.0 @@ -320,16 +333,17 @@ class BridgeOnlyErrorWatcher: def __init__(self, bot_dirs, rc_signatures): self.bot_dirs = list(bot_dirs) - self.rc_signatures = {signature_key(s) for s in (rc_signatures or [])} + self.rc_signatures = signature_keys(rc_signatures or []) self.found = set() self.triggered = False def __call__(self): for d in self.bot_dirs: for log_name in ("stderr.log", "stdout.log"): - for line in extract_errors(read_capped(d / log_name)): - if signature_key(line) not in self.rc_signatures: - self.found.add(line) + for signature in error_signatures([], read_capped(d / log_name)): + key = (signature["exception"], signature["origin"]) + if key not in self.rc_signatures: + self.found.add(key) self.triggered = bool(self.found) return self.triggered @@ -341,7 +355,7 @@ def classic_signatures(rc): that names no exception, so it matches nothing. Handing that to the watcher as a baseline makes every exception on the bridge side look bridge-only, and the gate then fails a bot whose classic side simply did not start.""" - return rc.get("errors", []) if rc.get("ok") else None + return rc.get("error_signatures", []) if rc.get("ok") else None def signature_key(error_line): @@ -351,6 +365,45 @@ def signature_key(error_line): return match.group(1) if match else (error_line or "").strip()[:120] +def attach_error_signatures(result): + result["error_signatures"] = error_signatures( + result.get("errors", []), result.get("log_text", "")) + return result + + +def registry_manifest(opts): + """Pins the artifacts that produced a registry observation.""" + manifest = { + "bridge_commit": subprocess.run( + ["git", "rev-parse", "HEAD"], cwd=BASE_DIR.parent, + capture_output=True, text=True, check=False).stdout.strip() or None, + "tank_royale_commit": subprocess.run( + ["git", "rev-parse", "HEAD"], cwd=TANK_ROYALE_HOME, + capture_output=True, text=True, check=False).stdout.strip() or None, + "official_parameters": opts.rounds is None, + "threshold": opts.threshold, + "artifacts": {}, + } + from parity_registry import sha256_file + for name in ("runner_jar", "bridge_api_jar", "wrapper_jar", "bot_api_jar"): + path = Path(getattr(opts, name)) + manifest["artifacts"][name] = {"path": str(path), "sha256": sha256_file(path)} + if opts.registry_manifest: + supplied = json.loads(opts.registry_manifest.read_text(encoding="utf-8")) + manifest["supplied"] = supplied + manifest["bridge_commit"] = supplied.get("bridgeCommit", manifest["bridge_commit"]) + manifest["tank_royale_commit"] = supplied.get("tankRoyaleCommit", manifest["tank_royale_commit"]) + manifest["artifacts"] = supplied.get("artifactSha256", manifest["artifacts"]) + return manifest + + +def sync_parity_registry(state, opts): + registry = load_registry(PARITY_REGISTRY_FILE) + added = sync_state(registry, state, Path(opts.collection_dir), registry_manifest(opts)) + save_registry(registry, PARITY_REGISTRY_FILE, PARITY_REGISTRY_REPORT) + return added + + # ---------------------------------------------------------------------------------- # State (checkpointing) # ---------------------------------------------------------------------------------- @@ -755,18 +808,18 @@ def evaluate(rc, tr, threshold, tr_skipped): if tr_skipped: return "SKIPPED-TR", None rc_ok, tr_ok = rc["ok"], tr["ok"] + errors = compare_errors(rc.get("error_signatures", []), tr.get("error_signatures", [])) + equivalent_errors = not errors["classic_only"] and not errors["tank_royale_only"] if not rc_ok and not tr_ok: - return "FAIL (both)", None - if not rc_ok: - return "FAIL (RC)", None - if not tr_ok: - return "FAIL (TR)", None + return ("MATCHED (failure)" if equivalent_errors else "DISCREPANCY (outcome)"), None + if not rc_ok or not tr_ok: + return "DISCREPANCY (outcome)", None delta = None if rc["score"] and rc["score"] > 0 and tr["score"] is not None: delta = round((tr["score"] - rc["score"]) / rc["score"] * 100.0, 1) - if tr["error_count"] > 0 and rc["error_count"] == 0: + if not equivalent_errors: return "DISCREPANCY (errors)", delta if delta is not None and abs(delta) > threshold: return "DISCREPANCY (score)", delta @@ -908,11 +961,17 @@ def discover_jars(opts): return jars -def should_run(entry, opts): +def should_run(entry, opts, registry=None, key=None): if entry is None or opts.force: return True + if opts.retry_unresolved and is_unresolved(entry.get("status", "")): + return True + if opts.retest_cause and registry is not None and key: + diagnosis = registry.get("subjects", {}).get(key, {}).get("diagnosis", {}) + return (is_unresolved(entry.get("status", "")) + and diagnosis.get("cause") == opts.retest_cause) if opts.retry_failed: - return entry.get("status", "").startswith(("FAIL", "ERROR", "HARNESS")) + return entry.get("status", "").startswith(("FAIL", "ERROR", "HARNESS", "DISCREPANCY")) return False @@ -962,11 +1021,22 @@ def parse_args(): p.add_argument("--threshold", type=float, default=25.0, help="score delta %% beyond which a robot is flagged as discrepancy") p.add_argument("--only", help="only test jars whose name contains this substring") - p.add_argument("--limit", type=int, help="stop after testing N robots this session") + p.add_argument("--limit", type=int, default=DEFAULT_BATCH_SIZE, + help="stop after testing N subjects in this checkpoint") p.add_argument("--force", action="store_true", help="re-run robots that already have results") p.add_argument("--retry-failed", action="store_true", - help="re-run only robots whose previous status was FAIL/ERROR") + help="re-run failed or discrepant robots (compatibility alias)") + p.add_argument("--retry-unresolved", action="store_true", + help="re-run only currently unresolved parity cases") + p.add_argument("--retest-cause", + help="re-run unresolved registry cases tagged with this diagnosis cause") + p.add_argument("--set-cause", nargs=3, metavar=("SUBJECT", "CAUSE", "OWNER"), + help="tag a registry subject with its diagnosed cause and owner") + p.add_argument("--sync-registry", action="store_true", + help="import checkpoint state into the tracked parity registry and exit") + p.add_argument("--registry-manifest", type=Path, + help="JSON manifest for imported observations and local artifact pinning") p.add_argument("--report-only", action="store_true", help="regenerate compatibility_report.md from the state file and exit") p.add_argument("--collection-dir", default=DEFAULTS["collection_dir"]) @@ -1049,8 +1119,10 @@ def measure_repeatedly(jar, classname, version, opts, setup, repeats): for attempt in range(repeats): attempts += 1 rc = run_rc_battle(jar, classname, version, opts, setup) + attach_error_signatures(rc) tr = run_tr_battle(jar, classname, version, opts, setup, rc_signatures=classic_signatures(rc)) + attach_error_signatures(tr) if tr.get("aborted_on_bridge_only_error"): bridge_only = tr.get("bridge_only_signatures", []) break @@ -1556,12 +1628,30 @@ def main(): print(f"Report regenerated: {REPORT_FILE}") return 0 + if opts.sync_registry: + added = sync_parity_registry(state, opts) + print(f"Parity registry synchronized: {added} observation(s) added.") + return 0 + + if opts.set_cause: + subject_key, cause, owner = opts.set_cause + registry = load_registry(PARITY_REGISTRY_FILE) + subject = registry.get("subjects", {}).get(subject_key) + if subject is None: + print(f"Registry subject not found: {subject_key}", file=sys.stderr) + return 2 + subject["diagnosis"] = {"state": "diagnosed", "cause": cause, "owner": owner} + save_registry(registry, PARITY_REGISTRY_FILE, PARITY_REGISTRY_REPORT) + print(f"Tagged {subject_key} with cause {cause} ({owner}).") + return 0 + check_prerequisites(opts) WORK_DIR.mkdir(parents=True, exist_ok=True) jars = discover_jars(opts) + registry = load_registry(PARITY_REGISTRY_FILE) todo = [(c, j) for c, j in jars - if should_run(state["robots"].get(f"{c}/{j.name}"), opts)] + if should_run(state["robots"].get(f"{c}/{j.name}"), opts, registry, f"{c}/{j.name}")] print(f"Found {len(jars)} jars; {len(jars) - len(todo)} already tested, " f"{len(todo)} to test.") @@ -1579,12 +1669,14 @@ def main(): setup = division_setup(collection, opts) rc = run_rc_battle(jar, classname, version, opts, setup) + attach_error_signatures(rc) rc["has_log"] = write_error_log("robocode", robot_name, rc.pop("log_text", "")) # The classic side has already run, so its signatures are the baseline the # bridge side is judged against (C-004). tr = run_tr_battle(jar, classname, version, opts, setup, rc_signatures=classic_signatures(rc)) + attach_error_signatures(tr) tr["has_log"] = write_error_log("tank-royale", robot_name, tr.pop("log_text", "")) @@ -1596,10 +1688,10 @@ def main(): "setup": setup, "rc": {k: rc.get(k) for k in ("ok", "score", "scores", "error_count", "elapsed", - "errors", "has_log", "selected")}, + "errors", "error_signatures", "has_log", "selected")}, "tr": {k: tr.get(k) for k in ("ok", "score", "scores", "error_count", "elapsed", - "errors", "has_log", "skipped")}, + "errors", "error_signatures", "bridge_only_signatures", "has_log", "skipped")}, "completed_at": now_iso(), } save_state(state) @@ -1616,10 +1708,12 @@ def main(): print("\nInterrupted — progress saved. Re-run to resume.", file=sys.stderr) save_state(state) regenerate_report(state) + sync_parity_registry(state, opts) return 130 save_state(state) regenerate_report(state) + sync_parity_registry(state, opts) elapsed_min = (time.time() - session_started) / 60 print(f"\nDone. Tested {tested} robots in {elapsed_min:.1f} min. " f"Report: {REPORT_FILE}") diff --git a/compat-test/parity-registry.json b/compat-test/parity-registry.json new file mode 100644 index 0000000..8bb7b4d --- /dev/null +++ b/compat-test/parity-registry.json @@ -0,0 +1,20742 @@ +{ + "schema_version": 1, + "subjects": { + "roborumble/AD.CodaFirst_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "AD.CodaFirst 1.1", + "division": "roborumble", + "jar": "AD.CodaFirst_1.1.jar", + "jar_sha256": "140825976d19ac8cbbf3a92040a9bc8568acb15933f6888cd0adce705497421f", + "key": "roborumble/AD.CodaFirst_1.1.jar", + "kind": "robot" + }, + "latest_observation": "c64fb0b475ea6e81", + "observations": [ + { + "classic": { + "elapsed": 2.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12974.0, + "scores": [ + 6684.0, + 6290.0 + ], + "selected": "AD.CodaFirst 1.1" + }, + "completed_at": "2026-09-08T20:11:39Z", + "delta_pct": -47.8, + "id": "c64fb0b475ea6e81", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6767.0, + "scores": [ + 3407.0, + 3360.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/AIR.iRobot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "AIR.iRobot 1.0", + "division": "roborumble", + "jar": "AIR.iRobot_1.0.jar", + "jar_sha256": "b0843906e321f787ca4da9f79bdd645f2e8524a69a98056e89350a9efed076af", + "key": "roborumble/AIR.iRobot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "30ccf919e98128fe", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4947.0, + "scores": [ + 2195.0, + 2752.0 + ], + "selected": "AIR.iRobot 1.0" + }, + "completed_at": "2026-09-08T20:20:16Z", + "delta_pct": null, + "id": "30ccf919e98128fe", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 6.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/And.BasicSurfer_FF1.6.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "And.BasicSurfer FF1.6", + "division": "roborumble", + "jar": "And.BasicSurfer_FF1.6.jar", + "jar_sha256": "ff0393de6bfab609d13bd37c562ff5d2736e7b186ebfd65039ac1cde3546b1f9", + "key": "roborumble/And.BasicSurfer_FF1.6.jar", + "kind": "robot" + }, + "latest_observation": "e10ba12633f28ccf", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3671.0, + "scores": [ + 1404.0, + 2267.0 + ], + "selected": "And.BasicSurfer FF1.6" + }, + "completed_at": "2026-09-08T20:26:36Z", + "delta_pct": 9.3, + "id": "e10ba12633f28ccf", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4013.0, + "scores": [ + 2284.0, + 1729.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ArchAlpha.ArchimedesAlpha_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ArchAlpha.ArchimedesAlpha 1.0", + "division": "roborumble", + "jar": "ArchAlpha.ArchimedesAlpha_1.0.jar", + "jar_sha256": "dcb4cdb1a904ba42b0747af1b29c660fe5fd01c225f4f079875cc07499b36554", + "key": "roborumble/ArchAlpha.ArchimedesAlpha_1.0.jar", + "kind": "robot" + }, + "latest_observation": "8ee700d1da5ca3de", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 0.0, + "scores": [ + 0.0, + 0.0 + ], + "selected": "ArchAlpha.ArchimedesAlpha 1.0" + }, + "completed_at": "2026-09-08T20:37:48Z", + "delta_pct": null, + "id": "8ee700d1da5ca3de", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (no score)", + "tank_royale": { + "elapsed": 30.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 0.0, + "scores": [ + 0.0, + 0.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (no score)" + }, + "roborumble/CharlieN.Omega.Omega_1.03.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "CharlieN.Omega.Omega 1.03", + "division": "roborumble", + "jar": "CharlieN.Omega.Omega_1.03.jar", + "jar_sha256": "fc785490d5488702362baf9d7ed4a1e49d3b35e56054c64deab067d69423b8a7", + "key": "roborumble/CharlieN.Omega.Omega_1.03.jar", + "kind": "robot" + }, + "latest_observation": "23e880a8344ee3d9", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6356.0, + "scores": [ + 3065.0, + 3291.0 + ], + "selected": "CharlieN.Omega.Omega 1.03" + }, + "completed_at": "2026-09-08T21:17:17Z", + "delta_pct": -6.3, + "id": "23e880a8344ee3d9", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5953.0, + "scores": [ + 3027.0, + 2926.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/a.FreyaOS_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "a.FreyaOS 1.0", + "division": "roborumble", + "jar": "a.FreyaOS_1.0.jar", + "jar_sha256": "76223355e093db18e286f0660a56ffe097eb1d5549215c31cc60bddf946602b4", + "key": "roborumble/a.FreyaOS_1.0.jar", + "kind": "robot" + }, + "latest_observation": "250efa0576cb1c56", + "observations": [ + { + "classic": { + "elapsed": 8.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6065.0, + "scores": [ + 2950.0, + 3115.0 + ], + "selected": "a.FreyaOS 1.0" + }, + "completed_at": "2026-09-08T20:07:12Z", + "delta_pct": -8.3, + "id": "a90b9e5e44b1a73b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 26.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5563.0, + "scores": [ + 3052.0, + 2511.0 + ], + "skipped": null + } + }, + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "error_signatures": [], + "errors": [], + "has_log": false, + "ok": true, + "score": 6664.0, + "scores": [ + 3194.0, + 3470.0 + ], + "selected": "a.FreyaOS 1.0" + }, + "completed_at": "2026-09-09T17:57:52Z", + "delta_pct": -27.4, + "id": "250efa0576cb1c56", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "bridge_only_signatures": null, + "elapsed": 28.0, + "error_count": 0, + "error_signatures": [], + "errors": [], + "has_log": false, + "ok": true, + "score": 4836.0, + "scores": [ + 2463.0, + 2373.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/aaa.r.ScalarR_0.005h.053.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "aaa.r.ScalarR 0.005h.053", + "division": "roborumble", + "jar": "aaa.r.ScalarR_0.005h.053.jar", + "jar_sha256": "60fef68d968790732c85b20d885e1ca9e99c5ba245e43c1a167f9f3b8956c055", + "key": "roborumble/aaa.r.ScalarR_0.005h.053.jar", + "kind": "robot" + }, + "latest_observation": "789ba80b28f3224a", + "observations": [ + { + "classic": { + "elapsed": 104.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4202.0, + "scores": [ + 1871.0, + 2331.0 + ], + "selected": "aaa.r.ScalarR 0.005h.053" + }, + "completed_at": "2026-09-08T20:09:10Z", + "delta_pct": 216.0, + "id": "789ba80b28f3224a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 14.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 13278.0, + "scores": [ + 7349.0, + 5929.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ab.DengerousRoBatra_1.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ab.DengerousRoBatra 1.3", + "division": "roborumble", + "jar": "ab.DengerousRoBatra_1.3.jar", + "jar_sha256": "62d46305baa7ded6cbbe763b1614d41c1ff2dd2d9992c028cfbf1a26c228530f", + "key": "roborumble/ab.DengerousRoBatra_1.3.jar", + "kind": "robot" + }, + "latest_observation": "b9f7cc9d84668eb6", + "observations": [ + { + "classic": { + "elapsed": 2.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5727.0, + "scores": [ + 2778.0, + 2949.0 + ], + "selected": "ab.DengerousRoBatra 1.3" + }, + "completed_at": "2026-09-08T20:09:35Z", + "delta_pct": -12.6, + "id": "b9f7cc9d84668eb6", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5005.0, + "scores": [ + 2593.0, + 2412.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/abud.ThirdRobo_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "abud.ThirdRobo 1.0", + "division": "roborumble", + "jar": "abud.ThirdRobo_1.0.jar", + "jar_sha256": "124b7067cca1b407845176fd26ad2388aab1ad20085b34bd5561539515272a16", + "key": "roborumble/abud.ThirdRobo_1.0.jar", + "kind": "robot" + }, + "latest_observation": "b6434f799b62dbb9", + "observations": [ + { + "classic": { + "elapsed": 6.2, + "error_count": 328, + "errors": [ + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo", + "java.io.NotSerializableException: abud.EnemyInfo" + ], + "has_log": true, + "ok": true, + "score": 6152.0, + "scores": [ + 2879.0, + 3273.0 + ], + "selected": "abud.ThirdRobo 1.0" + }, + "completed_at": "2026-09-08T20:09:46Z", + "delta_pct": null, + "id": "b6434f799b62dbb9", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 82, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo", + "dev.robocode.tankroyale.botapi.BotException: Could not serialize team message: abud.EnemyInfo" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/acid.Bl4ck_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "acid.Bl4ck 1.0", + "division": "roborumble", + "jar": "acid.Bl4ck_1.0.jar", + "jar_sha256": "50cca7b205a1a20119a7b0d3810f54e6ce0a0c985612da73c161fcdc5bbbd5fd", + "key": "roborumble/acid.Bl4ck_1.0.jar", + "kind": "robot" + }, + "latest_observation": "7bbc287f8bfe56e4", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6723.0, + "scores": [ + 3340.0, + 3383.0 + ], + "selected": "acid.Bl4ck 1.0" + }, + "completed_at": "2026-09-08T20:10:15Z", + "delta_pct": -44.7, + "id": "7bbc287f8bfe56e4", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 26.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3717.0, + "scores": [ + 2005.0, + 1712.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/acid.Null_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "acid.Null 1.0", + "division": "roborumble", + "jar": "acid.Null_1.0.jar", + "jar_sha256": "66547223ee9a81b17dc19f612f5ec2fe6745fcacee1823d5d88c61cd08c76f04", + "key": "roborumble/acid.Null_1.0.jar", + "kind": "robot" + }, + "latest_observation": "590ef3a4eaca28e3", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 1809.0, + "scores": [ + 539.0, + 1270.0 + ], + "selected": "acid.Null 1.0" + }, + "completed_at": "2026-09-08T20:10:47Z", + "delta_pct": 38.5, + "id": "590ef3a4eaca28e3", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2506.0, + "scores": [ + 1482.0, + 1024.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/acid.Syzygy_1.0.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "acid.Syzygy 1.0.4", + "division": "roborumble", + "jar": "acid.Syzygy_1.0.4.jar", + "jar_sha256": "a7336d30e377b013c9beaa6b4afabf93d3b8a83224d344beb7428e0361c4aa97", + "key": "roborumble/acid.Syzygy_1.0.4.jar", + "kind": "robot" + }, + "latest_observation": "e0d888daca1f0456", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6558.0, + "scores": [ + 3265.0, + 3293.0 + ], + "selected": "acid.Syzygy 1.0.4" + }, + "completed_at": "2026-09-08T20:11:18Z", + "delta_pct": -46.4, + "id": "e0d888daca1f0456", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 28.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3518.0, + "scores": [ + 2229.0, + 1289.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ad.Quest_0.10.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ad.Quest 0.10", + "division": "roborumble", + "jar": "ad.Quest_0.10.jar", + "jar_sha256": "7121f3447f5a2ee15fb6a8efbdecb35c5732def3307427f5c747990b2b2d8969", + "key": "roborumble/ad.Quest_0.10.jar", + "kind": "robot" + }, + "latest_observation": "90b87fb62a5d8769", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5349.0, + "scores": [ + 2596.0, + 2753.0 + ], + "selected": "ad.Quest 0.10" + }, + "completed_at": "2026-09-08T20:12:40Z", + "delta_pct": -13.9, + "id": "90b87fb62a5d8769", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4605.0, + "scores": [ + 2380.0, + 2225.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ad.last.Bottom_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ad.last.Bottom 1.0", + "division": "roborumble", + "jar": "ad.last.Bottom_1.0.jar", + "jar_sha256": "8ae6c84241634e3f1b2f550ff6bf50b603dd8f19c23f67e06df6c2328a0820bf", + "key": "roborumble/ad.last.Bottom_1.0.jar", + "kind": "robot" + }, + "latest_observation": "536581d29ac8b51f", + "observations": [ + { + "classic": { + "elapsed": 3.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 305.0, + "scores": [ + 242.0, + 63.0 + ], + "selected": "ad.last.Bottom 1.0" + }, + "completed_at": "2026-09-08T20:12:17Z", + "delta_pct": -98.0, + "id": "536581d29ac8b51f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 34.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6.0, + "scores": [ + 3.0, + 3.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/adt.Ar1_2.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "adt.Ar1 2.1", + "division": "roborumble", + "jar": "adt.Ar1_2.1.jar", + "jar_sha256": "37857b3fe3d082f121da8dd8ca81a5ea58edcab65fad3c552d71dfa65f58b14e", + "key": "roborumble/adt.Ar1_2.1.jar", + "kind": "robot" + }, + "latest_observation": "a7544fcb7a16e1cc", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3562.0, + "scores": [ + 1770.0, + 1792.0 + ], + "selected": "adt.Ar1 2.1" + }, + "completed_at": "2026-09-08T20:13:05Z", + "delta_pct": -6.2, + "id": "a7544fcb7a16e1cc", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3341.0, + "scores": [ + 1793.0, + 1548.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/adt.Ar2_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "adt.Ar2 1.0", + "division": "roborumble", + "jar": "adt.Ar2_1.0.jar", + "jar_sha256": "2adf54760aefa12c1e79667c064a9529b85aed2218e8a7457c335fb91153394e", + "key": "roborumble/adt.Ar2_1.0.jar", + "kind": "robot" + }, + "latest_observation": "f8dc415d3174e2bd", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6761.0, + "scores": [ + 3088.0, + 3673.0 + ], + "selected": "adt.Ar2 1.0" + }, + "completed_at": "2026-09-08T20:13:24Z", + "delta_pct": -23.5, + "id": "f8dc415d3174e2bd", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5169.0, + "scores": [ + 2932.0, + 2237.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/aetos.AetosFirstBot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "aetos.AetosFirstBot 1.0", + "division": "roborumble", + "jar": "aetos.AetosFirstBot_1.0.jar", + "jar_sha256": "b07790002d150956d9c859100b63581fbf720807de75ea51d10d2355c23552dd", + "key": "roborumble/aetos.AetosFirstBot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "adf8a34914ae5ddc", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 14150.0, + "scores": [ + 7308.0, + 6842.0 + ], + "selected": "aetos.AetosFirstBot 1.0" + }, + "completed_at": "2026-09-08T20:13:40Z", + "delta_pct": -1.3, + "id": "adf8a34914ae5ddc", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 13969.0, + "scores": [ + 7098.0, + 6871.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ag.Gir_0.99.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ag.Gir 0.99", + "division": "roborumble", + "jar": "ag.Gir_0.99.jar", + "jar_sha256": "35a4cbabb1c433b6a4e54977741e90195fa95332d7afcce0c7ffe9c8af1ce32d", + "key": "roborumble/ag.Gir_0.99.jar", + "kind": "robot" + }, + "latest_observation": "6a92a7c896d886ac", + "observations": [ + { + "classic": { + "elapsed": 8.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3737.0, + "scores": [ + 2018.0, + 1719.0 + ], + "selected": "ag.Gir 0.99" + }, + "completed_at": "2026-09-08T20:14:00Z", + "delta_pct": null, + "id": "6a92a7c896d886ac", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 10.1, + "error_count": 40, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0", + "java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception reading 1_robotstats.stt: java.io.EOFException", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception reading 1_girstats.stt: java.io.EOFException", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception reading 1_robotstats.stt: java.io.EOFException", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception reading 1_move.fct: java.io.EOFException", + "Exception reading 1_robotstats.stt: java.io.EOFException", + "Exception reading 1_move.fct: java.io.EOFException", + "Exception reading 1_girstats.stt: java.io.EOFException", + "Exception reading 1_girstats.stt: java.io.EOFException", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception reading 2_robotstats.stt: java.io.EOFException", + "Exception reading 2_girstats.stt: java.io.EOFException", + "Exception reading 2_girstats.stt: java.io.EOFException", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception reading 2_girstats.stt: java.io.EOFException", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception reading 2_robotstats.stt: java.io.EOFException", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes.", + "Exception reading 2_robotstats.stt: java.io.EOFException", + "Exception reading 2_move.fct: java.io.EOFException", + "Exception reading 2_girstats.stt: java.io.EOFException", + "Exception reading 2_girstats.stt: java.io.EOFException", + "IOException trying to write: java.io.IOException: You have reached your filesystem quota of: 200000 bytes." + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/agd.Mooserwirt2_2.7.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "agd.Mooserwirt2 2.7", + "division": "roborumble", + "jar": "agd.Mooserwirt2_2.7.jar", + "jar_sha256": "377e6a4c674d0436ee7d3cf8e29c2581fc37e55238e6fefef86394c55a35b556", + "key": "roborumble/agd.Mooserwirt2_2.7.jar", + "kind": "robot" + }, + "latest_observation": "ff9a91c9aed410ac", + "observations": [ + { + "classic": { + "elapsed": 6.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6393.0, + "scores": [ + 3276.0, + 3117.0 + ], + "selected": "agd.Mooserwirt2 2.7" + }, + "completed_at": "2026-09-08T20:14:30Z", + "delta_pct": 93.5, + "id": "ff9a91c9aed410ac", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12372.0, + "scores": [ + 6196.0, + 6176.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/agrach.Dalek_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "agrach.Dalek 1.0", + "division": "roborumble", + "jar": "agrach.Dalek_1.0.jar", + "jar_sha256": "1b594bd828661ec7fbeb11aba73bccf7567d16e78a9ff21114a1f430c7152836", + "key": "roborumble/agrach.Dalek_1.0.jar", + "kind": "robot" + }, + "latest_observation": "ba3220036d56b733", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3775.0, + "scores": [ + 1420.0, + 2355.0 + ], + "selected": "agrach.Dalek 1.0" + }, + "completed_at": "2026-09-08T20:14:56Z", + "delta_pct": 65.3, + "id": "ba3220036d56b733", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 22.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6240.0, + "scores": [ + 3411.0, + 2829.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/agrach.MicroDalek_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "agrach.MicroDalek 1.0", + "division": "roborumble", + "jar": "agrach.MicroDalek_1.0.jar", + "jar_sha256": "f0830bebf9d2d5be6388b696e437fc369f2e68f3255f56332a24f0b40f81b979", + "key": "roborumble/agrach.MicroDalek_1.0.jar", + "kind": "robot" + }, + "latest_observation": "530461a54d8b1dad", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5316.0, + "scores": [ + 3041.0, + 2275.0 + ], + "selected": "agrach.MicroDalek 1.0" + }, + "completed_at": "2026-09-08T20:15:21Z", + "delta_pct": -23.1, + "id": "530461a54d8b1dad", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4086.0, + "scores": [ + 2220.0, + 1866.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/agrach.RobotSlayer_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "agrach.RobotSlayer 1.0", + "division": "roborumble", + "jar": "agrach.RobotSlayer_1.0.jar", + "jar_sha256": "7710708e2d15c46fe622ea196065c3fa78c785a8ba0ab3afe5587de3d1072ff9", + "key": "roborumble/agrach.RobotSlayer_1.0.jar", + "kind": "robot" + }, + "latest_observation": "8f77756a222c2ed6", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3120.0, + "scores": [ + 1448.0, + 1672.0 + ], + "selected": "agrach.RobotSlayer 1.0" + }, + "completed_at": "2026-09-08T20:15:48Z", + "delta_pct": 34.9, + "id": "8f77756a222c2ed6", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4209.0, + "scores": [ + 2147.0, + 2062.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ags.Glacier_0.3.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ags.Glacier 0.3.2", + "division": "roborumble", + "jar": "ags.Glacier_0.3.2.jar", + "jar_sha256": "2d8c919e37b033113b5377aac90c2ac1641a44fd31367c98190c2466be90a151", + "key": "roborumble/ags.Glacier_0.3.2.jar", + "kind": "robot" + }, + "latest_observation": "60be2730fb1d2100", + "observations": [ + { + "classic": { + "elapsed": 15.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5275.0, + "scores": [ + 2766.0, + 2509.0 + ], + "selected": "ags.Glacier 0.3.2" + }, + "completed_at": "2026-09-08T20:16:24Z", + "delta_pct": -35.8, + "id": "60be2730fb1d2100", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3386.0, + "scores": [ + 1867.0, + 1519.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ags.Midboss_1q.fast.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ags.Midboss 1q.fast", + "division": "roborumble", + "jar": "ags.Midboss_1q.fast.jar", + "jar_sha256": "803ebb0582eb77b476fe649cf8875bbf95df2ebd92fcf7853077aa7b583a4045", + "key": "roborumble/ags.Midboss_1q.fast.jar", + "kind": "robot" + }, + "latest_observation": "7effb7a405de90e7", + "observations": [ + { + "classic": { + "elapsed": 9.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5495.0, + "scores": [ + 2997.0, + 2498.0 + ], + "selected": "ags.Midboss 1q.fast" + }, + "completed_at": "2026-09-08T20:17:34Z", + "delta_pct": -6.8, + "id": "7effb7a405de90e7", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5121.0, + "scores": [ + 2593.0, + 2528.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ags.micro.Carpet_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ags.micro.Carpet 1.1", + "division": "roborumble", + "jar": "ags.micro.Carpet_1.1.jar", + "jar_sha256": "d7d22013f45d03d1d2131ebfbf63fedf29cae8f95bf7683eb8075a29569adc9e", + "key": "roborumble/ags.micro.Carpet_1.1.jar", + "kind": "robot" + }, + "latest_observation": "a5199bebb61593c0", + "observations": [ + { + "classic": { + "elapsed": 8.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5715.0, + "scores": [ + 3482.0, + 2233.0 + ], + "selected": "ags.micro.Carpet 1.1" + }, + "completed_at": "2026-09-08T20:17:00Z", + "delta_pct": -12.4, + "id": "a5199bebb61593c0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5006.0, + "scores": [ + 2752.0, + 2254.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ags.polished.PolishedRuby_1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ags.polished.PolishedRuby 1", + "division": "roborumble", + "jar": "ags.polished.PolishedRuby_1.jar", + "jar_sha256": "66674145d1a973e3d1b5079f97a991485a890c843f47ee5c0caff9fb9b0fbfcf", + "key": "roborumble/ags.polished.PolishedRuby_1.jar", + "kind": "robot" + }, + "latest_observation": "fc49d718cc3c93ac", + "observations": [ + { + "classic": { + "elapsed": 3.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12189.0, + "scores": [ + 6340.0, + 5849.0 + ], + "selected": "ags.polished.PolishedRuby 1" + }, + "completed_at": "2026-09-08T20:17:58Z", + "delta_pct": -80.9, + "id": "fc49d718cc3c93ac", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2330.0, + "scores": [ + 1481.0, + 849.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ags.rougedc.RougeDC_willow.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ags.rougedc.RougeDC willow", + "division": "roborumble", + "jar": "ags.rougedc.RougeDC_willow.jar", + "jar_sha256": "2aee27ddd085c75f61943240e090e018c9e69f658cd4afed508430910a41d2ab", + "key": "roborumble/ags.rougedc.RougeDC_willow.jar", + "kind": "robot" + }, + "latest_observation": "c007d142eae29d0a", + "observations": [ + { + "classic": { + "elapsed": 10.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5658.0, + "scores": [ + 2458.0, + 3200.0 + ], + "selected": "ags.rougedc.RougeDC willow" + }, + "completed_at": "2026-09-08T20:18:29Z", + "delta_pct": -5.2, + "id": "c007d142eae29d0a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5365.0, + "scores": [ + 2786.0, + 2579.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ahf.Acero_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ahf.Acero 1.0", + "division": "roborumble", + "jar": "ahf.Acero_1.0.jar", + "jar_sha256": "5208b0efb272a5f43a85b11f70f05f0c550b5f2860b7e38d41d4f43a487a0fda", + "key": "roborumble/ahf.Acero_1.0.jar", + "kind": "robot" + }, + "latest_observation": "9a49d2334b9adb0e", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4651.0, + "scores": [ + 2335.0, + 2316.0 + ], + "selected": "ahf.Acero 1.0" + }, + "completed_at": "2026-09-08T20:18:52Z", + "delta_pct": -12.6, + "id": "9a49d2334b9adb0e", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4067.0, + "scores": [ + 2155.0, + 1912.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ahf.NanoAndrew_.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ahf.NanoAndrew .4", + "division": "roborumble", + "jar": "ahf.NanoAndrew_.4.jar", + "jar_sha256": "667ad546b341badd93276d9de63623cf8ddd42918f46a2a04b23dbe114bacf2d", + "key": "roborumble/ahf.NanoAndrew_.4.jar", + "kind": "robot" + }, + "latest_observation": "06a1568606c64145", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6409.0, + "scores": [ + 3626.0, + 2783.0 + ], + "selected": "ahf.NanoAndrew .4" + }, + "completed_at": "2026-09-08T20:19:25Z", + "delta_pct": -58.4, + "id": "06a1568606c64145", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 30.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2667.0, + "scores": [ + 1399.0, + 1268.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ahf.r2d2.R2d2_0.86.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ahf.r2d2.R2d2 0.86", + "division": "roborumble", + "jar": "ahf.r2d2.R2d2_0.86.jar", + "jar_sha256": "cdd8e80b980375b1ed59df8fe5a361207c9d3ee32c6e0d81f936e000c2b1b9f2", + "key": "roborumble/ahf.r2d2.R2d2_0.86.jar", + "kind": "robot" + }, + "latest_observation": "b8a0807ea26810cb", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5997.0, + "scores": [ + 2680.0, + 3317.0 + ], + "selected": "ahf.r2d2.R2d2 0.86" + }, + "completed_at": "2026-09-08T20:19:48Z", + "delta_pct": -45.3, + "id": "b8a0807ea26810cb", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3283.0, + "scores": [ + 1764.0, + 1519.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ahr.ice.Ice_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ahr.ice.Ice 1.0", + "division": "roborumble", + "jar": "ahr.ice.Ice_1.0.jar", + "jar_sha256": "419d2945138fc27ba706a168f2ef666a1b40905e98b08ccc62312f2de15ef242", + "key": "roborumble/ahr.ice.Ice_1.0.jar", + "kind": "robot" + }, + "latest_observation": "230fd620dc49add2", + "observations": [ + { + "classic": { + "elapsed": 4.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8381.0, + "scores": [ + 3636.0, + 4745.0 + ], + "selected": "ahr.ice.Ice 1.0" + }, + "completed_at": "2026-09-08T20:20:07Z", + "delta_pct": -4.8, + "id": "230fd620dc49add2", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7976.0, + "scores": [ + 4504.0, + 3472.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ak.Fermat_2.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ak.Fermat 2.0", + "division": "roborumble", + "jar": "ak.Fermat_2.0.jar", + "jar_sha256": "814688bbe0f93cf5cc6a6be42ab0e69ad0259c54cba8547b20ddb4b1bd7107b3", + "key": "roborumble/ak.Fermat_2.0.jar", + "kind": "robot" + }, + "latest_observation": "2e184f3d97965168", + "observations": [ + { + "classic": { + "elapsed": 9.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4980.0, + "scores": [ + 1884.0, + 3096.0 + ], + "selected": "ak.Fermat 2.0" + }, + "completed_at": "2026-09-08T20:20:45Z", + "delta_pct": -25.1, + "id": "2e184f3d97965168", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3728.0, + "scores": [ + 2493.0, + 1235.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/alex.Diabolo5_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "alex.Diabolo5 1.1", + "division": "roborumble", + "jar": "alex.Diabolo5_1.1.jar", + "jar_sha256": "cc1530acd1e1ec159e4dde664d7ea82601b7b69ac93a0a081725f877391e6496", + "key": "roborumble/alex.Diabolo5_1.1.jar", + "kind": "robot" + }, + "latest_observation": "9571152abf9a4117", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6507.0, + "scores": [ + 3251.0, + 3256.0 + ], + "selected": "alex.Diabolo5 1.1" + }, + "completed_at": "2026-09-08T20:21:02Z", + "delta_pct": -3.4, + "id": "9571152abf9a4117", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6288.0, + "scores": [ + 3151.0, + 3137.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/alk.lap.LoudAndProud_2.23.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "alk.lap.LoudAndProud 2.23", + "division": "roborumble", + "jar": "alk.lap.LoudAndProud_2.23.jar", + "jar_sha256": "17efb1d5344e72a8d6a5028db163d1727b131b8b9b2cb146e801df88cc1b945b", + "key": "roborumble/alk.lap.LoudAndProud_2.23.jar", + "kind": "robot" + }, + "latest_observation": "b7150fa0f8305e61", + "observations": [ + { + "classic": { + "elapsed": 5.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4818.0, + "scores": [ + 2531.0, + 2287.0 + ], + "selected": "alk.lap.LoudAndProud 2.23" + }, + "completed_at": "2026-09-08T20:21:28Z", + "delta_pct": -10.3, + "id": "b7150fa0f8305e61", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4321.0, + "scores": [ + 2551.0, + 1770.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/am.Miedzix_3.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "am.Miedzix 3.0", + "division": "roborumble", + "jar": "am.Miedzix_3.0.jar", + "jar_sha256": "eaebae0baf5108909282e2e018424089c946d6cf91938a01185df48783fa097f", + "key": "roborumble/am.Miedzix_3.0.jar", + "kind": "robot" + }, + "latest_observation": "95ffe43ca9a2cd04", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9444.0, + "scores": [ + 4768.0, + 4676.0 + ], + "selected": "am.Miedzix 3.0" + }, + "completed_at": "2026-09-08T20:21:43Z", + "delta_pct": 8.6, + "id": "95ffe43ca9a2cd04", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10259.0, + "scores": [ + 5202.0, + 5057.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amarok.Rookie_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amarok.Rookie 1.1", + "division": "roborumble", + "jar": "amarok.Rookie_1.1.jar", + "jar_sha256": "34cf928378f574c9d6eba50911a39c636f8a7605c310be52839fd1bd4d667e39", + "key": "roborumble/amarok.Rookie_1.1.jar", + "kind": "robot" + }, + "latest_observation": "4358feef92af528c", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5044.0, + "scores": [ + 2811.0, + 2233.0 + ], + "selected": "amarok.Rookie 1.1" + }, + "completed_at": "2026-09-08T20:22:06Z", + "delta_pct": -11.6, + "id": "4358feef92af528c", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4459.0, + "scores": [ + 2242.0, + 2217.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amc.ROBv202_1.01.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amc.ROBv202 1.01", + "division": "roborumble", + "jar": "amc.ROBv202_1.01.jar", + "jar_sha256": "eeeefad3aaac8d19b0ce5d7a3d3af5b4808fefbaf71523c6ecd43834150ee6be", + "key": "roborumble/amc.ROBv202_1.01.jar", + "kind": "robot" + }, + "latest_observation": "7af3d80d2aa0cb8e", + "observations": [ + { + "classic": { + "elapsed": 4.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2517.0, + "scores": [ + 1470.0, + 1047.0 + ], + "selected": "amc.ROBv202 1.01" + }, + "completed_at": "2026-09-08T20:22:38Z", + "delta_pct": -8.8, + "id": "7af3d80d2aa0cb8e", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2295.0, + "scores": [ + 1227.0, + 1068.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amc.ROBv203_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amc.ROBv203 1.0", + "division": "roborumble", + "jar": "amc.ROBv203_1.0.jar", + "jar_sha256": "1bb9b1b15f09c382abba7ee7043a81277dda0cb68bcd058b92f02fa0abda3bdd", + "key": "roborumble/amc.ROBv203_1.0.jar", + "kind": "robot" + }, + "latest_observation": "5b13343a09625cb7", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8230.0, + "scores": [ + 3968.0, + 4262.0 + ], + "selected": "amc.ROBv203 1.0" + }, + "completed_at": "2026-09-08T20:22:57Z", + "delta_pct": -1.9, + "id": "5b13343a09625cb7", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8073.0, + "scores": [ + 4630.0, + 3443.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amc.ROBv300_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amc.ROBv300 1.1", + "division": "roborumble", + "jar": "amc.ROBv300_1.1.jar", + "jar_sha256": "6db4ed03047d5efd9e8de254be8f68d9e3417a875c591e974514ff055d390920", + "key": "roborumble/amc.ROBv300_1.1.jar", + "kind": "robot" + }, + "latest_observation": "f9df3a01abc1f04f", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2648.0, + "scores": [ + 1072.0, + 1576.0 + ], + "selected": "amc.ROBv300 1.1" + }, + "completed_at": "2026-09-08T20:23:24Z", + "delta_pct": 67.9, + "id": "f9df3a01abc1f04f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 24.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4445.0, + "scores": [ + 2309.0, + 2136.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/amc.ROBv301_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amc.ROBv301 1.1", + "division": "roborumble", + "jar": "amc.ROBv301_1.1.jar", + "jar_sha256": "0f5ce30be90a631bbca672094046847e552d2b2370af3ec73b3d9ed8c737798f", + "key": "roborumble/amc.ROBv301_1.1.jar", + "kind": "robot" + }, + "latest_observation": "8f84ca57fd472f5b", + "observations": [ + { + "classic": { + "elapsed": 3.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4436.0, + "scores": [ + 1954.0, + 2482.0 + ], + "selected": "amc.ROBv301 1.1" + }, + "completed_at": "2026-09-08T20:23:53Z", + "delta_pct": 70.0, + "id": "8f84ca57fd472f5b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 24.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7541.0, + "scores": [ + 3782.0, + 3759.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/amc.ROBv400_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amc.ROBv400 1.0", + "division": "roborumble", + "jar": "amc.ROBv400_1.0.jar", + "jar_sha256": "ed8d81415f6cc852706df58f162e484cb4dc68882357c4e2f5875f5908eafa86", + "key": "roborumble/amc.ROBv400_1.0.jar", + "kind": "robot" + }, + "latest_observation": "09be55e2c9b7d445", + "observations": [ + { + "classic": { + "elapsed": 4.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4053.0, + "scores": [ + 2092.0, + 1961.0 + ], + "selected": "amc.ROBv400 1.0" + }, + "completed_at": "2026-09-08T20:24:19Z", + "delta_pct": 78.2, + "id": "09be55e2c9b7d445", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7223.0, + "scores": [ + 3849.0, + 3374.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/amk.ChumbaMini_0.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amk.ChumbaMini 0.2", + "division": "roborumble", + "jar": "amk.ChumbaMini_0.2.jar", + "jar_sha256": "5770270c23f9223e4df93f5455fcf461ecd30309fc318f3d53cbbdf93e133d6b", + "key": "roborumble/amk.ChumbaMini_0.2.jar", + "kind": "robot" + }, + "latest_observation": "a2683415dda92a08", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 100, + "errors": [ + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.WinEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time.", + "SYSTEM: java.lang.SecurityException occurred on robocode.DeathEvent", + "java.lang.SecurityException: You may only have 5 streams open at a time." + ], + "has_log": true, + "ok": true, + "score": 5187.0, + "scores": [ + 2322.0, + 2865.0 + ], + "selected": "amk.ChumbaMini 0.2" + }, + "completed_at": "2026-09-08T20:24:36Z", + "delta_pct": 12.6, + "id": "a2683415dda92a08", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5843.0, + "scores": [ + 3157.0, + 2686.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amk.ChumbaWumba_0.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amk.ChumbaWumba 0.3", + "division": "roborumble", + "jar": "amk.ChumbaWumba_0.3.jar", + "jar_sha256": "f7594cdfa02419ae112013ec923387736a89840712162020ecb899e39d6127e9", + "key": "roborumble/amk.ChumbaWumba_0.3.jar", + "kind": "robot" + }, + "latest_observation": "945bce04cca29751", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5213.0, + "scores": [ + 2618.0, + 2595.0 + ], + "selected": "amk.ChumbaWumba 0.3" + }, + "completed_at": "2026-09-08T20:24:55Z", + "delta_pct": -5.4, + "id": "945bce04cca29751", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4933.0, + "scores": [ + 2953.0, + 1980.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amk.Punbot.Punbot_0.01.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amk.Punbot.Punbot 0.01", + "division": "roborumble", + "jar": "amk.Punbot.Punbot_0.01.jar", + "jar_sha256": "44e10755757c7cb523ad7f6a746f5524f6a054fe7d047528da8330829284b389", + "key": "roborumble/amk.Punbot.Punbot_0.01.jar", + "kind": "robot" + }, + "latest_observation": "5cb33aff96c3e759", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5777.0, + "scores": [ + 2448.0, + 3329.0 + ], + "selected": "amk.Punbot.Punbot 0.01" + }, + "completed_at": "2026-09-08T20:25:31Z", + "delta_pct": 1.1, + "id": "5cb33aff96c3e759", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5841.0, + "scores": [ + 3152.0, + 2689.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amk.ShizzleStiX.ShizzleStiX_0.6.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amk.ShizzleStiX.ShizzleStiX 0.6", + "division": "roborumble", + "jar": "amk.ShizzleStiX.ShizzleStiX_0.6.jar", + "jar_sha256": "3e93e50b7380b8b2f98ab1c30911bc56a98c6eb27ccb5125d1aa8cbbc5987850", + "key": "roborumble/amk.ShizzleStiX.ShizzleStiX_0.6.jar", + "kind": "robot" + }, + "latest_observation": "fcb8486e2c29e9dc", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6365.0, + "scores": [ + 3091.0, + 3274.0 + ], + "selected": "amk.ShizzleStiX.ShizzleStiX 0.6" + }, + "completed_at": "2026-09-08T20:25:48Z", + "delta_pct": 0.5, + "id": "fcb8486e2c29e9dc", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6399.0, + "scores": [ + 3401.0, + 2998.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amk.jointstrike.JointStrike_0.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amk.jointstrike.JointStrike 0.2", + "division": "roborumble", + "jar": "amk.jointstrike.JointStrike_0.2.jar", + "jar_sha256": "3f45fd832f7bb6b6ceb3841c1ab108583ba11b49ba06cbde2f8e61637dc28297", + "key": "roborumble/amk.jointstrike.JointStrike_0.2.jar", + "kind": "robot" + }, + "latest_observation": "5c6c92d169d651d3", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7614.0, + "scores": [ + 3922.0, + 3692.0 + ], + "selected": "amk.jointstrike.JointStrike 0.2" + }, + "completed_at": "2026-09-08T20:25:12Z", + "delta_pct": -17.6, + "id": "5c6c92d169d651d3", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6274.0, + "scores": [ + 3212.0, + 3062.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/amk.superstrike.SuperStrike_0.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "amk.superstrike.SuperStrike 0.3", + "division": "roborumble", + "jar": "amk.superstrike.SuperStrike_0.3.jar", + "jar_sha256": "ef146a488f92e25b5f8f957831fd715bb6a6b2b1f8cf72ffa05bad505c34c79b", + "key": "roborumble/amk.superstrike.SuperStrike_0.3.jar", + "kind": "robot" + }, + "latest_observation": "54ea093325f72804", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7839.0, + "scores": [ + 4140.0, + 3699.0 + ], + "selected": "amk.superstrike.SuperStrike 0.3" + }, + "completed_at": "2026-09-08T20:26:09Z", + "delta_pct": -57.0, + "id": "54ea093325f72804", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3368.0, + "scores": [ + 2340.0, + 1028.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ao.T100_0.9.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ao.T100 0.9", + "division": "roborumble", + "jar": "ao.T100_0.9.jar", + "jar_sha256": "05273a2b787354f59695eeb17a4a8de330ed34d75d805aa17d91a7b756efaae0", + "key": "roborumble/ao.T100_0.9.jar", + "kind": "robot" + }, + "latest_observation": "4ae1803915fa8384", + "observations": [ + { + "classic": { + "elapsed": 4.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7797.0, + "scores": [ + 3914.0, + 3883.0 + ], + "selected": "ao.T100 0.9" + }, + "completed_at": "2026-09-08T20:28:16Z", + "delta_pct": -51.0, + "id": "4ae1803915fa8384", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 96.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3822.0, + "scores": [ + 2016.0, + 1806.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ap.Frederick_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ap.Frederick 1.1", + "division": "roborumble", + "jar": "ap.Frederick_1.1.jar", + "jar_sha256": "d7f1709e4ea064f0662f383c339f57390977292fdd921933adc36e305a375899", + "key": "roborumble/ap.Frederick_1.1.jar", + "kind": "robot" + }, + "latest_observation": "df6c7329f8f52c4e", + "observations": [ + { + "classic": { + "elapsed": 4.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 120.0, + "scores": [ + 120.0, + 0.0 + ], + "selected": "ap.Frederick 1.1" + }, + "completed_at": "2026-09-08T20:28:55Z", + "delta_pct": 4.2, + "id": "df6c7329f8f52c4e", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 34.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 125.0, + "scores": [ + 124.0, + 1.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apc.Caan_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apc.Caan 1.0", + "division": "roborumble", + "jar": "apc.Caan_1.0.jar", + "jar_sha256": "1cd29b8da786378b068170b3be45ce03620477218732e4b54e939165f33463b6", + "key": "roborumble/apc.Caan_1.0.jar", + "kind": "robot" + }, + "latest_observation": "f844e4bc6aff7dc0", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6154.0, + "scores": [ + 2535.0, + 3619.0 + ], + "selected": "apc.Caan 1.0" + }, + "completed_at": "2026-09-08T20:29:39Z", + "delta_pct": -1.1, + "id": "f844e4bc6aff7dc0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6084.0, + "scores": [ + 3257.0, + 2827.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apc.Colossus2_0.12.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apc.Colossus2 0.12", + "division": "roborumble", + "jar": "apc.Colossus2_0.12.jar", + "jar_sha256": "b4dbfb04c20332efad6d132d89259a0218fb245dbc8d73a14e368d6dcc024db3", + "key": "roborumble/apc.Colossus2_0.12.jar", + "kind": "robot" + }, + "latest_observation": "6234b82cd630f7c9", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 11750.0, + "scores": [ + 5594.0, + 6156.0 + ], + "selected": "apc.Colossus2 0.12" + }, + "completed_at": "2026-09-08T20:29:46Z", + "delta_pct": null, + "id": "6234b82cd630f7c9", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 160, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.ArrayIndexOutOfBoundsException: Index 20 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 21 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 22 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 23 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 24 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 25 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 26 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 27 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 28 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 29 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 30 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 31 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 32 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 33 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 34 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 35 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 36 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 37 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 38 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 39 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 40 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 41 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 42 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 43 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 44 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 45 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 46 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 47 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 48 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 49 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 50 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 51 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 52 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 53 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 54 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 55 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 56 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 57 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 58 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 59 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 60 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 61 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 62 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 63 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 64 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 65 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 66 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 67 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 68 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 69 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 70 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 71 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 72 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 20 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 21 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 22 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 23 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 24 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 25 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 26 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 27 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 28 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 29 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 30 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 31 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 32 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 33 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 34 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 35 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 36 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 37 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 38 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 39 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 40 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 41 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 42 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 43 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 44 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 45 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 46 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 47 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 48 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 49 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 50 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 51 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 52 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 53 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 54 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 55 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 56 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 57 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 58 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 59 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 60 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 61 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 62 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 63 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 64 out of bounds for length 20", + "java.lang.ArrayIndexOutOfBoundsException: Index 65 out of bounds for length 20" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/apc.LeeroyJenkins2_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apc.LeeroyJenkins2 1.0", + "division": "roborumble", + "jar": "apc.LeeroyJenkins2_1.0.jar", + "jar_sha256": "966e1947db52d724adaf02c233a17fdb172066c7fb9ab7a41741ba7eb5374a0d", + "key": "roborumble/apc.LeeroyJenkins2_1.0.jar", + "kind": "robot" + }, + "latest_observation": "c115dfcf1a4a4fdf", + "observations": [ + { + "classic": { + "elapsed": 2.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6444.0, + "scores": [ + 2482.0, + 3962.0 + ], + "selected": "apc.LeeroyJenkins2 1.0" + }, + "completed_at": "2026-09-08T20:31:46Z", + "delta_pct": -1.3, + "id": "c115dfcf1a4a4fdf", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6361.0, + "scores": [ + 3284.0, + 3077.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apc.botM_3.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apc.botM 3.0", + "division": "roborumble", + "jar": "apc.botM_3.0.jar", + "jar_sha256": "9348a9b3c2e0f175bacf361dc3b20a0842f186c228564bcafd8b6d853d345d94", + "key": "roborumble/apc.botM_3.0.jar", + "kind": "robot" + }, + "latest_observation": "4a1b06c7f3fd0456", + "observations": [ + { + "classic": { + "elapsed": 2.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5572.0, + "scores": [ + 3017.0, + 2555.0 + ], + "selected": "apc.botM 3.0" + }, + "completed_at": "2026-09-08T20:29:18Z", + "delta_pct": 2.7, + "id": "4a1b06c7f3fd0456", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5725.0, + "scores": [ + 3022.0, + 2703.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apollokidd.ApolloKidd_0.9.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apollokidd.ApolloKidd 0.9", + "division": "roborumble", + "jar": "apollokidd.ApolloKidd_0.9.jar", + "jar_sha256": "e7153516f9b25d4d571e484022c7c9fc6ab19f036faeb46213764691c84e7390", + "key": "roborumble/apollokidd.ApolloKidd_0.9.jar", + "kind": "robot" + }, + "latest_observation": "b90a01cef8102d4f", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10425.0, + "scores": [ + 4744.0, + 5681.0 + ], + "selected": "apollokidd.ApolloKidd 0.9" + }, + "completed_at": "2026-09-08T20:32:13Z", + "delta_pct": 34.5, + "id": "b90a01cef8102d4f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 14020.0, + "scores": [ + 7164.0, + 6856.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/apv.AspidReloaded_0.6.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.AspidReloaded 0.6", + "division": "roborumble", + "jar": "apv.AspidReloaded_0.6.jar", + "jar_sha256": "9cbef59e538da1a8edb9d9dd38ac7970a9607232b6e663eeaae9899c4c3161b1", + "key": "roborumble/apv.AspidReloaded_0.6.jar", + "kind": "robot" + }, + "latest_observation": "22f23ec4b2359408", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5453.0, + "scores": [ + 2852.0, + 2601.0 + ], + "selected": "apv.AspidReloaded 0.6" + }, + "completed_at": "2026-09-08T20:32:53Z", + "delta_pct": -9.7, + "id": "22f23ec4b2359408", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4926.0, + "scores": [ + 2805.0, + 2121.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apv.Aspid_1.7.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.Aspid 1.7", + "division": "roborumble", + "jar": "apv.Aspid_1.7.jar", + "jar_sha256": "4cf2bf08d8816f48106ef02f849e5afd7b52f46490902c8643d2d1c19853437d", + "key": "roborumble/apv.Aspid_1.7.jar", + "kind": "robot" + }, + "latest_observation": "f0bfd59e67a0674e", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5475.0, + "scores": [ + 2444.0, + 3031.0 + ], + "selected": "apv.Aspid 1.7" + }, + "completed_at": "2026-09-08T20:32:34Z", + "delta_pct": -10.1, + "id": "f0bfd59e67a0674e", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4924.0, + "scores": [ + 2572.0, + 2352.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apv.LauLectrik_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.LauLectrik 1.2", + "division": "roborumble", + "jar": "apv.LauLectrik_1.2.jar", + "jar_sha256": "b9268644ac0983cc1feaef4d7052c796ba74e0da321887bdaf37da70725ff822", + "key": "roborumble/apv.LauLectrik_1.2.jar", + "kind": "robot" + }, + "latest_observation": "379bc7ba025c9021", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 2, + "errors": [ + "java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\rc-robots\\.data\\apv\\LauLectrik.data\\apv.LauLectrik.zip (Den angivne fil blev ikke fundet)", + "java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\rc-robots\\.data\\apv\\LauLectrik.data\\apv.LauLectrik.zip (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": true, + "score": 5751.0, + "scores": [ + 2852.0, + 2899.0 + ], + "selected": "apv.LauLectrik 1.2" + }, + "completed_at": "2026-09-08T20:33:13Z", + "delta_pct": 1.8, + "id": "379bc7ba025c9021", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 2, + "errors": [ + "java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\apv.LauLectrik_1.2\\LauLectrik.data\\2.zip (Den angivne fil blev ikke fundet)", + "java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\apv.LauLectrik_1.2-2\\LauLectrik.data\\1.zip (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": true, + "score": 5853.0, + "scores": [ + 3459.0, + 2394.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apv.MicroAspid_1.8.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.MicroAspid 1.8", + "division": "roborumble", + "jar": "apv.MicroAspid_1.8.jar", + "jar_sha256": "2bbff478cfaca3f612e1bb707973c4a65a7be125ef016689f3cba9363f9147e6", + "key": "roborumble/apv.MicroAspid_1.8.jar", + "kind": "robot" + }, + "latest_observation": "683da02ff1de941a", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4316.0, + "scores": [ + 1971.0, + 2345.0 + ], + "selected": "apv.MicroAspid 1.8" + }, + "completed_at": "2026-09-08T20:33:36Z", + "delta_pct": -2.1, + "id": "683da02ff1de941a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4224.0, + "scores": [ + 2166.0, + 2058.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apv.NanoLauLectrikTheCannibal_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.NanoLauLectrikTheCannibal 1.1", + "division": "roborumble", + "jar": "apv.NanoLauLectrikTheCannibal_1.1.jar", + "jar_sha256": "de413e324848ddca35723cea47c4ed4e23c46b669d4fbfe97ceac6d2c93c1fc8", + "key": "roborumble/apv.NanoLauLectrikTheCannibal_1.1.jar", + "kind": "robot" + }, + "latest_observation": "15a460cbb677c889", + "observations": [ + { + "classic": { + "elapsed": 2.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 13019.0, + "scores": [ + 6404.0, + 6615.0 + ], + "selected": "apv.NanoLauLectrikTheCannibal 1.1" + }, + "completed_at": "2026-09-08T20:34:11Z", + "delta_pct": -6.0, + "id": "15a460cbb677c889", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12236.0, + "scores": [ + 6201.0, + 6035.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apv.NanoLauLectrik_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.NanoLauLectrik 1.0", + "division": "roborumble", + "jar": "apv.NanoLauLectrik_1.0.jar", + "jar_sha256": "4500794fdf2577950dd3981cdb314b4f750e1bfa66133dcdf546fa0203ee868d", + "key": "roborumble/apv.NanoLauLectrik_1.0.jar", + "kind": "robot" + }, + "latest_observation": "1aa9b09bc500fd4b", + "observations": [ + { + "classic": { + "elapsed": 3.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5376.0, + "scores": [ + 2551.0, + 2825.0 + ], + "selected": "apv.NanoLauLectrik 1.0" + }, + "completed_at": "2026-09-08T20:33:57Z", + "delta_pct": -14.2, + "id": "1aa9b09bc500fd4b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4612.0, + "scores": [ + 2974.0, + 1638.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apv.ScruchiPu_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.ScruchiPu 1.0", + "division": "roborumble", + "jar": "apv.ScruchiPu_1.0.jar", + "jar_sha256": "dcefa76d1e2eb841349fe2dce3a84218c99c08dba3eb6ecc5a34b933e00096bc", + "key": "roborumble/apv.ScruchiPu_1.0.jar", + "kind": "robot" + }, + "latest_observation": "d749a519d41481d5", + "observations": [ + { + "classic": { + "elapsed": 4.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5327.0, + "scores": [ + 2914.0, + 2413.0 + ], + "selected": "apv.ScruchiPu 1.0" + }, + "completed_at": "2026-09-08T20:34:32Z", + "delta_pct": -12.5, + "id": "d749a519d41481d5", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4661.0, + "scores": [ + 2585.0, + 2076.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apv.TheBrainPi_0.5fix.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.TheBrainPi 0.5fix", + "division": "roborumble", + "jar": "apv.TheBrainPi_0.5fix.jar", + "jar_sha256": "6414ce843145505046bfdb9c4cba00b486ebdead9767c9d3d1fb3b245746746e", + "key": "roborumble/apv.TheBrainPi_0.5fix.jar", + "kind": "robot" + }, + "latest_observation": "0b26bcefd7d92f4f", + "observations": [ + { + "classic": { + "elapsed": 4.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5321.0, + "scores": [ + 2586.0, + 2735.0 + ], + "selected": "apv.TheBrainPi 0.5fix" + }, + "completed_at": "2026-09-08T20:35:24Z", + "delta_pct": -4.0, + "id": "0b26bcefd7d92f4f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5107.0, + "scores": [ + 2939.0, + 2168.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/apv.test.Virus_0.6.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "apv.test.Virus 0.6.1", + "division": "roborumble", + "jar": "apv.test.Virus_0.6.1.jar", + "jar_sha256": "d6ce0ae230281fd974d6326c1e80fe53714bdbe20a09511911e81efed040f798", + "key": "roborumble/apv.test.Virus_0.6.1.jar", + "kind": "robot" + }, + "latest_observation": "fb63ed9dcd64d83b", + "observations": [ + { + "classic": { + "elapsed": 6.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4347.0, + "scores": [ + 2153.0, + 2194.0 + ], + "selected": "apv.test.Virus 0.6.1" + }, + "completed_at": "2026-09-08T20:35:03Z", + "delta_pct": 3.5, + "id": "fb63ed9dcd64d83b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4498.0, + "scores": [ + 2685.0, + 1813.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ar.QuantumChromodynamics_1.2.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ar.QuantumChromodynamics 1.2.1", + "division": "roborumble", + "jar": "ar.QuantumChromodynamics_1.2.1.jar", + "jar_sha256": "fe5372baa66f5f4fe5c138baa674c7b38c4548e200b9cc878ae7a78a0d3d95d7", + "key": "roborumble/ar.QuantumChromodynamics_1.2.1.jar", + "kind": "robot" + }, + "latest_observation": "4ac5fb2477202c50", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5392.0, + "scores": [ + 2523.0, + 2869.0 + ], + "selected": "ar.QuantumChromodynamics 1.2.1" + }, + "completed_at": "2026-09-08T20:36:18Z", + "delta_pct": -5.3, + "id": "4ac5fb2477202c50", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5106.0, + "scores": [ + 2925.0, + 2181.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ar.TheoryOfEverything_1.2.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ar.TheoryOfEverything 1.2.1", + "division": "roborumble", + "jar": "ar.TheoryOfEverything_1.2.1.jar", + "jar_sha256": "488629ee6595de0c24c69df967caa534dcc4359ace7708088dc544dfb98293b9", + "key": "roborumble/ar.TheoryOfEverything_1.2.1.jar", + "kind": "robot" + }, + "latest_observation": "9ace621bf12f4172", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5861.0, + "scores": [ + 3122.0, + 2739.0 + ], + "selected": "ar.TheoryOfEverything 1.2.1" + }, + "completed_at": "2026-09-08T20:36:37Z", + "delta_pct": -6.5, + "id": "9ace621bf12f4172", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5482.0, + "scores": [ + 2950.0, + 2532.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ar.horizon.Horizon_1.2.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ar.horizon.Horizon 1.2.2", + "division": "roborumble", + "jar": "ar.horizon.Horizon_1.2.2.jar", + "jar_sha256": "2d8dee69f687581106100d53b46cea3571ed70c88e9d8601b69c48f850c20a70", + "key": "roborumble/ar.horizon.Horizon_1.2.2.jar", + "kind": "robot" + }, + "latest_observation": "97286a0cb62861a8", + "observations": [ + { + "classic": { + "elapsed": 12.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4866.0, + "scores": [ + 2623.0, + 2243.0 + ], + "selected": "ar.horizon.Horizon 1.2.2" + }, + "completed_at": "2026-09-08T20:36:01Z", + "delta_pct": -63.3, + "id": "97286a0cb62861a8", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 1784.0, + "scores": [ + 1084.0, + 700.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ara.Shera_0.88.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ara.Shera 0.88", + "division": "roborumble", + "jar": "ara.Shera_0.88.jar", + "jar_sha256": "9474b68598ae5e71010b835259467b6dc35427e2826ace23e484a6a11160a040", + "key": "roborumble/ara.Shera_0.88.jar", + "kind": "robot" + }, + "latest_observation": "b32a6997ff56c9af", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4900.0, + "scores": [ + 2860.0, + 2040.0 + ], + "selected": "ara.Shera 0.88" + }, + "completed_at": "2026-09-08T20:37:14Z", + "delta_pct": 13.7, + "id": "b32a6997ff56c9af", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 34.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5570.0, + "scores": [ + 2985.0, + 2585.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/areb.Union_1.06.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "areb.Union 1.06", + "division": "roborumble", + "jar": "areb.Union_1.06.jar", + "jar_sha256": "98ee4d7e04fbf9b6ae81c712f6e1b3090d76f1ba36ef84b80d16c82ddf830f1d", + "key": "roborumble/areb.Union_1.06.jar", + "kind": "robot" + }, + "latest_observation": "e533066dda10e17a", + "observations": [ + { + "classic": { + "elapsed": 4.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5803.0, + "scores": [ + 3072.0, + 2731.0 + ], + "selected": "areb.Union 1.06" + }, + "completed_at": "2026-09-08T20:38:24Z", + "delta_pct": -16.2, + "id": "e533066dda10e17a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 32.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4862.0, + "scores": [ + 2516.0, + 2346.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/arthord.KostyaTszyu_Beta2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "arthord.KostyaTszyu Beta2", + "division": "roborumble", + "jar": "arthord.KostyaTszyu_Beta2.jar", + "jar_sha256": "c4aff289b00bc68748dde4f18aff699b9ef22eceeb1e529ea086be5a61cccc4d", + "key": "roborumble/arthord.KostyaTszyu_Beta2.jar", + "kind": "robot" + }, + "latest_observation": "36f054afe6dfd556", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4899.0, + "scores": [ + 2615.0, + 2284.0 + ], + "selected": "arthord.KostyaTszyu Beta2" + }, + "completed_at": "2026-09-08T20:38:45Z", + "delta_pct": -33.0, + "id": "36f054afe6dfd556", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3282.0, + "scores": [ + 2664.0, + 618.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/arthord.NanoSatanMelee_Beta.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "arthord.NanoSatanMelee Beta", + "division": "roborumble", + "jar": "arthord.NanoSatanMelee_Beta.jar", + "jar_sha256": "a0737bc6d25f6b89618c119a6df62ae89a44d9a2a7d662056dddefdde04f37fe", + "key": "roborumble/arthord.NanoSatanMelee_Beta.jar", + "kind": "robot" + }, + "latest_observation": "aee831eb589eb863", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6700.0, + "scores": [ + 3438.0, + 3262.0 + ], + "selected": "arthord.NanoSatanMelee Beta" + }, + "completed_at": "2026-09-08T20:39:55Z", + "delta_pct": 5.6, + "id": "aee831eb589eb863", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7076.0, + "scores": [ + 3811.0, + 3265.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/arthord.NanoSatan_Mu.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "arthord.NanoSatan Mu", + "division": "roborumble", + "jar": "arthord.NanoSatan_Mu.jar", + "jar_sha256": "a4796a1447ea7a3d8268dff283375e5188089afb88d66a62e14de9346a32e5fb", + "key": "roborumble/arthord.NanoSatan_Mu.jar", + "kind": "robot" + }, + "latest_observation": "cb4397fbdd3591a9", + "observations": [ + { + "classic": { + "elapsed": 3.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4802.0, + "scores": [ + 2054.0, + 2748.0 + ], + "selected": "arthord.NanoSatan Mu" + }, + "completed_at": "2026-09-08T20:39:38Z", + "delta_pct": -10.2, + "id": "cb4397fbdd3591a9", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4310.0, + "scores": [ + 2214.0, + 2096.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/arthord.micro.Apoptygma_0.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "arthord.micro.Apoptygma 0.4", + "division": "roborumble", + "jar": "arthord.micro.Apoptygma_0.4.jar", + "jar_sha256": "d07f93659bb20a2980e452dad383dbe0e1333144918cabf313423bc19dba8509", + "key": "roborumble/arthord.micro.Apoptygma_0.4.jar", + "kind": "robot" + }, + "latest_observation": "3c369261b2915cd0", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5399.0, + "scores": [ + 2673.0, + 2726.0 + ], + "selected": "arthord.micro.Apoptygma 0.4" + }, + "completed_at": "2026-09-08T20:39:02Z", + "delta_pct": -24.5, + "id": "3c369261b2915cd0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4076.0, + "scores": [ + 2054.0, + 2022.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/arthord.micro.Muffin_0.6.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "arthord.micro.Muffin 0.6.1", + "division": "roborumble", + "jar": "arthord.micro.Muffin_0.6.1.jar", + "jar_sha256": "a5b7c2fe230839a0452e06b8036ef3ed5ebbe771c75a67a00e6d9f6ffe547c6c", + "key": "roborumble/arthord.micro.Muffin_0.6.1.jar", + "kind": "robot" + }, + "latest_observation": "a7b360b5da35fac2", + "observations": [ + { + "classic": { + "elapsed": 3.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5820.0, + "scores": [ + 2568.0, + 3252.0 + ], + "selected": "arthord.micro.Muffin 0.6.1" + }, + "completed_at": "2026-09-08T20:39:19Z", + "delta_pct": -63.2, + "id": "a7b360b5da35fac2", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2140.0, + "scores": [ + 1415.0, + 725.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ary.Crisis_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ary.Crisis 1.0", + "division": "roborumble", + "jar": "ary.Crisis_1.0.jar", + "jar_sha256": "ff0f375c270611bb30a788d6ea8d53c4237f0aef7e59138bdce5da97749b160e", + "key": "roborumble/ary.Crisis_1.0.jar", + "kind": "robot" + }, + "latest_observation": "2728b67184ef42c0", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5380.0, + "scores": [ + 2640.0, + 2740.0 + ], + "selected": "ary.Crisis 1.0" + }, + "completed_at": "2026-09-08T20:40:18Z", + "delta_pct": 0.7, + "id": "2728b67184ef42c0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5417.0, + "scores": [ + 3008.0, + 2409.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ary.FourWD_1.3d.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ary.FourWD 1.3d", + "division": "roborumble", + "jar": "ary.FourWD_1.3d.jar", + "jar_sha256": "bfe8768af3401df35cf4d4ec8e3e1d47d779cc5dfc284b212fda3153dbd21537", + "key": "roborumble/ary.FourWD_1.3d.jar", + "kind": "robot" + }, + "latest_observation": "10b51506f52cd1be", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 67, + "errors": [ + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"pt\" is null", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"pt\" is null", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"pt\" is null", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException", + "java.lang.NullPointerException" + ], + "has_log": true, + "ok": true, + "score": 5331.0, + "scores": [ + 2389.0, + 2942.0 + ], + "selected": "ary.FourWD 1.3d" + }, + "completed_at": "2026-09-08T20:40:43Z", + "delta_pct": -40.4, + "id": "10b51506f52cd1be", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3178.0, + "scores": [ + 1891.0, + 1287.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ary.Help_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ary.Help 1.0", + "division": "roborumble", + "jar": "ary.Help_1.0.jar", + "jar_sha256": "53b6ea8218bd5d68255505bee581a741a88511e58840a395b855ec8f69c2355d", + "key": "roborumble/ary.Help_1.0.jar", + "kind": "robot" + }, + "latest_observation": "a5fc6afd26a475b9", + "observations": [ + { + "classic": { + "elapsed": 3.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4834.0, + "scores": [ + 2430.0, + 2404.0 + ], + "selected": "ary.Help 1.0" + }, + "completed_at": "2026-09-08T20:41:13Z", + "delta_pct": -38.8, + "id": "a5fc6afd26a475b9", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 26.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2960.0, + "scores": [ + 1618.0, + 1342.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ary.SMG_1.01.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ary.SMG 1.01", + "division": "roborumble", + "jar": "ary.SMG_1.01.jar", + "jar_sha256": "036caac2e9d5aefaec139d97b677ac1ffc9e41af7f0f19c09431a781d3bd00f7", + "key": "roborumble/ary.SMG_1.01.jar", + "kind": "robot" + }, + "latest_observation": "5df472261fca6166", + "observations": [ + { + "classic": { + "elapsed": 5.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5205.0, + "scores": [ + 2298.0, + 2907.0 + ], + "selected": "ary.SMG 1.01" + }, + "completed_at": "2026-09-08T20:43:38Z", + "delta_pct": -63.2, + "id": "5df472261fca6166", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 1918.0, + "scores": [ + 1058.0, + 860.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ary.micro.Weak_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ary.micro.Weak 1.2", + "division": "roborumble", + "jar": "ary.micro.Weak_1.2.jar", + "jar_sha256": "0544bc89b923a2ff7c63dc5781c07703dc8c0053a78d5f4a058d3c49e0a03f33", + "key": "roborumble/ary.micro.Weak_1.2.jar", + "kind": "robot" + }, + "latest_observation": "371017386f1da182", + "observations": [ + { + "classic": { + "elapsed": 13.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5205.0, + "scores": [ + 2473.0, + 2732.0 + ], + "selected": "ary.micro.Weak 1.2" + }, + "completed_at": "2026-09-08T20:42:01Z", + "delta_pct": -4.6, + "id": "371017386f1da182", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 34.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4965.0, + "scores": [ + 2509.0, + 2456.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ary.mini.Nimi_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ary.mini.Nimi 1.0", + "division": "roborumble", + "jar": "ary.mini.Nimi_1.0.jar", + "jar_sha256": "36bee330a80f2f3914bf93c24b5a0df11ad64530f588b05c06a68fff920c1ed0", + "key": "roborumble/ary.mini.Nimi_1.0.jar", + "kind": "robot" + }, + "latest_observation": "e0d8d0f6f8806455", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5247.0, + "scores": [ + 2277.0, + 2970.0 + ], + "selected": "ary.mini.Nimi 1.0" + }, + "completed_at": "2026-09-08T20:42:33Z", + "delta_pct": -31.2, + "id": "e0d8d0f6f8806455", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3608.0, + "scores": [ + 1844.0, + 1764.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ary.nano.AceSurf_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ary.nano.AceSurf 1.2", + "division": "roborumble", + "jar": "ary.nano.AceSurf_1.2.jar", + "jar_sha256": "2d693c09246861c6b044d534aa1b5b463f5eb869f00a88afd9f30a21472e7a1d", + "key": "roborumble/ary.nano.AceSurf_1.2.jar", + "kind": "robot" + }, + "latest_observation": "bd77f78dc4f9642f", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2521.0, + "scores": [ + 1376.0, + 1145.0 + ], + "selected": "ary.nano.AceSurf 1.2" + }, + "completed_at": "2026-09-08T20:42:54Z", + "delta_pct": 38.1, + "id": "bd77f78dc4f9642f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3481.0, + "scores": [ + 1797.0, + 1684.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/ary.nano.ColorNanoP_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ary.nano.ColorNanoP 1.1", + "division": "roborumble", + "jar": "ary.nano.ColorNanoP_1.1.jar", + "jar_sha256": "f1b339cda45f96f9c73a4a2ef286d7e6d6d837dcc92d140f5615b9b57421a3e8", + "key": "roborumble/ary.nano.ColorNanoP_1.1.jar", + "kind": "robot" + }, + "latest_observation": "7c40044d94ec9a01", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7699.0, + "scores": [ + 3670.0, + 4029.0 + ], + "selected": "ary.nano.ColorNanoP 1.1" + }, + "completed_at": "2026-09-08T20:43:11Z", + "delta_pct": -12.4, + "id": "7c40044d94ec9a01", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6744.0, + "scores": [ + 3377.0, + 3367.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/as.xbots_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "as.xbots 1.0", + "division": "roborumble", + "jar": "as.xbots_1.0.jar", + "jar_sha256": "6adf1183af7ed3e4cccbaf35249fede5ffb8dc2101e49458106909cea95120cf", + "key": "roborumble/as.xbots_1.0.jar", + "kind": "robot" + }, + "latest_observation": "a84fbf62fb36b2a2", + "observations": [ + { + "classic": { + "elapsed": 2.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10650.0, + "scores": [ + 5019.0, + 5631.0 + ], + "selected": "as.xbots 1.0" + }, + "completed_at": "2026-09-08T20:43:51Z", + "delta_pct": 54.8, + "id": "a84fbf62fb36b2a2", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 10.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 16487.0, + "scores": [ + 8529.0, + 7958.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/asd.Cthulhu_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "asd.Cthulhu 1.2", + "division": "roborumble", + "jar": "asd.Cthulhu_1.2.jar", + "jar_sha256": "63459d2c15c8c2227ad40c9fe6f89b51e934abffcc10d49837874199767c060e", + "key": "roborumble/asd.Cthulhu_1.2.jar", + "kind": "robot" + }, + "latest_observation": "62a7416486d668ba", + "observations": [ + { + "classic": { + "elapsed": 32.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6883.0, + "scores": [ + 3827.0, + 3056.0 + ], + "selected": "asd.Cthulhu 1.2" + }, + "completed_at": "2026-09-08T20:44:51Z", + "delta_pct": 2.3, + "id": "62a7416486d668ba", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7044.0, + "scores": [ + 3534.0, + 3510.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/asm.Statistas_0.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "asm.Statistas 0.1", + "division": "roborumble", + "jar": "asm.Statistas_0.1.jar", + "jar_sha256": "35553b2c09fcebec047f79582cc5a274d6bcd6d0034c1e5175d545281c76d0e4", + "key": "roborumble/asm.Statistas_0.1.jar", + "kind": "robot" + }, + "latest_observation": "1f68932ec9132d3a", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4972.0, + "scores": [ + 2714.0, + 2258.0 + ], + "selected": "asm.Statistas 0.1" + }, + "completed_at": "2026-09-08T20:45:10Z", + "delta_pct": -5.1, + "id": "1f68932ec9132d3a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4717.0, + "scores": [ + 2396.0, + 2321.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/awl.Locutus_1.5.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "awl.Locutus 1.5", + "division": "roborumble", + "jar": "awl.Locutus_1.5.jar", + "jar_sha256": "c7f5c5cca58627f58db3c1590036255788fbaf333da16641ff0633c709ad0c2b", + "key": "roborumble/awl.Locutus_1.5.jar", + "kind": "robot" + }, + "latest_observation": "044a09527daed943", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6083.0, + "scores": [ + 2605.0, + 3478.0 + ], + "selected": "awl.Locutus 1.5" + }, + "completed_at": "2026-09-08T20:45:37Z", + "delta_pct": -16.0, + "id": "044a09527daed943", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 24.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5107.0, + "scores": [ + 3156.0, + 1951.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/axeBots.HataMoto_3.09.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "axeBots.HataMoto 3.09", + "division": "roborumble", + "jar": "axeBots.HataMoto_3.09.jar", + "jar_sha256": "293a92846b40195a5de25c7379f72e0dcb08297f79d2b6fffd7d3a95b50afb2c", + "key": "roborumble/axeBots.HataMoto_3.09.jar", + "kind": "robot" + }, + "latest_observation": "f3c9ed411fa769b7", + "observations": [ + { + "classic": { + "elapsed": 5.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4777.0, + "scores": [ + 1548.0, + 3229.0 + ], + "selected": "axeBots.HataMoto 3.09" + }, + "completed_at": "2026-09-08T20:46:16Z", + "delta_pct": 5.3, + "id": "f3c9ed411fa769b7", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 32.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5029.0, + "scores": [ + 2525.0, + 2504.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/axeBots.Musashi_2.18.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "axeBots.Musashi 2.18", + "division": "roborumble", + "jar": "axeBots.Musashi_2.18.jar", + "jar_sha256": "f7890ddc132b5ae0595e1faa65464e79628bb5dda7a64f5e20e74cb3ee9d8707", + "key": "roborumble/axeBots.Musashi_2.18.jar", + "kind": "robot" + }, + "latest_observation": "d96c381e473a9e9f", + "observations": [ + { + "classic": { + "elapsed": 3.9, + "error_count": 2, + "errors": [ + "IOException trying to read: java.lang.NullPointerException: name can't be null", + "IOException trying to read: java.lang.NullPointerException: name can't be null" + ], + "has_log": true, + "ok": true, + "score": 5575.0, + "scores": [ + 2545.0, + 3030.0 + ], + "selected": "axeBots.Musashi 2.18" + }, + "completed_at": "2026-09-08T20:46:48Z", + "delta_pct": -5.5, + "id": "d96c381e473a9e9f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 28.0, + "error_count": 2, + "errors": [ + "IOException trying to read: java.lang.NullPointerException: Cannot invoke \"java.io.File.isInvalid()\" because \"file\" is null", + "IOException trying to read: java.lang.NullPointerException: Cannot invoke \"java.io.File.isInvalid()\" because \"file\" is null" + ], + "has_log": true, + "ok": true, + "score": 5270.0, + "scores": [ + 2646.0, + 2624.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/axeBots.Okami_1.04.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "axeBots.Okami 1.04", + "division": "roborumble", + "jar": "axeBots.Okami_1.04.jar", + "jar_sha256": "608f42ae73765a352e9034e41f36af721cd745835a19a20f8fe7e8bbe3be30fa", + "key": "roborumble/axeBots.Okami_1.04.jar", + "kind": "robot" + }, + "latest_observation": "74bce683db58a4ec", + "observations": [ + { + "classic": { + "elapsed": 5.0, + "error_count": 2, + "errors": [ + "IOException trying to read: java.lang.NullPointerException: name can't be null", + "IOException trying to read: java.lang.NullPointerException: name can't be null" + ], + "has_log": true, + "ok": true, + "score": 5383.0, + "scores": [ + 2856.0, + 2527.0 + ], + "selected": "axeBots.Okami 1.04" + }, + "completed_at": "2026-09-08T20:47:22Z", + "delta_pct": -7.1, + "id": "74bce683db58a4ec", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 28.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4999.0, + "scores": [ + 3272.0, + 1727.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/axeBots.SilverSurfer_2.53.33fix.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "axeBots.SilverSurfer 2.53.33fix", + "division": "roborumble", + "jar": "axeBots.SilverSurfer_2.53.33fix.jar", + "jar_sha256": "d0b3667a0a9c38bc0cfdb5c47d7b68a8b73194fd88be12d6bee64fcfddb86add", + "key": "roborumble/axeBots.SilverSurfer_2.53.33fix.jar", + "kind": "robot" + }, + "latest_observation": "9b6fc48236f56191", + "observations": [ + { + "classic": { + "elapsed": 6.3, + "error_count": 2, + "errors": [ + "IOException, trying to read: java.io.InterruptedIOException: File not Found:axeBots.SilverSurfer 2.53.33fix (2).gfs", + "IOException, trying to read: java.io.InterruptedIOException: File not Found:axeBots.SilverSurfer 2.53.33fix (1).gfs" + ], + "has_log": true, + "ok": true, + "score": 5487.0, + "scores": [ + 3158.0, + 2329.0 + ], + "selected": "axeBots.SilverSurfer 2.53.33fix" + }, + "completed_at": "2026-09-08T20:47:52Z", + "delta_pct": -3.4, + "id": "9b6fc48236f56191", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 24.0, + "error_count": 2, + "errors": [ + "IOException, trying to read: java.io.InterruptedIOException: File not Found:2.gfs", + "IOException, trying to read: java.io.InterruptedIOException: File not Found:1.gfs" + ], + "has_log": true, + "ok": true, + "score": 5298.0, + "scores": [ + 2951.0, + 2347.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ayk.WallHugger_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ayk.WallHugger 1.0", + "division": "roborumble", + "jar": "ayk.WallHugger_1.0.jar", + "jar_sha256": "6a5eb97de641d4c81e3456da75997dbe50aa072eacf0cc79db2d212899979470", + "key": "roborumble/ayk.WallHugger_1.0.jar", + "kind": "robot" + }, + "latest_observation": "7d779898eaf34726", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10066.0, + "scores": [ + 4868.0, + 5198.0 + ], + "selected": "ayk.WallHugger 1.0" + }, + "completed_at": "2026-09-08T20:48:09Z", + "delta_pct": -22.2, + "id": "7d779898eaf34726", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7835.0, + "scores": [ + 4757.0, + 3078.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/az.Ololobot_0.2.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "az.Ololobot 0.2.4", + "division": "roborumble", + "jar": "az.Ololobot_0.2.4.jar", + "jar_sha256": "b6938411c048bde80bf0186892f03342e0c60dff05127052ed21932825765eb9", + "key": "roborumble/az.Ololobot_0.2.4.jar", + "kind": "robot" + }, + "latest_observation": "5cf402dd473c1227", + "observations": [ + { + "classic": { + "elapsed": 17.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10091.0, + "scores": [ + 4636.0, + 5455.0 + ], + "selected": "az.Ololobot 0.2.4" + }, + "completed_at": "2026-09-08T20:48:31Z", + "delta_pct": null, + "id": "5cf402dd473c1227", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 189, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5", + "java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/banshee.micro.Nexus6_0.3.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "banshee.micro.Nexus6 0.3.0", + "division": "roborumble", + "jar": "banshee.micro.Nexus6_0.3.0.jar", + "jar_sha256": "e4cb9d96e7487b927a54b89221c2ee262ce514759f3960670b9aa95ff6dbaecc", + "key": "roborumble/banshee.micro.Nexus6_0.3.0.jar", + "kind": "robot" + }, + "latest_observation": "0cf456b6f9cb9978", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6536.0, + "scores": [ + 2916.0, + 3620.0 + ], + "selected": "banshee.micro.Nexus6 0.3.0" + }, + "completed_at": "2026-09-08T20:48:47Z", + "delta_pct": -13.0, + "id": "0cf456b6f9cb9978", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5689.0, + "scores": [ + 3295.0, + 2394.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/banshee.mini.Nexus6_0.2.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "banshee.mini.Nexus6 0.2.0", + "division": "roborumble", + "jar": "banshee.mini.Nexus6_0.2.0.jar", + "jar_sha256": "2bb08e1c59e732361dcdee3df148534bc0dabd9d8f14147c4a583c04f1dc7a42", + "key": "roborumble/banshee.mini.Nexus6_0.2.0.jar", + "kind": "robot" + }, + "latest_observation": "d4cda9b611b80d04", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5731.0, + "scores": [ + 3179.0, + 2552.0 + ], + "selected": "banshee.mini.Nexus6 0.2.0" + }, + "completed_at": "2026-09-08T20:49:13Z", + "delta_pct": 2.7, + "id": "d4cda9b611b80d04", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5883.0, + "scores": [ + 3324.0, + 2559.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/barontrozo.BaronTrozo_1.7.6.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "barontrozo.BaronTrozo 1.7.6", + "division": "roborumble", + "jar": "barontrozo.BaronTrozo_1.7.6.jar", + "jar_sha256": "0031d364bd6cc01f74c537d9c88be09c53d7fd11999aa586480d010a77a37f3c", + "key": "roborumble/barontrozo.BaronTrozo_1.7.6.jar", + "kind": "robot" + }, + "latest_observation": "004179d3a54b0e5a", + "observations": [ + { + "classic": { + "elapsed": 5.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5725.0, + "scores": [ + 2259.0, + 3466.0 + ], + "selected": "barontrozo.BaronTrozo 1.7.6" + }, + "completed_at": "2026-09-08T20:49:38Z", + "delta_pct": -9.3, + "id": "004179d3a54b0e5a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5195.0, + "scores": [ + 2691.0, + 2504.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bayen.UbaMicro_1.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bayen.UbaMicro 1.4", + "division": "roborumble", + "jar": "bayen.UbaMicro_1.4.jar", + "jar_sha256": "7691bd56732d5813079f65319f62a7bda392937bfe458528383fd2b89b1a7d11", + "key": "roborumble/bayen.UbaMicro_1.4.jar", + "kind": "robot" + }, + "latest_observation": "26edca5dc7a5d68a", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5531.0, + "scores": [ + 2586.0, + 2945.0 + ], + "selected": "bayen.UbaMicro 1.4" + }, + "completed_at": "2026-09-08T20:51:01Z", + "delta_pct": -20.6, + "id": "26edca5dc7a5d68a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4389.0, + "scores": [ + 2283.0, + 2106.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bayen.UbaRamLT_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bayen.UbaRamLT 1.0", + "division": "roborumble", + "jar": "bayen.UbaRamLT_1.0.jar", + "jar_sha256": "604d19bdcfa6caa05964df927bb24e237e8f7aaa1fcbd7d13aea4e4d9b5e028b", + "key": "roborumble/bayen.UbaRamLT_1.0.jar", + "kind": "robot" + }, + "latest_observation": "13b1bb4843e9815b", + "observations": [ + { + "classic": { + "elapsed": 2.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10862.0, + "scores": [ + 5678.0, + 5184.0 + ], + "selected": "bayen.UbaRamLT 1.0" + }, + "completed_at": "2026-09-08T20:51:14Z", + "delta_pct": 29.8, + "id": "13b1bb4843e9815b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 10.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 14098.0, + "scores": [ + 7311.0, + 6787.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bayen.nano.Squirrel_0.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bayen.nano.Squirrel 0.2", + "division": "roborumble", + "jar": "bayen.nano.Squirrel_0.2.jar", + "jar_sha256": "5207b14349401cf529947785f203d80e0bd5d21c2e42672ef6585686caa74e7f", + "key": "roborumble/bayen.nano.Squirrel_0.2.jar", + "kind": "robot" + }, + "latest_observation": "6fcfbf55b4d8ff5c", + "observations": [ + { + "classic": { + "elapsed": 2.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4209.0, + "scores": [ + 2194.0, + 2015.0 + ], + "selected": "bayen.nano.Squirrel 0.2" + }, + "completed_at": "2026-09-08T20:50:00Z", + "delta_pct": -19.4, + "id": "6fcfbf55b4d8ff5c", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3391.0, + "scores": [ + 2033.0, + 1358.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bayen.nut.Squirrel_1.621.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bayen.nut.Squirrel 1.621", + "division": "roborumble", + "jar": "bayen.nut.Squirrel_1.621.jar", + "jar_sha256": "a5a1b82535752ee271c91cdec18f433e21dcfe1efc46ed4001bed116eeca1f76", + "key": "roborumble/bayen.nut.Squirrel_1.621.jar", + "kind": "robot" + }, + "latest_observation": "517b1c7cec309414", + "observations": [ + { + "classic": { + "elapsed": 4.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5175.0, + "scores": [ + 2188.0, + 2987.0 + ], + "selected": "bayen.nut.Squirrel 1.621" + }, + "completed_at": "2026-09-08T20:50:40Z", + "delta_pct": -100.0, + "id": "517b1c7cec309414", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 36.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 0.0, + "scores": [ + 0.0, + 0.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bbo.RamboT_0.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bbo.RamboT 0.3", + "division": "roborumble", + "jar": "bbo.RamboT_0.3.jar", + "jar_sha256": "3c933f89750dfd882f03844f5fc83ae4bf36d5a6baca855251417b4a1457e6ed", + "key": "roborumble/bbo.RamboT_0.3.jar", + "kind": "robot" + }, + "latest_observation": "df99f8a1d6c00d7e", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9366.0, + "scores": [ + 4626.0, + 4740.0 + ], + "selected": "bbo.RamboT 0.3" + }, + "completed_at": "2026-09-08T20:51:30Z", + "delta_pct": 22.4, + "id": "df99f8a1d6c00d7e", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 11461.0, + "scores": [ + 6133.0, + 5328.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bbo.TheRoof_1.4.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bbo.TheRoof 1.4.3", + "division": "roborumble", + "jar": "bbo.TheRoof_1.4.3.jar", + "jar_sha256": "0d3aac41de0b798e76e684b60756f8fb8318c5c5dcf890f26ecfb8bea6d01076", + "key": "roborumble/bbo.TheRoof_1.4.3.jar", + "kind": "robot" + }, + "latest_observation": "39adaf77fb8fca87", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5240.0, + "scores": [ + 2321.0, + 2919.0 + ], + "selected": "bbo.TheRoof 1.4.3" + }, + "completed_at": "2026-09-08T20:51:47Z", + "delta_pct": 4.9, + "id": "39adaf77fb8fca87", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5495.0, + "scores": [ + 2941.0, + 2554.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/benhorner.PureAggression_0.2.6.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "benhorner.PureAggression 0.2.6", + "division": "roborumble", + "jar": "benhorner.PureAggression_0.2.6.jar", + "jar_sha256": "ff9129cad35f13a68dc008ab29e71e073ea28ff77fae33dba73846e4da0e041e", + "key": "roborumble/benhorner.PureAggression_0.2.6.jar", + "kind": "robot" + }, + "latest_observation": "ca5a8e78cc56d369", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 11194.0, + "scores": [ + 5562.0, + 5632.0 + ], + "selected": "benhorner.PureAggression 0.2.6" + }, + "completed_at": "2026-09-08T20:51:58Z", + "delta_pct": 17.0, + "id": "ca5a8e78cc56d369", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 8.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 13099.0, + "scores": [ + 6661.0, + 6438.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bigpete.Stewie_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bigpete.Stewie 1.0", + "division": "roborumble", + "jar": "bigpete.Stewie_1.0.jar", + "jar_sha256": "743ecaf04844e35915d24a80533652a29adaaf9539955f2178df0ef6148c481d", + "key": "roborumble/bigpete.Stewie_1.0.jar", + "kind": "robot" + }, + "latest_observation": "e8b293a979c1c0b4", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5593.0, + "scores": [ + 2575.0, + 3018.0 + ], + "selected": "bigpete.Stewie 1.0" + }, + "completed_at": "2026-09-08T20:52:39Z", + "delta_pct": -4.9, + "id": "e8b293a979c1c0b4", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5321.0, + "scores": [ + 2839.0, + 2482.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bing2.Melody_1.3.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bing2.Melody 1.3.1", + "division": "roborumble", + "jar": "bing2.Melody_1.3.1.jar", + "jar_sha256": "3a63316b12e61f4810fdb73e18bb068fb5bc0a78f82a2c9865be1aa22611137a", + "key": "roborumble/bing2.Melody_1.3.1.jar", + "kind": "robot" + }, + "latest_observation": "6d5c62b55bd1282c", + "observations": [ + { + "classic": { + "elapsed": 3.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2848.0, + "scores": [ + 1643.0, + 1205.0 + ], + "selected": "bing2.Melody 1.3.1" + }, + "completed_at": "2026-09-08T20:52:59Z", + "delta_pct": 190.3, + "id": "6d5c62b55bd1282c", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8268.0, + "scores": [ + 4299.0, + 3969.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bjl.LoneDragon_0.5.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bjl.LoneDragon 0.5", + "division": "roborumble", + "jar": "bjl.LoneDragon_0.5.jar", + "jar_sha256": "016175c3d3f7c0522eebac3154f93c65abe35cc57bbdaee04e606f8d023e1efe", + "key": "roborumble/bjl.LoneDragon_0.5.jar", + "kind": "robot" + }, + "latest_observation": "b407ed4b3237d3e7", + "observations": [ + { + "classic": { + "elapsed": 7.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5694.0, + "scores": [ + 2412.0, + 3282.0 + ], + "selected": "bjl.LoneDragon 0.5" + }, + "completed_at": "2026-09-08T20:54:27Z", + "delta_pct": 19.1, + "id": "b407ed4b3237d3e7", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 80.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6781.0, + "scores": [ + 3952.0, + 2829.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bk.Shooter_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bk.Shooter 1.0", + "division": "roborumble", + "jar": "bk.Shooter_1.0.jar", + "jar_sha256": "0dfe57a84edd868ba0517b270c817bfdc9765139b6517fe4c7868110cf9c0e16", + "key": "roborumble/bk.Shooter_1.0.jar", + "kind": "robot" + }, + "latest_observation": "17eb9124acd74e55", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7416.0, + "scores": [ + 3476.0, + 3940.0 + ], + "selected": "bk.Shooter 1.0" + }, + "completed_at": "2026-09-08T20:54:58Z", + "delta_pct": -25.3, + "id": "17eb9124acd74e55", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5541.0, + "scores": [ + 2915.0, + 2626.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/blir.micro.blixi.Blixi_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "blir.micro.blixi.Blixi 1.2", + "division": "roborumble", + "jar": "blir.micro.blixi.Blixi_1.2.jar", + "jar_sha256": "939340a6e589c7bd36ea58fb12018f4f4ee512bbaf8264c0fee5d706e2d6325b", + "key": "roborumble/blir.micro.blixi.Blixi_1.2.jar", + "kind": "robot" + }, + "latest_observation": "32ac2de21087f5bd", + "observations": [ + { + "classic": { + "elapsed": 5.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6468.0, + "scores": [ + 1515.0, + 4953.0 + ], + "selected": "blir.micro.blixi.Blixi 1.2" + }, + "completed_at": "2026-09-08T20:55:40Z", + "delta_pct": -44.5, + "id": "32ac2de21087f5bd", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 36.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3589.0, + "scores": [ + 1820.0, + 1769.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/blir.mini.oops.Splooshlu_2.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "blir.mini.oops.Splooshlu 2.0", + "division": "roborumble", + "jar": "blir.mini.oops.Splooshlu_2.0.jar", + "jar_sha256": "43d728428624085e09e6bd3fa34ae9ed864b4d056959c207b3daa20c0ad6e42b", + "key": "roborumble/blir.mini.oops.Splooshlu_2.0.jar", + "kind": "robot" + }, + "latest_observation": "9d2209ef822252f0", + "observations": [ + { + "classic": { + "elapsed": 4.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5726.0, + "scores": [ + 2882.0, + 2844.0 + ], + "selected": "blir.mini.oops.Splooshlu 2.0" + }, + "completed_at": "2026-09-08T20:56:40Z", + "delta_pct": -19.6, + "id": "9d2209ef822252f0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 56.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4604.0, + "scores": [ + 2341.0, + 2263.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/blir.nano.Bruce_R1.0.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "blir.nano.Bruce R1.0.0", + "division": "roborumble", + "jar": "blir.nano.Bruce_R1.0.0.jar", + "jar_sha256": "380d1895fca7181874921c6b8735c9659ea3cb6e5d35d42799bab523dfdd1bae", + "key": "roborumble/blir.nano.Bruce_R1.0.0.jar", + "kind": "robot" + }, + "latest_observation": "e98608d4efb99503", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12737.0, + "scores": [ + 6532.0, + 6205.0 + ], + "selected": "blir.nano.Bruce R1.0.0" + }, + "completed_at": "2026-09-08T20:56:55Z", + "delta_pct": -3.5, + "id": "e98608d4efb99503", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12287.0, + "scores": [ + 6420.0, + 5867.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/blir.nano.Cabbage_R1.0.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "blir.nano.Cabbage R1.0.1", + "division": "roborumble", + "jar": "blir.nano.Cabbage_R1.0.1.jar", + "jar_sha256": "6048d93ca6c18440d2442930806a4edb783d6bc3e7b019f324fad7aebaccb222", + "key": "roborumble/blir.nano.Cabbage_R1.0.1.jar", + "kind": "robot" + }, + "latest_observation": "14e36192003c6140", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 1399.0, + "scores": [ + 510.0, + 889.0 + ], + "selected": "blir.nano.Cabbage R1.0.1" + }, + "completed_at": "2026-09-08T20:57:18Z", + "delta_pct": 111.9, + "id": "14e36192003c6140", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2965.0, + "scores": [ + 1677.0, + 1288.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/blir.nano.inch.Inchworm_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "blir.nano.inch.Inchworm 1.0", + "division": "roborumble", + "jar": "blir.nano.inch.Inchworm_1.0.jar", + "jar_sha256": "168c6b33a9c90cd70b268369ed7aedb8773e1f04c3b99382fcd2cf98d5b49bd4", + "key": "roborumble/blir.nano.inch.Inchworm_1.0.jar", + "kind": "robot" + }, + "latest_observation": "7bd4cdf08768932e", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7657.0, + "scores": [ + 3538.0, + 4119.0 + ], + "selected": "blir.nano.inch.Inchworm 1.0" + }, + "completed_at": "2026-09-08T20:57:41Z", + "delta_pct": -20.5, + "id": "7bd4cdf08768932e", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6088.0, + "scores": [ + 3161.0, + 2927.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/blr.Chicken001_0.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "blr.Chicken001 0.1", + "division": "roborumble", + "jar": "blr.Chicken001_0.1.jar", + "jar_sha256": "b60dc3905b4861b427dae9e16d964f3978947773e5f9c3e5ae32f7c4182f976e", + "key": "roborumble/blr.Chicken001_0.1.jar", + "kind": "robot" + }, + "latest_observation": "fa1b7716484381ca", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10637.0, + "scores": [ + 5565.0, + 5072.0 + ], + "selected": "blr.Chicken001 0.1" + }, + "completed_at": "2026-09-08T20:58:00Z", + "delta_pct": -5.1, + "id": "fa1b7716484381ca", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10090.0, + "scores": [ + 5323.0, + 4767.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bndl.LostLion_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bndl.LostLion 1.2", + "division": "roborumble", + "jar": "bndl.LostLion_1.2.jar", + "jar_sha256": "991c707bd0af71a46d5fc34e4a34b0df2267f0ffc06567cdfaebfbea87f80cc2", + "key": "roborumble/bndl.LostLion_1.2.jar", + "kind": "robot" + }, + "latest_observation": "1a29913b8f87ac3a", + "observations": [ + { + "classic": { + "elapsed": 17.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6370.0, + "scores": [ + 3271.0, + 3099.0 + ], + "selected": "bndl.LostLion 1.2" + }, + "completed_at": "2026-09-08T20:58:46Z", + "delta_pct": -6.4, + "id": "1a29913b8f87ac3a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5961.0, + "scores": [ + 3239.0, + 2722.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/boe.Minerva_0.80.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "boe.Minerva 0.80", + "division": "roborumble", + "jar": "boe.Minerva_0.80.jar", + "jar_sha256": "79dd5b1ad699fe82fc423f2a35d3264fd460c787fef7c528a9f897d88365a5d6", + "key": "roborumble/boe.Minerva_0.80.jar", + "kind": "robot" + }, + "latest_observation": "8205a7ec0f3730f8", + "observations": [ + { + "classic": { + "elapsed": 9.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6318.0, + "scores": [ + 3360.0, + 2958.0 + ], + "selected": "boe.Minerva 0.80" + }, + "completed_at": "2026-09-08T20:59:20Z", + "delta_pct": -9.3, + "id": "8205a7ec0f3730f8", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 24.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5732.0, + "scores": [ + 3019.0, + 2713.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bons.NanoStalker_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bons.NanoStalker 1.2", + "division": "roborumble", + "jar": "bons.NanoStalker_1.2.jar", + "jar_sha256": "25169213aa301260dbe320aab5011618b95dd7283102fc6272cdd2e5afdc0936", + "key": "roborumble/bons.NanoStalker_1.2.jar", + "kind": "robot" + }, + "latest_observation": "73559040c308ecc0", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7639.0, + "scores": [ + 3715.0, + 3924.0 + ], + "selected": "bons.NanoStalker 1.2" + }, + "completed_at": "2026-09-08T20:59:33Z", + "delta_pct": -62.6, + "id": "73559040c308ecc0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 10.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2859.0, + "scores": [ + 1527.0, + 1332.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bots.UberBot_1.2c.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bots.UberBot 1.2c", + "division": "roborumble", + "jar": "bots.UberBot_1.2c.jar", + "jar_sha256": "5406ba168c88b8e114b607bddd2959d76d4601740fe12236d5066d8a6bfcb556", + "key": "roborumble/bots.UberBot_1.2c.jar", + "kind": "robot" + }, + "latest_observation": "258737685abd4504", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6154.0, + "scores": [ + 2720.0, + 3434.0 + ], + "selected": "bots.UberBot 1.2c" + }, + "completed_at": "2026-09-08T20:59:58Z", + "delta_pct": -8.6, + "id": "258737685abd4504", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5625.0, + "scores": [ + 3120.0, + 2505.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bots.UnterBot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bots.UnterBot 1.0", + "division": "roborumble", + "jar": "bots.UnterBot_1.0.jar", + "jar_sha256": "7c24869acf14c596bca3c7eeb85b0dbab99b99e470f5df1bb886c4d101f1e66d", + "key": "roborumble/bots.UnterBot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "a57b9c4d5a68c0e3", + "observations": [ + { + "classic": { + "elapsed": 2.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7852.0, + "scores": [ + 4216.0, + 3636.0 + ], + "selected": "bots.UnterBot 1.0" + }, + "completed_at": "2026-09-08T21:00:22Z", + "delta_pct": -45.5, + "id": "a57b9c4d5a68c0e3", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4279.0, + "scores": [ + 2713.0, + 1566.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bots.UnterExBot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bots.UnterExBot 1.0", + "division": "roborumble", + "jar": "bots.UnterExBot_1.0.jar", + "jar_sha256": "773aa3a9953e440b5e5464c54b5efbd269a15b17ab05f301d3401d16c263d25b", + "key": "roborumble/bots.UnterExBot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "0eeef9f8e9a05217", + "observations": [ + { + "classic": { + "elapsed": 2.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9251.0, + "scores": [ + 4666.0, + 4585.0 + ], + "selected": "bots.UnterExBot 1.0" + }, + "completed_at": "2026-09-08T21:00:45Z", + "delta_pct": -47.8, + "id": "0eeef9f8e9a05217", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4833.0, + "scores": [ + 2438.0, + 2395.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bp.Kuma_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bp.Kuma 1.0", + "division": "roborumble", + "jar": "bp.Kuma_1.0.jar", + "jar_sha256": "2646c78e817ac3701fbd23306259844fdea377b82ac7748f8d3cf6ea36b4825e", + "key": "roborumble/bp.Kuma_1.0.jar", + "kind": "robot" + }, + "latest_observation": "a5efd143dba4df0f", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3008.0, + "scores": [ + 1726.0, + 1282.0 + ], + "selected": "bp.Kuma 1.0" + }, + "completed_at": "2026-09-08T21:01:06Z", + "delta_pct": 91.6, + "id": "a5efd143dba4df0f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5762.0, + "scores": [ + 3303.0, + 2459.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/braaropolis.Abot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "braaropolis.Abot 1.0", + "division": "roborumble", + "jar": "braaropolis.Abot_1.0.jar", + "jar_sha256": "d8e61877edd6f98d13b8c78bce6fb1fa8930834ce8414b95f2f0c46f7dd9a8be", + "key": "roborumble/braaropolis.Abot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "36610aff4c63ca29", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4862.0, + "scores": [ + 1751.0, + 3111.0 + ], + "selected": "braaropolis.Abot 1.0" + }, + "completed_at": "2026-09-08T21:01:31Z", + "delta_pct": -26.1, + "id": "36610aff4c63ca29", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3594.0, + "scores": [ + 1866.0, + 1728.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/brainfade.Fallen_0.63.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "brainfade.Fallen 0.63", + "division": "roborumble", + "jar": "brainfade.Fallen_0.63.jar", + "jar_sha256": "7affe8566b9200ec51bc97f81bd7e3a98d5e9f2c011c70bd3331754bfc832373", + "key": "roborumble/brainfade.Fallen_0.63.jar", + "kind": "robot" + }, + "latest_observation": "cfd838bd46fc2f16", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5630.0, + "scores": [ + 2323.0, + 3307.0 + ], + "selected": "brainfade.Fallen 0.63" + }, + "completed_at": "2026-09-08T21:01:54Z", + "delta_pct": -12.6, + "id": "cfd838bd46fc2f16", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4918.0, + "scores": [ + 3163.0, + 1755.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/brainfade.melee.Dusk_0.44.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "brainfade.melee.Dusk 0.44", + "division": "roborumble", + "jar": "brainfade.melee.Dusk_0.44.jar", + "jar_sha256": "a9ebabb60c05453723be3680d718a93a6b212ecf13d3fc408b4e2ab88f5d853b", + "key": "roborumble/brainfade.melee.Dusk_0.44.jar", + "kind": "robot" + }, + "latest_observation": "c24d76413b604bbc", + "observations": [ + { + "classic": { + "elapsed": 3.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5163.0, + "scores": [ + 2822.0, + 2341.0 + ], + "selected": "brainfade.melee.Dusk 0.44" + }, + "completed_at": "2026-09-08T21:02:28Z", + "delta_pct": -1.8, + "id": "c24d76413b604bbc", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 30.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5071.0, + "scores": [ + 2645.0, + 2426.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bts.mega.Gnarly_1.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bts.mega.Gnarly 1.4", + "division": "roborumble", + "jar": "bts.mega.Gnarly_1.4.jar", + "jar_sha256": "77d1f463511e268b1a020f8571fe932a03760447e30067846a3c1d6090368f81", + "key": "roborumble/bts.mega.Gnarly_1.4.jar", + "kind": "robot" + }, + "latest_observation": "ea1a4d3c629039e8", + "observations": [ + { + "classic": { + "elapsed": 2.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8473.0, + "scores": [ + 4405.0, + 4068.0 + ], + "selected": "bts.mega.Gnarly 1.4" + }, + "completed_at": "2026-09-08T21:02:45Z", + "delta_pct": 2.3, + "id": "ea1a4d3c629039e8", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8671.0, + "scores": [ + 4642.0, + 4029.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bts.wiki.RipCurl_0.9b.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bts.wiki.RipCurl 0.9b", + "division": "roborumble", + "jar": "bts.wiki.RipCurl_0.9b.jar", + "jar_sha256": "1f9a52c3ea49c22e5755defaaf43f355801169537f7a9636d1708bd00064e4c9", + "key": "roborumble/bts.wiki.RipCurl_0.9b.jar", + "kind": "robot" + }, + "latest_observation": "0b71b2a50f905e18", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5000.0, + "scores": [ + 1871.0, + 3129.0 + ], + "selected": "bts.wiki.RipCurl 0.9b" + }, + "completed_at": "2026-09-08T21:02:55Z", + "delta_pct": null, + "id": "0b71b2a50f905e18", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 6.2, + "error_count": 2, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 2" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/buba.Archivist_0.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "buba.Archivist 0.1", + "division": "roborumble", + "jar": "buba.Archivist_0.1.jar", + "jar_sha256": "16a0212d06836af24b9b7d351de52406e456804ede7c302e4cb85c75d2b08acc", + "key": "roborumble/buba.Archivist_0.1.jar", + "kind": "robot" + }, + "latest_observation": "d18c23f855ed3f66", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5379.0, + "scores": [ + 2993.0, + 2386.0 + ], + "selected": "buba.Archivist 0.1" + }, + "completed_at": "2026-09-08T21:03:14Z", + "delta_pct": -9.6, + "id": "d18c23f855ed3f66", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4862.0, + "scores": [ + 3109.0, + 1753.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/buba.Buba_0.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "buba.Buba 0.3", + "division": "roborumble", + "jar": "buba.Buba_0.3.jar", + "jar_sha256": "ba2320e401f43470e16fa1253315b29b36047b22bac99ad62bed59bb014e1716", + "key": "roborumble/buba.Buba_0.3.jar", + "kind": "robot" + }, + "latest_observation": "92de0a656f602dca", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4975.0, + "scores": [ + 1731.0, + 3244.0 + ], + "selected": "buba.Buba 0.3" + }, + "completed_at": "2026-09-08T21:03:31Z", + "delta_pct": -19.0, + "id": "92de0a656f602dca", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4029.0, + "scores": [ + 2290.0, + 1739.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bumblebee.Bumblebee_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bumblebee.Bumblebee 1.0", + "division": "roborumble", + "jar": "bumblebee.Bumblebee_1.0.jar", + "jar_sha256": "13752cd9d2f4ffe2a675074b50ecca99b982f57bea36c1bac5e4f254cf0af9c5", + "key": "roborumble/bumblebee.Bumblebee_1.0.jar", + "kind": "robot" + }, + "latest_observation": "684d3891682e1261", + "observations": [ + { + "classic": { + "elapsed": 2.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7679.0, + "scores": [ + 3456.0, + 4223.0 + ], + "selected": "bumblebee.Bumblebee 1.0" + }, + "completed_at": "2026-09-08T21:03:46Z", + "delta_pct": 0.1, + "id": "684d3891682e1261", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7686.0, + "scores": [ + 3977.0, + 3709.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bvh.fnr.Fenrir_0.36l.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.fnr.Fenrir 0.36l", + "division": "roborumble", + "jar": "bvh.fnr.Fenrir_0.36l.jar", + "jar_sha256": "986ed898d1fa2556d204321e33139543a61c6ddda15b419b877cc7009e91b5d9", + "key": "roborumble/bvh.fnr.Fenrir_0.36l.jar", + "kind": "robot" + }, + "latest_observation": "c42dcc45e38dcd92", + "observations": [ + { + "classic": { + "elapsed": 3.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5899.0, + "scores": [ + 2726.0, + 3173.0 + ], + "selected": "bvh.fnr.Fenrir 0.36l" + }, + "completed_at": "2026-09-08T21:04:10Z", + "delta_pct": -7.8, + "id": "c42dcc45e38dcd92", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5440.0, + "scores": [ + 3191.0, + 2249.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bvh.frg.Friga_0.112dev.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.frg.Friga 0.112dev", + "division": "roborumble", + "jar": "bvh.frg.Friga_0.112dev.jar", + "jar_sha256": "a7bda40ea78e411a38c3d99bf52466b26ae5efe3df9dc432b48f6df388346d9f", + "key": "roborumble/bvh.frg.Friga_0.112dev.jar", + "kind": "robot" + }, + "latest_observation": "2c64749929672cae", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5674.0, + "scores": [ + 2831.0, + 2843.0 + ], + "selected": "bvh.frg.Friga 0.112dev" + }, + "completed_at": "2026-09-08T21:04:33Z", + "delta_pct": -9.2, + "id": "2c64749929672cae", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5151.0, + "scores": [ + 2893.0, + 2258.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bvh.fry.Freya_0.82.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.fry.Freya 0.82", + "division": "roborumble", + "jar": "bvh.fry.Freya_0.82.jar", + "jar_sha256": "2618ef3fb7cd8cb814b33be2531dc1e81661554362f93b29a80d1cce31f12fe5", + "key": "roborumble/bvh.fry.Freya_0.82.jar", + "kind": "robot" + }, + "latest_observation": "d32b1f5ce3e25f80", + "observations": [ + { + "classic": { + "elapsed": 6.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5546.0, + "scores": [ + 2606.0, + 2940.0 + ], + "selected": "bvh.fry.Freya 0.82" + }, + "completed_at": "2026-09-08T21:04:44Z", + "delta_pct": null, + "id": "d32b1f5ce3e25f80", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "inlezenInitialisatieBestand(): IOException bij inlezen data Freya.ini: java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\bvh.fry.Freya_0.82\\Freya.data\\Freya.ini (Den angivne fil blev ikke fundet)", + "inlezenInitialisatieBestand(): IOException bij inlezen data Freya.ini: java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\bvh.fry.Freya_0.82-2\\Freya.data\\Freya.ini (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/bvh.hdr.Hodur_0.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.hdr.Hodur 0.4", + "division": "roborumble", + "jar": "bvh.hdr.Hodur_0.4.jar", + "jar_sha256": "2bd6a9804697badcfad118f8c84db756b33cd9154144da4b19166f9f7caea94e", + "key": "roborumble/bvh.hdr.Hodur_0.4.jar", + "kind": "robot" + }, + "latest_observation": "bc89209e78a077fc", + "observations": [ + { + "classic": { + "elapsed": 6.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 1932.0, + "scores": [ + 1011.0, + 921.0 + ], + "selected": "bvh.hdr.Hodur 0.4" + }, + "completed_at": "2026-09-08T21:05:24Z", + "delta_pct": -37.2, + "id": "bc89209e78a077fc", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 34.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 1214.0, + "scores": [ + 681.0, + 533.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bvh.loki.Loki_0.5.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.loki.Loki 0.5", + "division": "roborumble", + "jar": "bvh.loki.Loki_0.5.jar", + "jar_sha256": "46f15811b1cbdfa571eca677320bd0efca497cfb6ed6b672e82f8c27dfb3f0c6", + "key": "roborumble/bvh.loki.Loki_0.5.jar", + "kind": "robot" + }, + "latest_observation": "c679e09780c18a52", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8924.0, + "scores": [ + 4303.0, + 4621.0 + ], + "selected": "bvh.loki.Loki 0.5" + }, + "completed_at": "2026-09-08T21:05:47Z", + "delta_pct": -47.3, + "id": "c679e09780c18a52", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4699.0, + "scores": [ + 2780.0, + 1919.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bvh.micro.Freya_0.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.micro.Freya 0.3", + "division": "roborumble", + "jar": "bvh.micro.Freya_0.3.jar", + "jar_sha256": "97868a0fa8ea022df4e19ae810f3a098da8c0d897ebd4564c1afe2b9f9002890", + "key": "roborumble/bvh.micro.Freya_0.3.jar", + "kind": "robot" + }, + "latest_observation": "2f1498ceffdac7e0", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5721.0, + "scores": [ + 2696.0, + 3025.0 + ], + "selected": "bvh.micro.Freya 0.3" + }, + "completed_at": "2026-09-08T21:06:12Z", + "delta_pct": -6.4, + "id": "2f1498ceffdac7e0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5354.0, + "scores": [ + 2752.0, + 2602.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bvh.micro.Svadilfari_0.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.micro.Svadilfari 0.2", + "division": "roborumble", + "jar": "bvh.micro.Svadilfari_0.2.jar", + "jar_sha256": "29e9fea32030a66e7c1be3582f3e06fb461d760fb0d4457b420d30ed0cb2b12a", + "key": "roborumble/bvh.micro.Svadilfari_0.2.jar", + "kind": "robot" + }, + "latest_observation": "4dadfc08d52161ce", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8232.0, + "scores": [ + 4101.0, + 4131.0 + ], + "selected": "bvh.micro.Svadilfari 0.2" + }, + "completed_at": "2026-09-08T21:06:31Z", + "delta_pct": 2.4, + "id": "4dadfc08d52161ce", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8430.0, + "scores": [ + 4518.0, + 3912.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bvh.mini.Fenrir_0.39.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.mini.Fenrir 0.39", + "division": "roborumble", + "jar": "bvh.mini.Fenrir_0.39.jar", + "jar_sha256": "3d63cdf11e5846c7e295db9c27965b84e7d1944b923d09979819f188700220a1", + "key": "roborumble/bvh.mini.Fenrir_0.39.jar", + "kind": "robot" + }, + "latest_observation": "ff57f8cea1909f17", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6512.0, + "scores": [ + 3618.0, + 2894.0 + ], + "selected": "bvh.mini.Fenrir 0.39" + }, + "completed_at": "2026-09-08T21:06:50Z", + "delta_pct": -11.2, + "id": "ff57f8cea1909f17", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5782.0, + "scores": [ + 3256.0, + 2526.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bvh.mini.Freya_0.55.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.mini.Freya 0.55", + "division": "roborumble", + "jar": "bvh.mini.Freya_0.55.jar", + "jar_sha256": "4a3e45054c437df7ac073756d18ff8b6cf67ab4f9f686484a325afdd455c4452", + "key": "roborumble/bvh.mini.Freya_0.55.jar", + "kind": "robot" + }, + "latest_observation": "815497cd00aa57b0", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5601.0, + "scores": [ + 2929.0, + 2672.0 + ], + "selected": "bvh.mini.Freya 0.55" + }, + "completed_at": "2026-09-08T21:07:13Z", + "delta_pct": -21.3, + "id": "815497cd00aa57b0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4407.0, + "scores": [ + 2423.0, + 1984.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bvh.mini.Mjolnir_0.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.mini.Mjolnir 0.3", + "division": "roborumble", + "jar": "bvh.mini.Mjolnir_0.3.jar", + "jar_sha256": "00db20570e2aebaf5d4ead68f922b93bf07d4b6620524ea9655f8e24a51e8641", + "key": "roborumble/bvh.mini.Mjolnir_0.3.jar", + "kind": "robot" + }, + "latest_observation": "3d1c3e239d06d795", + "observations": [ + { + "classic": { + "elapsed": 2.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9311.0, + "scores": [ + 4758.0, + 4553.0 + ], + "selected": "bvh.mini.Mjolnir 0.3" + }, + "completed_at": "2026-09-08T21:07:28Z", + "delta_pct": -26.4, + "id": "3d1c3e239d06d795", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6851.0, + "scores": [ + 5183.0, + 1668.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bvh.mini.Wodan_0.50.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.mini.Wodan 0.50", + "division": "roborumble", + "jar": "bvh.mini.Wodan_0.50.jar", + "jar_sha256": "ee38f593b18a05e2a8864301c15e9106be792d1ab51f6f7cb6df64eb1eb8b435", + "key": "roborumble/bvh.mini.Wodan_0.50.jar", + "kind": "robot" + }, + "latest_observation": "d89e8a196146f1ec", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7054.0, + "scores": [ + 2923.0, + 4131.0 + ], + "selected": "bvh.mini.Wodan 0.50" + }, + "completed_at": "2026-09-08T21:07:47Z", + "delta_pct": 7.0, + "id": "d89e8a196146f1ec", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7550.0, + "scores": [ + 3931.0, + 3619.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bvh.tyr.Tyr_1.74.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bvh.tyr.Tyr 1.74", + "division": "roborumble", + "jar": "bvh.tyr.Tyr_1.74.jar", + "jar_sha256": "9a05860b706454676778504df31631db93837f284afb17359b9ddec691bce34a", + "key": "roborumble/bvh.tyr.Tyr_1.74.jar", + "kind": "robot" + }, + "latest_observation": "f40bad8a5aff304f", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7879.0, + "scores": [ + 3920.0, + 3959.0 + ], + "selected": "bvh.tyr.Tyr 1.74" + }, + "completed_at": "2026-09-08T21:08:08Z", + "delta_pct": -24.8, + "id": "f40bad8a5aff304f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5923.0, + "scores": [ + 3174.0, + 2749.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bwbaugh.nano.Tirunculus_0.0.0a.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bwbaugh.nano.Tirunculus 0.0.0a", + "division": "roborumble", + "jar": "bwbaugh.nano.Tirunculus_0.0.0a.jar", + "jar_sha256": "d1fcb6072a0110947df39ad0db284f0fa4f229e7ef0f0d2502553ca0b2acb7d4", + "key": "roborumble/bwbaugh.nano.Tirunculus_0.0.0a.jar", + "kind": "robot" + }, + "latest_observation": "b935555308fc01c3", + "observations": [ + { + "classic": { + "elapsed": 2.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10796.0, + "scores": [ + 5699.0, + 5097.0 + ], + "selected": "bwbaugh.nano.Tirunculus 0.0.0a" + }, + "completed_at": "2026-09-08T21:08:20Z", + "delta_pct": 53.7, + "id": "b935555308fc01c3", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 10.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 16591.0, + "scores": [ + 8399.0, + 8192.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/bzdp.BoxCar_2.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bzdp.BoxCar 2.0", + "division": "roborumble", + "jar": "bzdp.BoxCar_2.0.jar", + "jar_sha256": "22e13c11b29fb3ed958288b38d67ab6ae02bd899f16ddcf96295f621e795ecb6", + "key": "roborumble/bzdp.BoxCar_2.0.jar", + "kind": "robot" + }, + "latest_observation": "67c108afb1e67978", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7919.0, + "scores": [ + 3893.0, + 4026.0 + ], + "selected": "bzdp.BoxCar 2.0" + }, + "completed_at": "2026-09-08T21:08:37Z", + "delta_pct": -9.8, + "id": "67c108afb1e67978", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7143.0, + "scores": [ + 4080.0, + 3063.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/bzdp.Pansy_2.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "bzdp.Pansy 2.1", + "division": "roborumble", + "jar": "bzdp.Pansy_2.1.jar", + "jar_sha256": "71057e19022678ba19a873854afb4bd32a986ae77c5105c79cb549ab664ff939", + "key": "roborumble/bzdp.Pansy_2.1.jar", + "kind": "robot" + }, + "latest_observation": "a96b223336b776df", + "observations": [ + { + "classic": { + "elapsed": 2.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7852.0, + "scores": [ + 3771.0, + 4081.0 + ], + "selected": "bzdp.Pansy 2.1" + }, + "completed_at": "2026-09-08T21:08:54Z", + "delta_pct": -1.3, + "id": "a96b223336b776df", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7749.0, + "scores": [ + 4975.0, + 2774.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/caimano.Furia_Ceca_0.22.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "caimano.Furia_Ceca 0.22", + "division": "roborumble", + "jar": "caimano.Furia_Ceca_0.22.jar", + "jar_sha256": "c1ce5bbf430fe9edc12da1768284be6f3d5bc35a9f48c84819f21edd32241616", + "key": "roborumble/caimano.Furia_Ceca_0.22.jar", + "kind": "robot" + }, + "latest_observation": "99d4763f956857c8", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5715.0, + "scores": [ + 2046.0, + 3669.0 + ], + "selected": "caimano.Furia_Ceca 0.22" + }, + "completed_at": "2026-09-08T21:09:08Z", + "delta_pct": -45.5, + "id": "99d4763f956857c8", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3115.0, + "scores": [ + 1628.0, + 1487.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/casey.Flee_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "casey.Flee 1.0", + "division": "roborumble", + "jar": "casey.Flee_1.0.jar", + "jar_sha256": "5edafd751bd0f81632eecb11ea74c9bfbf3eb3b2c8e4aead9eaf7ec7cd41aecc", + "key": "roborumble/casey.Flee_1.0.jar", + "kind": "robot" + }, + "latest_observation": "ad19841f89469280", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4964.0, + "scores": [ + 2442.0, + 2522.0 + ], + "selected": "casey.Flee 1.0" + }, + "completed_at": "2026-09-08T21:09:27Z", + "delta_pct": -5.1, + "id": "ad19841f89469280", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4710.0, + "scores": [ + 2584.0, + 2126.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cb.Domogled_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cb.Domogled 1.2", + "division": "roborumble", + "jar": "cb.Domogled_1.2.jar", + "jar_sha256": "75c374c61a80c5606d1ecd1220d80d663497eef1618b9a80f112c41e5b81e70a", + "key": "roborumble/cb.Domogled_1.2.jar", + "kind": "robot" + }, + "latest_observation": "ab4a97816c447d60", + "observations": [ + { + "classic": { + "elapsed": 18.3, + "error_count": 1, + "errors": [ + "Unable to stop thread: cb.Domogled 1.2 (2)" + ], + "has_log": true, + "ok": true, + "score": 4626.0, + "scores": [ + 2097.0, + 2529.0 + ], + "selected": "cb.Domogled 1.2" + }, + "completed_at": "2026-09-08T21:09:50Z", + "delta_pct": null, + "id": "ab4a97816c447d60", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.1, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.NullPointerException: Cannot read field \"location\" because \"this.myState\" is null", + "java.lang.NullPointerException: Cannot read field \"location\" because \"this.myState\" is null" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/cb.fire.Firestarter_2.0f.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cb.fire.Firestarter 2.0f", + "division": "roborumble", + "jar": "cb.fire.Firestarter_2.0f.jar", + "jar_sha256": "de45410b59fea6b8fad9463ece161e1e1656960129f1b9bc84791137d788325f", + "key": "roborumble/cb.fire.Firestarter_2.0f.jar", + "kind": "robot" + }, + "latest_observation": "2002e30ad998c641", + "observations": [ + { + "classic": { + "elapsed": 65.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4553.0, + "scores": [ + 2228.0, + 2325.0 + ], + "selected": "cb.fire.Firestarter 2.0f" + }, + "completed_at": "2026-09-08T21:10:59Z", + "delta_pct": null, + "id": "2002e30ad998c641", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Rectangle2D$Double.contains(java.awt.geom.Point2D)\" because \"this.atan2\" is null", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Rectangle2D$Double.contains(java.awt.geom.Point2D)\" because \"this.atan2\" is null" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/cb.mega.RandomBot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cb.mega.RandomBot 1.0", + "division": "roborumble", + "jar": "cb.mega.RandomBot_1.0.jar", + "jar_sha256": "34a1049d295fe3ae436785ef0ba1e74824f059c4b2478b9975522c1698816285", + "key": "roborumble/cb.mega.RandomBot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "55bade0feb6ac865", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6116.0, + "scores": [ + 3139.0, + 2977.0 + ], + "selected": "cb.mega.RandomBot 1.0" + }, + "completed_at": "2026-09-08T21:11:07Z", + "delta_pct": null, + "id": "55bade0feb6ac865", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.NullPointerException: Cannot invoke \"java.util.ArrayList.iterator()\" because \"cb.mega.ComponentRobot.append\" is null", + "java.lang.NullPointerException: Cannot invoke \"java.util.ArrayList.iterator()\" because \"cb.mega.ComponentRobot.append\" is null" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/cb.nano.Insomnia_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cb.nano.Insomnia 1.0", + "division": "roborumble", + "jar": "cb.nano.Insomnia_1.0.jar", + "jar_sha256": "dfaa0b7522185985faaaad2c8c8761b56ed6b2e31f9d256de0abbcf466863d30", + "key": "roborumble/cb.nano.Insomnia_1.0.jar", + "kind": "robot" + }, + "latest_observation": "997241f811003c48", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2400.0, + "scores": [ + 1122.0, + 1278.0 + ], + "selected": "cb.nano.Insomnia 1.0" + }, + "completed_at": "2026-09-08T21:11:30Z", + "delta_pct": 14.0, + "id": "997241f811003c48", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2736.0, + "scores": [ + 1421.0, + 1315.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cbot.agile.Nibbler_0.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cbot.agile.Nibbler 0.2", + "division": "roborumble", + "jar": "cbot.agile.Nibbler_0.2.jar", + "jar_sha256": "b1b79c3c45f03c2098bee75bd1c379e51b8e45f66418b0ac15a9e9747fef1689", + "key": "roborumble/cbot.agile.Nibbler_0.2.jar", + "kind": "robot" + }, + "latest_observation": "50feb7c195d9d53e", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 3, + "errors": [ + "java.lang.NullPointerException: Cannot invoke \"cbot.agile.Pray.getDistance()\" because \"pray\" is null", + "java.lang.NullPointerException: Cannot invoke \"cbot.agile.Pray.getDistance()\" because \"pray\" is null", + "java.lang.NullPointerException: Cannot invoke \"cbot.agile.Pray.getDistance()\" because \"pray\" is null" + ], + "has_log": true, + "ok": true, + "score": 5348.0, + "scores": [ + 2800.0, + 2548.0 + ], + "selected": "cbot.agile.Nibbler 0.2" + }, + "completed_at": "2026-09-08T21:11:48Z", + "delta_pct": 31.5, + "id": "50feb7c195d9d53e", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7030.0, + "scores": [ + 3730.0, + 3300.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/cbot.cbot.CBot_0.8.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cbot.cbot.CBot 0.8", + "division": "roborumble", + "jar": "cbot.cbot.CBot_0.8.jar", + "jar_sha256": "96f2840bf8bb3ecd5dcd7c8079cf0bc0d2a9a6ddfd4da5cb2e7a520b7c6a2ffc", + "key": "roborumble/cbot.cbot.CBot_0.8.jar", + "kind": "robot" + }, + "latest_observation": "7337304cd84cf9c0", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5878.0, + "scores": [ + 3222.0, + 2656.0 + ], + "selected": "cbot.cbot.CBot 0.8" + }, + "completed_at": "2026-09-08T21:11:57Z", + "delta_pct": null, + "id": "7337304cd84cf9c0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 6.1, + "error_count": 2, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.NullPointerException: Cannot invoke \"cbot.cbot.Pray.getHittingRates()\" because \"this.currentPray\" is null" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/cf.OldMan.OldManXP_0.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cf.OldMan.OldManXP 0.1", + "division": "roborumble", + "jar": "cf.OldMan.OldManXP_0.1.jar", + "jar_sha256": "463822efc7f7fec009495fb2395ad09b36b081119df3e18d3b5044d58a562ce5", + "key": "roborumble/cf.OldMan.OldManXP_0.1.jar", + "kind": "robot" + }, + "latest_observation": "f54923f1b67ca9f0", + "observations": [ + { + "classic": { + "elapsed": 3.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10602.0, + "scores": [ + 5036.0, + 5566.0 + ], + "selected": "cf.OldMan.OldManXP 0.1" + }, + "completed_at": "2026-09-08T21:12:34Z", + "delta_pct": -10.1, + "id": "f54923f1b67ca9f0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9531.0, + "scores": [ + 4804.0, + 4727.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cf.mini.Chiva_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cf.mini.Chiva 1.0", + "division": "roborumble", + "jar": "cf.mini.Chiva_1.0.jar", + "jar_sha256": "a0aef88f5c5fa4d6542a4e56c1576efb911d6bebb70da9676582c51bcef3c688", + "key": "roborumble/cf.mini.Chiva_1.0.jar", + "kind": "robot" + }, + "latest_observation": "336aaa29d4d4cb86", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5151.0, + "scores": [ + 2301.0, + 2850.0 + ], + "selected": "cf.mini.Chiva 1.0" + }, + "completed_at": "2026-09-08T21:12:18Z", + "delta_pct": -8.7, + "id": "336aaa29d4d4cb86", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4703.0, + "scores": [ + 2536.0, + 2167.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cf.proto.Shiva_2.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cf.proto.Shiva 2.2", + "division": "roborumble", + "jar": "cf.proto.Shiva_2.2.jar", + "jar_sha256": "b56a27faf5dcfcd10fa25ea0b3d1dd9bedb48eea0bf5e38e8ecb89b339827f61", + "key": "roborumble/cf.proto.Shiva_2.2.jar", + "kind": "robot" + }, + "latest_observation": "92716decc58e938d", + "observations": [ + { + "classic": { + "elapsed": 5.5, + "error_count": 2, + "errors": [ + "Error while reading:java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\rc-robots\\.data\\cf\\proto\\Shiva.data\\cf.proto.Shiva 2.2 (2).txt.gz (Den angivne fil blev ikke fundet)", + "Error while reading:java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\rc-robots\\.data\\cf\\proto\\Shiva.data\\cf.proto.Shiva 2.2 (1).txt.gz (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": true, + "score": 4670.0, + "scores": [ + 2328.0, + 2342.0 + ], + "selected": "cf.proto.Shiva 2.2" + }, + "completed_at": "2026-09-08T21:16:01Z", + "delta_pct": -5.2, + "id": "92716decc58e938d", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 2, + "errors": [ + "Error while reading:java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\cf.proto.Shiva_2.2\\Shiva.data\\1.txt.gz (Den angivne fil blev ikke fundet)", + "Error while reading:java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\cf.proto.Shiva_2.2-2\\Shiva.data\\2.txt.gz (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": true, + "score": 4427.0, + "scores": [ + 2362.0, + 2065.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cf.star.Star2_1.23.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cf.star.Star2 1.23", + "division": "roborumble", + "jar": "cf.star.Star2_1.23.jar", + "jar_sha256": "d1d945c1450132a1a072cb08465db641b83af579d8339115641632aa6e670a4e", + "key": "roborumble/cf.star.Star2_1.23.jar", + "kind": "robot" + }, + "latest_observation": "8c06e2125b4e11c4", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5134.0, + "scores": [ + 2598.0, + 2536.0 + ], + "selected": "cf.star.Star2 1.23" + }, + "completed_at": "2026-09-08T21:16:20Z", + "delta_pct": 17.8, + "id": "8c06e2125b4e11c4", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6047.0, + "scores": [ + 4090.0, + 1957.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/ch.rhj.rbc.RHJ1_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "ch.rhj.rbc.RHJ1 1.0", + "division": "roborumble", + "jar": "ch.rhj.rbc.RHJ1_1.0.jar", + "jar_sha256": "f45cba75cecd9459729641dab9cfc9830853d855888acbf42b612f74234e566d", + "key": "roborumble/ch.rhj.rbc.RHJ1_1.0.jar", + "kind": "robot" + }, + "latest_observation": "09fc48a0219093cf", + "observations": [ + { + "classic": { + "elapsed": 3.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12947.0, + "scores": [ + 6393.0, + 6554.0 + ], + "selected": "ch.rhj.rbc.RHJ1 1.0" + }, + "completed_at": "2026-09-08T21:16:56Z", + "delta_pct": 0.5, + "id": "09fc48a0219093cf", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 32.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 13008.0, + "scores": [ + 6950.0, + 6058.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/chase.pm.Pytko_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "chase.pm.Pytko 1.0", + "division": "roborumble", + "jar": "chase.pm.Pytko_1.0.jar", + "jar_sha256": "0bf2f81bd9c5ff44bcb27f2ce214eb769f1c7d2b91ad83a3880e8a17d0f193f3", + "key": "roborumble/chase.pm.Pytko_1.0.jar", + "kind": "robot" + }, + "latest_observation": "5621c60c56abe7ae", + "observations": [ + { + "classic": { + "elapsed": 4.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4950.0, + "scores": [ + 2163.0, + 2787.0 + ], + "selected": "chase.pm.Pytko 1.0" + }, + "completed_at": "2026-09-08T21:17:44Z", + "delta_pct": -5.2, + "id": "5621c60c56abe7ae", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4692.0, + "scores": [ + 2644.0, + 2048.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/chickenfuego.UrChicken2_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "chickenfuego.UrChicken2 1.0", + "division": "roborumble", + "jar": "chickenfuego.UrChicken2_1.0.jar", + "jar_sha256": "a56a6d6bbeae72501cb86c35621436e91b31686db0785cd3151512452bdf818f", + "key": "roborumble/chickenfuego.UrChicken2_1.0.jar", + "kind": "robot" + }, + "latest_observation": "ac7ec21a2a822b4f", + "observations": [ + { + "classic": { + "elapsed": 5.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5804.0, + "scores": [ + 2824.0, + 2980.0 + ], + "selected": "chickenfuego.UrChicken2 1.0" + }, + "completed_at": "2026-09-08T21:18:36Z", + "delta_pct": -8.7, + "id": "ac7ec21a2a822b4f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 46.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5300.0, + "scores": [ + 2887.0, + 2413.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cjk.Merkava_0.1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cjk.Merkava 0.1.1", + "division": "roborumble", + "jar": "cjk.Merkava_0.1.1.jar", + "jar_sha256": "5a16d1a4eaa4437b1552185a75d121a8153985febc5d3d215f94fc93dbd3f094", + "key": "roborumble/cjk.Merkava_0.1.1.jar", + "kind": "robot" + }, + "latest_observation": "ca8bad284ef8d30e", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5678.0, + "scores": [ + 2936.0, + 2742.0 + ], + "selected": "cjk.Merkava 0.1.1" + }, + "completed_at": "2026-09-08T21:18:55Z", + "delta_pct": -24.1, + "id": "ca8bad284ef8d30e", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4311.0, + "scores": [ + 2343.0, + 1968.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cjm.Che_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cjm.Che 1.2", + "division": "roborumble", + "jar": "cjm.Che_1.2.jar", + "jar_sha256": "490b1e9e8d36ca42f225dd9cd2bd2033c9dee27ef24d71e2396e5eec5ae4565b", + "key": "roborumble/cjm.Che_1.2.jar", + "kind": "robot" + }, + "latest_observation": "30b3c8b16bb49f75", + "observations": [ + { + "classic": { + "elapsed": 2.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5896.0, + "scores": [ + 3080.0, + 2816.0 + ], + "selected": "cjm.Che 1.2" + }, + "completed_at": "2026-09-08T21:19:16Z", + "delta_pct": -8.2, + "id": "30b3c8b16bb49f75", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5415.0, + "scores": [ + 3077.0, + 2338.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cli.Dancer_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cli.Dancer 1.1", + "division": "roborumble", + "jar": "cli.Dancer_1.1.jar", + "jar_sha256": "6126e668dd994c5d3b47f50cad7e28313ad0b67ef1d5def7746846a35de8e07b", + "key": "roborumble/cli.Dancer_1.1.jar", + "kind": "robot" + }, + "latest_observation": "75019a166932d5c2", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6556.0, + "scores": [ + 3859.0, + 2697.0 + ], + "selected": "cli.Dancer 1.1" + }, + "completed_at": "2026-09-08T21:19:35Z", + "delta_pct": 9.7, + "id": "75019a166932d5c2", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7189.0, + "scores": [ + 3657.0, + 3532.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cli.WasteOfAmmo_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cli.WasteOfAmmo 1.0", + "division": "roborumble", + "jar": "cli.WasteOfAmmo_1.0.jar", + "jar_sha256": "c899395217eb5b9a8c9bdcd3e8869616ec23576e787e4ce3e2c7c3263695b36f", + "key": "roborumble/cli.WasteOfAmmo_1.0.jar", + "kind": "robot" + }, + "latest_observation": "ad72f39287f5b880", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 0.0, + "scores": [ + 0.0, + 0.0 + ], + "selected": "cli.WasteOfAmmo 1.0" + }, + "completed_at": "2026-09-08T21:19:58Z", + "delta_pct": null, + "id": "ad72f39287f5b880", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (no score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 1380.0, + "scores": [ + 840.0, + 540.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (no score)" + }, + "roborumble/codemojo.nano.Woot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "codemojo.nano.Woot 1.0", + "division": "roborumble", + "jar": "codemojo.nano.Woot_1.0.jar", + "jar_sha256": "7f635dc2e4809d680d0bef2e71454a61c03051e0385ec3e11af10105b694c3d6", + "key": "roborumble/codemojo.nano.Woot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "ec2f186e76fabdbc", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4048.0, + "scores": [ + 2085.0, + 1963.0 + ], + "selected": "codemojo.nano.Woot 1.0" + }, + "completed_at": "2026-09-08T21:20:15Z", + "delta_pct": -2.7, + "id": "ec2f186e76fabdbc", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3939.0, + "scores": [ + 2031.0, + 1908.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/com.arsenic.NewTest_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "com.arsenic.NewTest 1.0", + "division": "roborumble", + "jar": "com.arsenic.NewTest_1.0.jar", + "jar_sha256": "0a5a9d382489ace685399cf9c5d709daa70f7e545ac85d54a1b0e81bf7d3a412", + "key": "roborumble/com.arsenic.NewTest_1.0.jar", + "kind": "robot" + }, + "latest_observation": "bec9ffc1e65a95d1", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 10, + "errors": [ + "SYSTEM: java.lang.ArrayIndexOutOfBoundsException occurred on robocode.BulletHitEvent", + "java.lang.ArrayIndexOutOfBoundsException: Index -47 out of bounds for length 2", + "SYSTEM: java.lang.ArrayIndexOutOfBoundsException occurred on robocode.BulletHitEvent", + "java.lang.ArrayIndexOutOfBoundsException: Index -47 out of bounds for length 2", + "SYSTEM: java.lang.ArrayIndexOutOfBoundsException occurred on robocode.BulletHitEvent", + "java.lang.ArrayIndexOutOfBoundsException: Index -93 out of bounds for length 2", + "SYSTEM: java.lang.ArrayIndexOutOfBoundsException occurred on robocode.BulletHitEvent", + "java.lang.ArrayIndexOutOfBoundsException: Index -53 out of bounds for length 2", + "SYSTEM: java.lang.ArrayIndexOutOfBoundsException occurred on robocode.BulletMissedEvent", + "java.lang.ArrayIndexOutOfBoundsException: Index -47 out of bounds for length 2" + ], + "has_log": true, + "ok": true, + "score": 6336.0, + "scores": [ + 2876.0, + 3460.0 + ], + "selected": "com.arsenic.NewTest 1.0" + }, + "completed_at": "2026-09-08T21:20:32Z", + "delta_pct": 0.3, + "id": "bec9ffc1e65a95d1", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6352.0, + "scores": [ + 3403.0, + 2949.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/com.blogspot.malinkody.DestrobotMalin_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "com.blogspot.malinkody.DestrobotMalin 1.0", + "division": "roborumble", + "jar": "com.blogspot.malinkody.DestrobotMalin_1.0.jar", + "jar_sha256": "d3205656d01007c800f5fa5549d247aa7030a40380277752ecd590e091339c27", + "key": "roborumble/com.blogspot.malinkody.DestrobotMalin_1.0.jar", + "kind": "robot" + }, + "latest_observation": "41f11a8de1bd0c5b", + "observations": [ + { + "classic": { + "elapsed": 3.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7820.0, + "scores": [ + 3673.0, + 4147.0 + ], + "selected": "com.blogspot.malinkody.DestrobotMalin 1.0" + }, + "completed_at": "2026-09-08T21:21:03Z", + "delta_pct": -58.8, + "id": "41f11a8de1bd0c5b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3218.0, + "scores": [ + 1747.0, + 1471.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/com.cohesiva.robocode.ManOwaR_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "com.cohesiva.robocode.ManOwaR 1.0", + "division": "roborumble", + "jar": "com.cohesiva.robocode.ManOwaR_1.0.jar", + "jar_sha256": "46519fab7d639e4d0a64afdd133618e92b7dcd923b8f252325098cc4a0e9031e", + "key": "roborumble/com.cohesiva.robocode.ManOwaR_1.0.jar", + "kind": "robot" + }, + "latest_observation": "b68f0a69b507a3fe", + "observations": [ + { + "classic": { + "elapsed": 3.3, + "error_count": 4, + "errors": [ + "SYSTEM: java.lang.IllegalArgumentException occurred on robocode.HitByBulletEvent", + "java.lang.IllegalArgumentException: bound must be positive", + "SYSTEM: java.lang.IllegalArgumentException occurred on robocode.HitByBulletEvent", + "java.lang.IllegalArgumentException: bound must be positive" + ], + "has_log": true, + "ok": true, + "score": 4856.0, + "scores": [ + 2550.0, + 2306.0 + ], + "selected": "com.cohesiva.robocode.ManOwaR 1.0" + }, + "completed_at": "2026-09-08T21:21:39Z", + "delta_pct": 0.4, + "id": "b68f0a69b507a3fe", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 32.0, + "error_count": 1, + "errors": [ + "java.lang.IllegalArgumentException: bound must be positive" + ], + "has_log": true, + "ok": true, + "score": 4873.0, + "scores": [ + 2446.0, + 2427.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/com.sociesc.T1000_1.0.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "com.sociesc.T1000 1.0.0", + "division": "roborumble", + "jar": "com.sociesc.T1000_1.0.0.jar", + "jar_sha256": "4398cb800fc016f19b0a9841c795e5bdf33ab65beaff628759abf81ce711732f", + "key": "roborumble/com.sociesc.T1000_1.0.0.jar", + "kind": "robot" + }, + "latest_observation": "c50ef80274e4a320", + "observations": [ + { + "classic": { + "elapsed": 3.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 0.0, + "scores": [ + 0.0, + 0.0 + ], + "selected": "com.sociesc.T1000 1.0.0" + }, + "completed_at": "2026-09-08T21:22:15Z", + "delta_pct": null, + "id": "c50ef80274e4a320", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (no score)", + "tank_royale": { + "elapsed": 32.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 362.0, + "scores": [ + 181.0, + 181.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (no score)" + }, + "roborumble/com.spp.robocode.MostlyHarmless_010.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "com.spp.robocode.MostlyHarmless 010", + "division": "roborumble", + "jar": "com.spp.robocode.MostlyHarmless_010.jar", + "jar_sha256": "79e3073e986fc6cdf59da91bb4f2b4c271770c7b31600fd2eafebb20bfca2710", + "key": "roborumble/com.spp.robocode.MostlyHarmless_010.jar", + "kind": "robot" + }, + "latest_observation": "7f12b894b7bb568c", + "observations": [ + { + "classic": { + "elapsed": 3.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7087.0, + "scores": [ + 3817.0, + 3270.0 + ], + "selected": "com.spp.robocode.MostlyHarmless 010" + }, + "completed_at": "2026-09-08T21:22:39Z", + "delta_pct": 0.5, + "id": "7f12b894b7bb568c", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7123.0, + "scores": [ + 3634.0, + 3489.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/com.syncleus.robocode.Dreadnaught_0.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "com.syncleus.robocode.Dreadnaught 0.1", + "division": "roborumble", + "jar": "com.syncleus.robocode.Dreadnaught_0.1.jar", + "jar_sha256": "4a2a9926375fca4cf32ea72bdc8ab43930223f2090bae428474eafb9a6dd823c", + "key": "roborumble/com.syncleus.robocode.Dreadnaught_0.1.jar", + "kind": "robot" + }, + "latest_observation": "f963f02cb575c278", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12138.0, + "scores": [ + 5649.0, + 6489.0 + ], + "selected": "com.syncleus.robocode.Dreadnaught 0.1" + }, + "completed_at": "2026-09-08T21:22:56Z", + "delta_pct": 1.2, + "id": "f963f02cb575c278", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12285.0, + "scores": [ + 6150.0, + 6135.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/com.timothyveletta.FuzzyBot_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "com.timothyveletta.FuzzyBot 1.1", + "division": "roborumble", + "jar": "com.timothyveletta.FuzzyBot_1.1.jar", + "jar_sha256": "4d2003ddcb53060505ae0c6c32b74ed389da21f047faba64f6fe03bb9488fa37", + "key": "roborumble/com.timothyveletta.FuzzyBot_1.1.jar", + "kind": "robot" + }, + "latest_observation": "f3979e1d91165e7b", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8421.0, + "scores": [ + 4238.0, + 4183.0 + ], + "selected": "com.timothyveletta.FuzzyBot 1.1" + }, + "completed_at": "2026-09-08T21:23:13Z", + "delta_pct": -3.5, + "id": "f3979e1d91165e7b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8126.0, + "scores": [ + 4244.0, + 3882.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/conscience.Bulldozer_1.0a.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "conscience.Bulldozer 1.0a", + "division": "roborumble", + "jar": "conscience.Bulldozer_1.0a.jar", + "jar_sha256": "f822506ece11632ca21436cfede847408f696140c474ae3b35e25187fbe27875", + "key": "roborumble/conscience.Bulldozer_1.0a.jar", + "kind": "robot" + }, + "latest_observation": "34ee10313f50e735", + "observations": [ + { + "classic": { + "elapsed": 2.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10965.0, + "scores": [ + 5873.0, + 5092.0 + ], + "selected": "conscience.Bulldozer 1.0a" + }, + "completed_at": "2026-09-08T21:23:25Z", + "delta_pct": 51.2, + "id": "34ee10313f50e735", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 10.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 16581.0, + "scores": [ + 8305.0, + 8276.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/conscience.Electron_1.3g.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "conscience.Electron 1.3g", + "division": "roborumble", + "jar": "conscience.Electron_1.3g.jar", + "jar_sha256": "a8d12ab9530cd0f748593ac3d04cd2cf0b563713905457257c3395b7ab7aaf9b", + "key": "roborumble/conscience.Electron_1.3g.jar", + "kind": "robot" + }, + "latest_observation": "60e25212f69814cd", + "observations": [ + { + "classic": { + "elapsed": 3.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8619.0, + "scores": [ + 4673.0, + 3946.0 + ], + "selected": "conscience.Electron 1.3g" + }, + "completed_at": "2026-09-08T21:23:43Z", + "delta_pct": 6.9, + "id": "60e25212f69814cd", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9213.0, + "scores": [ + 4903.0, + 4310.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/conscience.Idem_1.0a.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "conscience.Idem 1.0a", + "division": "roborumble", + "jar": "conscience.Idem_1.0a.jar", + "jar_sha256": "1635ea6692d7c89d41d0e089fced55ac334f24f429380fb686590ca58cecfb2d", + "key": "roborumble/conscience.Idem_1.0a.jar", + "kind": "robot" + }, + "latest_observation": "2c5f75820a136af0", + "observations": [ + { + "classic": { + "elapsed": 8.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9441.0, + "scores": [ + 4317.0, + 5124.0 + ], + "selected": "conscience.Idem 1.0a" + }, + "completed_at": "2026-09-08T21:26:24Z", + "delta_pct": -19.8, + "id": "2c5f75820a136af0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 152.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7569.0, + "scores": [ + 4064.0, + 3505.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/conscience.Suicidal_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "conscience.Suicidal 1.1", + "division": "roborumble", + "jar": "conscience.Suicidal_1.1.jar", + "jar_sha256": "4650b8e8b5705e0fafb87fb4ffdcda77597f168c7c1c9272abae80691ad4f3d6", + "key": "roborumble/conscience.Suicidal_1.1.jar", + "kind": "robot" + }, + "latest_observation": "126c32b41d68f5f3", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 0.0, + "scores": [ + 0.0, + 0.0 + ], + "selected": "conscience.Suicidal 1.1" + }, + "completed_at": "2026-09-08T21:26:39Z", + "delta_pct": null, + "id": "126c32b41d68f5f3", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (no score)", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2100.0, + "scores": [ + 1260.0, + 840.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (no score)" + }, + "roborumble/cre.Karolos_0.32.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cre.Karolos 0.32", + "division": "roborumble", + "jar": "cre.Karolos_0.32.jar", + "jar_sha256": "9d35fbbe7c3c3a2d325d49028ea3c4be40906f0f5e919a49dd46f66ca734e7ca", + "key": "roborumble/cre.Karolos_0.32.jar", + "kind": "robot" + }, + "latest_observation": "0c5b559772cf4ee1", + "observations": [ + { + "classic": { + "elapsed": 9.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6626.0, + "scores": [ + 3289.0, + 3337.0 + ], + "selected": "cre.Karolos 0.32" + }, + "completed_at": "2026-09-08T21:26:53Z", + "delta_pct": null, + "id": "0c5b559772cf4ee1", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 370, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null", + "java.lang.NullPointerException: Cannot invoke \"cre.e.e()\" because the return value of \"cre.e.a(long)\" is null" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/cs.Nene_1.0.5.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cs.Nene 1.0.5", + "division": "roborumble", + "jar": "cs.Nene_1.0.5.jar", + "jar_sha256": "9615be8f8f2bdf4f42a38f74b4b81d0944e86f06311582915a78af06d529e856", + "key": "roborumble/cs.Nene_1.0.5.jar", + "kind": "robot" + }, + "latest_observation": "77f6703bbf53891a", + "observations": [ + { + "classic": { + "elapsed": 11.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4672.0, + "scores": [ + 2424.0, + 2248.0 + ], + "selected": "cs.Nene 1.0.5" + }, + "completed_at": "2026-09-08T21:27:36Z", + "delta_pct": -100.0, + "id": "77f6703bbf53891a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 32.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 0.0, + "scores": [ + 0.0, + 0.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/cs.PumpkinPie_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cs.PumpkinPie 1.0", + "division": "roborumble", + "jar": "cs.PumpkinPie_1.0.jar", + "jar_sha256": "d395a080e3bfff0c30871bb5f5b255b824f5da4a72f4b0f77bab84cd8a9278fa", + "key": "roborumble/cs.PumpkinPie_1.0.jar", + "kind": "robot" + }, + "latest_observation": "90e4313a94769aff", + "observations": [ + { + "classic": { + "elapsed": 10.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4960.0, + "scores": [ + 2852.0, + 2108.0 + ], + "selected": "cs.PumpkinPie 1.0" + }, + "completed_at": "2026-09-08T21:28:17Z", + "delta_pct": -3.4, + "id": "90e4313a94769aff", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 30.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4790.0, + "scores": [ + 2664.0, + 2126.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cs.Wren_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cs.Wren 1.0", + "division": "roborumble", + "jar": "cs.Wren_1.0.jar", + "jar_sha256": "89f30ea0d295bbc4516e9dad72426663fdf68707b2c733555e408c35679770ea", + "key": "roborumble/cs.Wren_1.0.jar", + "kind": "robot" + }, + "latest_observation": "c9973e9dd44d5919", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7915.0, + "scores": [ + 4387.0, + 3528.0 + ], + "selected": "cs.Wren 1.0" + }, + "completed_at": "2026-09-08T21:29:04Z", + "delta_pct": -4.4, + "id": "c9973e9dd44d5919", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7564.0, + "scores": [ + 4552.0, + 3012.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cs.s2.Seraphim_2.3.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cs.s2.Seraphim 2.3.1", + "division": "roborumble", + "jar": "cs.s2.Seraphim_2.3.1.jar", + "jar_sha256": "d5bc11f229b5e2727bae6f8065251ed72bb0cc51ce900684183832c9e45a9845", + "key": "roborumble/cs.s2.Seraphim_2.3.1.jar", + "kind": "robot" + }, + "latest_observation": "de2ae85b37c1610b", + "observations": [ + { + "classic": { + "elapsed": 4.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4910.0, + "scores": [ + 2613.0, + 2297.0 + ], + "selected": "cs.s2.Seraphim 2.3.1" + }, + "completed_at": "2026-09-08T21:28:42Z", + "delta_pct": -0.1, + "id": "de2ae85b37c1610b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4904.0, + "scores": [ + 2519.0, + 2385.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/csm.NthGeneration_0.04.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "csm.NthGeneration 0.04", + "division": "roborumble", + "jar": "csm.NthGeneration_0.04.jar", + "jar_sha256": "e7b92a77f2fe7f2c8c1cd2d4a90529f8c66551770a6f2d176b628217593226a4", + "key": "roborumble/csm.NthGeneration_0.04.jar", + "kind": "robot" + }, + "latest_observation": "e8bab6b8456b7c4a", + "observations": [ + { + "classic": { + "elapsed": 3.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4659.0, + "scores": [ + 2071.0, + 2588.0 + ], + "selected": "csm.NthGeneration 0.04" + }, + "completed_at": "2026-09-08T21:29:45Z", + "delta_pct": -5.0, + "id": "e8bab6b8456b7c4a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 38.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4426.0, + "scores": [ + 2381.0, + 2045.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/csp.Eagle_3.30.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "csp.Eagle 3.30", + "division": "roborumble", + "jar": "csp.Eagle_3.30.jar", + "jar_sha256": "8a09a1ad3e1e4eb01f84d98868d26db8c0e58b4900ca41ddc93ddf13a56fbcce", + "key": "roborumble/csp.Eagle_3.30.jar", + "kind": "robot" + }, + "latest_observation": "e0122d77dc924a71", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7114.0, + "scores": [ + 3203.0, + 3911.0 + ], + "selected": "csp.Eagle 3.30" + }, + "completed_at": "2026-09-08T21:30:04Z", + "delta_pct": -37.0, + "id": "e0122d77dc924a71", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4484.0, + "scores": [ + 2376.0, + 2108.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/css.Delitioner_0.11.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "css.Delitioner 0.11", + "division": "roborumble", + "jar": "css.Delitioner_0.11.jar", + "jar_sha256": "6c718a72f59cec4464649d650469adfcccaf0de0744d7fd3e3ef7a2c5ce28c0b", + "key": "roborumble/css.Delitioner_0.11.jar", + "kind": "robot" + }, + "latest_observation": "9bf3a4bffbd5125f", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6253.0, + "scores": [ + 2997.0, + 3256.0 + ], + "selected": "css.Delitioner 0.11" + }, + "completed_at": "2026-09-08T21:30:27Z", + "delta_pct": -5.4, + "id": "9bf3a4bffbd5125f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5916.0, + "scores": [ + 2995.0, + 2921.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cuoq.Kakera_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cuoq.Kakera 1.0", + "division": "roborumble", + "jar": "cuoq.Kakera_1.0.jar", + "jar_sha256": "8e7d78ebb335e16e126036e8f66bc9a751c3059f0a310ebd5bf9b930a517b60b", + "key": "roborumble/cuoq.Kakera_1.0.jar", + "kind": "robot" + }, + "latest_observation": "99a4b47c6b169333", + "observations": [ + { + "classic": { + "elapsed": 5.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6875.0, + "scores": [ + 3376.0, + 3499.0 + ], + "selected": "cuoq.Kakera 1.0" + }, + "completed_at": "2026-09-08T21:30:59Z", + "delta_pct": -10.6, + "id": "99a4b47c6b169333", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 26.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6144.0, + "scores": [ + 3173.0, + 2971.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cw.megas.Blade_0.8.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cw.megas.Blade 0.8", + "division": "roborumble", + "jar": "cw.megas.Blade_0.8.jar", + "jar_sha256": "4a50333c16fd0bdc02aca8c152e7017ede5c8e763ceaba42319867a5b256f830", + "key": "roborumble/cw.megas.Blade_0.8.jar", + "kind": "robot" + }, + "latest_observation": "8fd749571b62d83f", + "observations": [ + { + "classic": { + "elapsed": 3.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5684.0, + "scores": [ + 2349.0, + 3335.0 + ], + "selected": "cw.megas.Blade 0.8" + }, + "completed_at": "2026-09-08T21:31:07Z", + "delta_pct": null, + "id": "8fd749571b62d83f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 30, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33", + "java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34", + "java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35", + "java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36", + "java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37", + "java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38", + "java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39", + "java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40", + "java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41", + "java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42", + "java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43", + "java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44", + "java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45", + "java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46", + "java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47", + "java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33", + "java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34", + "java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35", + "java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36", + "java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37", + "java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38", + "java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39", + "java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40", + "java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41", + "java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42", + "java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43", + "java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44", + "java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45", + "java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/cw.megas.GhostShell_GT.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cw.megas.GhostShell GT", + "division": "roborumble", + "jar": "cw.megas.GhostShell_GT.jar", + "jar_sha256": "f75b19028ba3d181ae70d87a380370cf53e535b49e87f9060069a8591bc5888a", + "key": "roborumble/cw.megas.GhostShell_GT.jar", + "kind": "robot" + }, + "latest_observation": "624c2e5957e9c806", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 584, + "errors": [ + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null", + "SYSTEM: java.lang.NullPointerException occurred on robocode.ScannedRobotEvent", + "java.lang.NullPointerException: Cannot invoke \"java.awt.geom.Point2D.getX()\" because \"p\" is null" + ], + "has_log": true, + "ok": true, + "score": 10656.0, + "scores": [ + 5978.0, + 4678.0 + ], + "selected": "cw.megas.GhostShell GT" + }, + "completed_at": "2026-09-08T21:31:26Z", + "delta_pct": -24.4, + "id": "624c2e5957e9c806", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.2, + "error_count": 1302, + "errors": [ + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null", + "java.lang.NullPointerException: Cannot read field \"origin\" because \"w\" is null" + ], + "has_log": true, + "ok": true, + "score": 8061.0, + "scores": [ + 4548.0, + 3513.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cw.megas.Gridd_0.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cw.megas.Gridd 0.4", + "division": "roborumble", + "jar": "cw.megas.Gridd_0.4.jar", + "jar_sha256": "bfafc04f4fe6011bfa749f6895c02e6518cc2acb878f133200cd4a2778653edf", + "key": "roborumble/cw.megas.Gridd_0.4.jar", + "kind": "robot" + }, + "latest_observation": "b0e92913f32f5e4a", + "observations": [ + { + "classic": { + "elapsed": 3.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7366.0, + "scores": [ + 4135.0, + 3231.0 + ], + "selected": "cw.megas.Gridd 0.4" + }, + "completed_at": "2026-09-08T21:31:46Z", + "delta_pct": 4.7, + "id": "b0e92913f32f5e4a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7712.0, + "scores": [ + 4048.0, + 3664.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cw.megas.Polar_3.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cw.megas.Polar 3.2", + "division": "roborumble", + "jar": "cw.megas.Polar_3.2.jar", + "jar_sha256": "5a65f71be6ed605815763385ebd3ed9db00f248a4e7f65ecc75a566fd317665e", + "key": "roborumble/cw.megas.Polar_3.2.jar", + "kind": "robot" + }, + "latest_observation": "275e5d14496de98c", + "observations": [ + { + "classic": { + "elapsed": 3.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7521.0, + "scores": [ + 3441.0, + 4080.0 + ], + "selected": "cw.megas.Polar 3.2" + }, + "completed_at": "2026-09-08T21:32:18Z", + "delta_pct": 6.3, + "id": "275e5d14496de98c", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 28.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7996.0, + "scores": [ + 4154.0, + 3842.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cw.megas.Silhouette_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cw.megas.Silhouette 1.1", + "division": "roborumble", + "jar": "cw.megas.Silhouette_1.1.jar", + "jar_sha256": "e6971a7232c957673e1db12aeb969835a5f33928ed6ed30d6f0a33144002b2c6", + "key": "roborumble/cw.megas.Silhouette_1.1.jar", + "kind": "robot" + }, + "latest_observation": "c619f7cbb9bcea81", + "observations": [ + { + "classic": { + "elapsed": 3.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6360.0, + "scores": [ + 3297.0, + 3063.0 + ], + "selected": "cw.megas.Silhouette 1.1" + }, + "completed_at": "2026-09-08T21:32:38Z", + "delta_pct": -3.9, + "id": "c619f7cbb9bcea81", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6113.0, + "scores": [ + 3383.0, + 2730.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cx.BlestPain_1.41.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.BlestPain 1.41", + "division": "roborumble", + "jar": "cx.BlestPain_1.41.jar", + "jar_sha256": "6f6b974d5aa3cb4db450ab43a2c0425d55d654cb9b577171fd99c9fe094b08ba", + "key": "roborumble/cx.BlestPain_1.41.jar", + "kind": "robot" + }, + "latest_observation": "33f8afb939371ae3", + "observations": [ + { + "classic": { + "elapsed": 4.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4876.0, + "scores": [ + 2640.0, + 2236.0 + ], + "selected": "cx.BlestPain 1.41" + }, + "completed_at": "2026-09-08T21:33:02Z", + "delta_pct": -5.8, + "id": "33f8afb939371ae3", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4595.0, + "scores": [ + 2456.0, + 2139.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cx.CigaretBH_1.03.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.CigaretBH 1.03", + "division": "roborumble", + "jar": "cx.CigaretBH_1.03.jar", + "jar_sha256": "8c107a759b229f8570dcce96ccedd8404545e7d3c6441a206c64d54a4209d678", + "key": "roborumble/cx.CigaretBH_1.03.jar", + "kind": "robot" + }, + "latest_observation": "1677b2a1b4827612", + "observations": [ + { + "classic": { + "elapsed": 13.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4902.0, + "scores": [ + 2419.0, + 2483.0 + ], + "selected": "cx.CigaretBH 1.03" + }, + "completed_at": "2026-09-08T21:33:44Z", + "delta_pct": -7.3, + "id": "1677b2a1b4827612", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 28.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4542.0, + "scores": [ + 2483.0, + 2059.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cx.Lacrimas_1.36.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.Lacrimas 1.36", + "division": "roborumble", + "jar": "cx.Lacrimas_1.36.jar", + "jar_sha256": "3f188597207790c81255c5b78a09002cc87527166c22b75915d63f1f25111dae", + "key": "roborumble/cx.Lacrimas_1.36.jar", + "kind": "robot" + }, + "latest_observation": "20139227a27029e4", + "observations": [ + { + "classic": { + "elapsed": 3.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4503.0, + "scores": [ + 2030.0, + 2473.0 + ], + "selected": "cx.Lacrimas 1.36" + }, + "completed_at": "2026-09-08T21:34:10Z", + "delta_pct": 3.8, + "id": "20139227a27029e4", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4674.0, + "scores": [ + 2642.0, + 2032.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cx.Princess_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.Princess 1.0", + "division": "roborumble", + "jar": "cx.Princess_1.0.jar", + "jar_sha256": "8a5137dcb2d3075bf8b4aa5ec609d499a981f1ed6650641a10e3c95cfe2e7cec", + "key": "roborumble/cx.Princess_1.0.jar", + "kind": "robot" + }, + "latest_observation": "ee8fec5f1ac10af9", + "observations": [ + { + "classic": { + "elapsed": 9.0, + "error_count": 2, + "errors": [ + "java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\rc-robots\\.data\\cx\\Princess.data\\score.dat (Den angivne fil blev ikke fundet)", + "java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\rc-robots\\.data\\cx\\Princess.data\\score.dat (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": true, + "score": 5862.0, + "scores": [ + 3116.0, + 2746.0 + ], + "selected": "cx.Princess 1.0" + }, + "completed_at": "2026-09-08T21:37:13Z", + "delta_pct": -9.6, + "id": "ee8fec5f1ac10af9", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 2, + "errors": [ + "java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\cx.Princess_1.0\\Princess.data\\score.dat (Den angivne fil blev ikke fundet)", + "java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\cx.Princess_1.0-2\\Princess.data\\score.dat (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": true, + "score": 5301.0, + "scores": [ + 2866.0, + 2435.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cx.micro.Blur_0.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.micro.Blur 0.2", + "division": "roborumble", + "jar": "cx.micro.Blur_0.2.jar", + "jar_sha256": "a1d62b084d88196ff938d3f189e0f7a84f89e7f034bd21f83a8afb0bc20ba979", + "key": "roborumble/cx.micro.Blur_0.2.jar", + "kind": "robot" + }, + "latest_observation": "cf57283fe7c065c6", + "observations": [ + { + "classic": { + "elapsed": 2.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7918.0, + "scores": [ + 4451.0, + 3467.0 + ], + "selected": "cx.micro.Blur 0.2" + }, + "completed_at": "2026-09-08T21:34:17Z", + "delta_pct": null, + "id": "cf57283fe7c065c6", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 2, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.NullPointerException: Cannot invoke \"cx.micro.Blur$Wave.rateHit()\" because \"cx.micro.Blur.closestWave\" is null" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/cx.micro.Smoke_0.96.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.micro.Smoke 0.96", + "division": "roborumble", + "jar": "cx.micro.Smoke_0.96.jar", + "jar_sha256": "b18be3e111d1cfd9ed54c431d010e60368d9bffcbb06e38ac2c9bbf6c8243814", + "key": "roborumble/cx.micro.Smoke_0.96.jar", + "kind": "robot" + }, + "latest_observation": "d0ce3ae37d563131", + "observations": [ + { + "classic": { + "elapsed": 3.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5888.0, + "scores": [ + 2873.0, + 3015.0 + ], + "selected": "cx.micro.Smoke 0.96" + }, + "completed_at": "2026-09-08T21:34:41Z", + "delta_pct": -24.1, + "id": "d0ce3ae37d563131", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4468.0, + "scores": [ + 2295.0, + 2173.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cx.micro.Spark_0.6.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.micro.Spark 0.6", + "division": "roborumble", + "jar": "cx.micro.Spark_0.6.jar", + "jar_sha256": "dfcbbb2bb08ae6028e68178c3d9f80c0b1d0058ced7ab90bab2cade92f615d18", + "key": "roborumble/cx.micro.Spark_0.6.jar", + "kind": "robot" + }, + "latest_observation": "4a48d9ed154a3163", + "observations": [ + { + "classic": { + "elapsed": 4.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5050.0, + "scores": [ + 2918.0, + 2132.0 + ], + "selected": "cx.micro.Spark 0.6" + }, + "completed_at": "2026-09-08T21:35:01Z", + "delta_pct": 159.5, + "id": "4a48d9ed154a3163", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 13104.0, + "scores": [ + 6600.0, + 6504.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/cx.mini.BlackSwans_0.60.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.mini.BlackSwans 0.60", + "division": "roborumble", + "jar": "cx.mini.BlackSwans_0.60.jar", + "jar_sha256": "6b80464c7c11ce945f726455d0d9d91190460d7a8f8687115651daff9784159b", + "key": "roborumble/cx.mini.BlackSwans_0.60.jar", + "kind": "robot" + }, + "latest_observation": "6b425d3c251fa7bc", + "observations": [ + { + "classic": { + "elapsed": 8.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5617.0, + "scores": [ + 3157.0, + 2460.0 + ], + "selected": "cx.mini.BlackSwans 0.60" + }, + "completed_at": "2026-09-08T21:35:32Z", + "delta_pct": -5.1, + "id": "6b425d3c251fa7bc", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5331.0, + "scores": [ + 2719.0, + 2612.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cx.mini.Cigaret_1.31.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.mini.Cigaret 1.31", + "division": "roborumble", + "jar": "cx.mini.Cigaret_1.31.jar", + "jar_sha256": "273c4194d1b9f0687173158276802ff3456ec8343de62e80d2674e0960715612", + "key": "roborumble/cx.mini.Cigaret_1.31.jar", + "kind": "robot" + }, + "latest_observation": "8547c53305c88bf5", + "observations": [ + { + "classic": { + "elapsed": 10.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5220.0, + "scores": [ + 2470.0, + 2750.0 + ], + "selected": "cx.mini.Cigaret 1.31" + }, + "completed_at": "2026-09-08T21:36:06Z", + "delta_pct": -4.7, + "id": "8547c53305c88bf5", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4974.0, + "scores": [ + 2909.0, + 2065.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/cx.mini.Nimrod_0.55.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.mini.Nimrod 0.55", + "division": "roborumble", + "jar": "cx.mini.Nimrod_0.55.jar", + "jar_sha256": "9ccc75f18f1ea296fefe441150fd552e546989e1e42af4abdc578f297564a321", + "key": "roborumble/cx.mini.Nimrod_0.55.jar", + "kind": "robot" + }, + "latest_observation": "13e1779cf8e10822", + "observations": [ + { + "classic": { + "elapsed": 6.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4854.0, + "scores": [ + 2357.0, + 2497.0 + ], + "selected": "cx.mini.Nimrod 0.55" + }, + "completed_at": "2026-09-08T21:36:29Z", + "delta_pct": 130.2, + "id": "13e1779cf8e10822", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 11172.0, + "scores": [ + 5809.0, + 5363.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/cx.nano.Smog_2.6.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cx.nano.Smog 2.6", + "division": "roborumble", + "jar": "cx.nano.Smog_2.6.jar", + "jar_sha256": "1bdea7a9d116c385e6d7dcd12014dc80270f619cf2b20046c5d85640aeda4bbf", + "key": "roborumble/cx.nano.Smog_2.6.jar", + "kind": "robot" + }, + "latest_observation": "c37a0d6ebee94fdf", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4138.0, + "scores": [ + 1961.0, + 2177.0 + ], + "selected": "cx.nano.Smog 2.6" + }, + "completed_at": "2026-09-08T21:36:43Z", + "delta_pct": -27.5, + "id": "c37a0d6ebee94fdf", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2998.0, + "scores": [ + 1829.0, + 1169.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/cyragia.Bot_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "cyragia.Bot 1.1", + "division": "roborumble", + "jar": "cyragia.Bot_1.1.jar", + "jar_sha256": "a361becd83345726307c816da2247744cc4e94ddc2ce03b21ebee6d2957f93dc", + "key": "roborumble/cyragia.Bot_1.1.jar", + "kind": "robot" + }, + "latest_observation": "962c336578cde35f", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9172.0, + "scores": [ + 4633.0, + 4539.0 + ], + "selected": "cyragia.Bot 1.1" + }, + "completed_at": "2026-09-08T21:37:29Z", + "delta_pct": -4.4, + "id": "962c336578cde35f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8768.0, + "scores": [ + 4547.0, + 4221.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/da.NewBGank_1.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "da.NewBGank 1.4", + "division": "roborumble", + "jar": "da.NewBGank_1.4.jar", + "jar_sha256": "e47b2ea746b5bd9680b8dd884b82b822857acbd31071bbec0d7b1647c461b194", + "key": "roborumble/da.NewBGank_1.4.jar", + "kind": "robot" + }, + "latest_observation": "a25291b7dea73bfb", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6054.0, + "scores": [ + 2818.0, + 3236.0 + ], + "selected": "da.NewBGank 1.4" + }, + "completed_at": "2026-09-08T21:37:53Z", + "delta_pct": -33.9, + "id": "a25291b7dea73bfb", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4001.0, + "scores": [ + 2324.0, + 1677.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/daemons.DizzyA_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "daemons.DizzyA 1.0", + "division": "roborumble", + "jar": "daemons.DizzyA_1.0.jar", + "jar_sha256": "aeba11ca1cd50603c4b74166f04dea30238c77faead6f6830874571bea4091ad", + "key": "roborumble/daemons.DizzyA_1.0.jar", + "kind": "robot" + }, + "latest_observation": "4fb778b08e7b30a5", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12263.0, + "scores": [ + 6121.0, + 6142.0 + ], + "selected": "daemons.DizzyA 1.0" + }, + "completed_at": "2026-09-08T21:38:28Z", + "delta_pct": -75.5, + "id": "4fb778b08e7b30a5", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 32.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3000.0, + "scores": [ + 1522.0, + 1478.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/dam.MogBot_2.9.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "dam.MogBot 2.9", + "division": "roborumble", + "jar": "dam.MogBot_2.9.jar", + "jar_sha256": "7afc716ca13e8918c6f19d5d04fb4119a1f8ce825cc44f873e48329233edc646", + "key": "roborumble/dam.MogBot_2.9.jar", + "kind": "robot" + }, + "latest_observation": "d949ac75405a14c5", + "observations": [ + { + "classic": { + "elapsed": 22.9, + "error_count": 24, + "errors": [ + "java.io.StreamCorruptedException: invalid type code: 00", + "java.io.StreamCorruptedException: invalid type code: BF", + "java.io.StreamCorruptedException: invalid type code: 4C", + "java.io.StreamCorruptedException: invalid type code: 6E", + "java.io.UTFDataFormatException", + "java.io.StreamCorruptedException: invalid type code: 00", + "java.io.StreamCorruptedException: invalid type code: BF", + "java.io.StreamCorruptedException: invalid type code: 80", + "java.io.StreamCorruptedException: invalid handle value: 007E0270", + "java.io.StreamCorruptedException: invalid type code: 00", + "java.io.StreamCorruptedException: invalid type code: 00", + "java.io.InvalidClassException: dam.util.GridPoint; enum descriptor has non-zero serialVersionUID: 4446615568564813939", + "java.io.StreamCorruptedException: invalid type code: 00", + "java.io.StreamCorruptedException: invalid type code: BF", + "java.io.StreamCorruptedException: invalid type code: 4C", + "java.io.StreamCorruptedException: invalid type code: 6E", + "java.io.UTFDataFormatException", + "java.io.StreamCorruptedException: invalid type code: 00", + "java.io.StreamCorruptedException: invalid type code: BF", + "java.io.StreamCorruptedException: invalid type code: 80", + "java.io.StreamCorruptedException: invalid handle value: 007E0270", + "java.io.StreamCorruptedException: invalid type code: 00", + "java.io.StreamCorruptedException: invalid type code: 00", + "java.io.InvalidClassException: dam.util.GridPoint; enum descriptor has non-zero serialVersionUID: 4446615568564813939" + ], + "has_log": true, + "ok": true, + "score": 6025.0, + "scores": [ + 3381.0, + 2644.0 + ], + "selected": "dam.MogBot 2.9" + }, + "completed_at": "2026-09-08T21:39:18Z", + "delta_pct": null, + "id": "d949ac75405a14c5", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 6.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.io.EOFException: Unexpected end of ZLIB input stream", + "java.io.EOFException: Unexpected end of ZLIB input stream" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/dans.Cinnamon_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "dans.Cinnamon 1.2", + "division": "roborumble", + "jar": "dans.Cinnamon_1.2.jar", + "jar_sha256": "cb352fa2412994d4160c5161124036464a48cc73b1725178a7ee048609c8b7da", + "key": "roborumble/dans.Cinnamon_1.2.jar", + "kind": "robot" + }, + "latest_observation": "4396cf2704a52d50", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8750.0, + "scores": [ + 4450.0, + 4300.0 + ], + "selected": "dans.Cinnamon 1.2" + }, + "completed_at": "2026-09-08T21:39:31Z", + "delta_pct": -51.1, + "id": "4396cf2704a52d50", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 10.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4281.0, + "scores": [ + 2197.0, + 2084.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/darkcanuck.Gaff_1.50.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "darkcanuck.Gaff 1.50", + "division": "roborumble", + "jar": "darkcanuck.Gaff_1.50.jar", + "jar_sha256": "64aeb84310e8951dfd7d3cd0bac948d5276e5da63f1fee4cb33419beca244ba8", + "key": "roborumble/darkcanuck.Gaff_1.50.jar", + "kind": "robot" + }, + "latest_observation": "970cb17042cd15f3", + "observations": [ + { + "classic": { + "elapsed": 11.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7402.0, + "scores": [ + 4126.0, + 3276.0 + ], + "selected": "darkcanuck.Gaff 1.50" + }, + "completed_at": "2026-09-08T21:39:48Z", + "delta_pct": null, + "id": "970cb17042cd15f3", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "IOException trying to read: java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\darkcanuck.Gaff_1.50\\Gaff.data\\Gaff.properties (Den angivne fil blev ikke fundet)", + "IOException trying to read: java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\darkcanuck.Gaff_1.50-2\\Gaff.data\\Gaff.properties (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/darkcanuck.Holden_1.13a.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "darkcanuck.Holden 1.13a", + "division": "roborumble", + "jar": "darkcanuck.Holden_1.13a.jar", + "jar_sha256": "45996fda61b8ca3d0b807d791c79d2bd4dbff3043083bc99041d43ec01c40625", + "key": "roborumble/darkcanuck.Holden_1.13a.jar", + "kind": "robot" + }, + "latest_observation": "3e764de13ff9996b", + "observations": [ + { + "classic": { + "elapsed": 17.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5920.0, + "scores": [ + 3086.0, + 2834.0 + ], + "selected": "darkcanuck.Holden 1.13a" + }, + "completed_at": "2026-09-08T21:40:10Z", + "delta_pct": null, + "id": "3e764de13ff9996b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "IOException trying to read: java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\darkcanuck.Holden_1.13a\\Holden.data\\Holden.properties (Den angivne fil blev ikke fundet)", + "IOException trying to read: java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\darkcanuck.Holden_1.13a-2\\Holden.data\\Holden.properties (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/darkcanuck.Pris_0.92.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "darkcanuck.Pris 0.92", + "division": "roborumble", + "jar": "darkcanuck.Pris_0.92.jar", + "jar_sha256": "d545a4a58eff55fc4c24ea47ed12143c7208104ff223940017632c2b8742fdb9", + "key": "roborumble/darkcanuck.Pris_0.92.jar", + "kind": "robot" + }, + "latest_observation": "a1c846f8e60831ac", + "observations": [ + { + "classic": { + "elapsed": 14.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5105.0, + "scores": [ + 2805.0, + 2300.0 + ], + "selected": "darkcanuck.Pris 0.92" + }, + "completed_at": "2026-09-08T21:40:29Z", + "delta_pct": null, + "id": "a1c846f8e60831ac", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "IOException trying to read: java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\darkcanuck.Pris_0.92\\Pris.data\\Pris.properties (Den angivne fil blev ikke fundet)", + "IOException trying to read: java.io.FileNotFoundException: C:\\Code\\robocode-api-bridge\\compat-test\\work\\tr-bots\\darkcanuck.Pris_0.92-2\\Pris.data\\Pris.properties (Den angivne fil blev ikke fundet)" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/davidalves.Firebird_0.25.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davidalves.Firebird 0.25", + "division": "roborumble", + "jar": "davidalves.Firebird_0.25.jar", + "jar_sha256": "ecf5e584ad4d70023baacc9bd4b2ce6c65520675c91f542e21951e20be1243c9", + "key": "roborumble/davidalves.Firebird_0.25.jar", + "kind": "robot" + }, + "latest_observation": "fae39438b7bb4d8a", + "observations": [ + { + "classic": { + "elapsed": 11.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5111.0, + "scores": [ + 2614.0, + 2497.0 + ], + "selected": "davidalves.Firebird 0.25" + }, + "completed_at": "2026-09-08T21:41:01Z", + "delta_pct": 16.1, + "id": "fae39438b7bb4d8a", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5933.0, + "scores": [ + 3115.0, + 2818.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/davidalves.PhoenixOS_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davidalves.PhoenixOS 1.1", + "division": "roborumble", + "jar": "davidalves.PhoenixOS_1.1.jar", + "jar_sha256": "fb4b5b7b628d818780a81818b30de9ae2cf10f54e66f6fbe6111dbb62b38a4c8", + "key": "roborumble/davidalves.PhoenixOS_1.1.jar", + "kind": "robot" + }, + "latest_observation": "8f13036b4836dcbf", + "observations": [ + { + "classic": { + "elapsed": 3.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4825.0, + "scores": [ + 2716.0, + 2109.0 + ], + "selected": "davidalves.PhoenixOS 1.1" + }, + "completed_at": "2026-09-08T21:43:17Z", + "delta_pct": null, + "id": "8f13036b4836dcbf", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "FAIL (TR)", + "tank_royale": { + "elapsed": 4.2, + "error_count": 3, + "errors": [ + "HARNESS: worker produced no result (exit code -1)", + "java.lang.NullPointerException: Cannot invoke \"davidalves.net.gun.GuessFactorGun.miss()\" because \"gun\" is null", + "java.lang.NullPointerException: Cannot invoke \"davidalves.net.gun.GuessFactorGun.miss()\" because \"gun\" is null" + ], + "has_log": true, + "ok": false, + "score": null, + "scores": [], + "skipped": null + } + } + ], + "status": "FAIL (TR)" + }, + "roborumble/davidalves.Phoenix_1.02.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davidalves.Phoenix 1.02", + "division": "roborumble", + "jar": "davidalves.Phoenix_1.02.jar", + "jar_sha256": "89b46a3c5cd14c05e6ec5f59ab189852178cd2d774313ac2e0a2b3971ec0fb37", + "key": "roborumble/davidalves.Phoenix_1.02.jar", + "kind": "robot" + }, + "latest_observation": "8abd22893c0c806b", + "observations": [ + { + "classic": { + "elapsed": 6.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4975.0, + "scores": [ + 2556.0, + 2419.0 + ], + "selected": "davidalves.Phoenix 1.02" + }, + "completed_at": "2026-09-08T21:43:08Z", + "delta_pct": 11.5, + "id": "8abd22893c0c806b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5546.0, + "scores": [ + 3453.0, + 2093.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/davidalves.net.DuelistMicroMkII_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davidalves.net.DuelistMicroMkII 1.1", + "division": "roborumble", + "jar": "davidalves.net.DuelistMicroMkII_1.1.jar", + "jar_sha256": "0d3e784acde7d8156090280241668a002f890ee6d5d7fe6dadc971787f67b15e", + "key": "roborumble/davidalves.net.DuelistMicroMkII_1.1.jar", + "kind": "robot" + }, + "latest_observation": "34cf1f962dcb1bcd", + "observations": [ + { + "classic": { + "elapsed": 3.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5188.0, + "scores": [ + 2539.0, + 2649.0 + ], + "selected": "davidalves.net.DuelistMicroMkII 1.1" + }, + "completed_at": "2026-09-08T21:41:58Z", + "delta_pct": 138.5, + "id": "34cf1f962dcb1bcd", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 12373.0, + "scores": [ + 6464.0, + 5909.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/davidalves.net.DuelistMicro_1.22.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davidalves.net.DuelistMicro 1.22", + "division": "roborumble", + "jar": "davidalves.net.DuelistMicro_1.22.jar", + "jar_sha256": "e51b32ab504ef17c0bcd47bb7953ccdd07f7e050b0fa1a3478e63281eaa0fe2a", + "key": "roborumble/davidalves.net.DuelistMicro_1.22.jar", + "kind": "robot" + }, + "latest_observation": "4d34a6e0b2152b18", + "observations": [ + { + "classic": { + "elapsed": 3.2, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5170.0, + "scores": [ + 2389.0, + 2781.0 + ], + "selected": "davidalves.net.DuelistMicro 1.22" + }, + "completed_at": "2026-09-08T21:41:40Z", + "delta_pct": 69.6, + "id": "4d34a6e0b2152b18", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8770.0, + "scores": [ + 4535.0, + 4235.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/davidalves.net.DuelistMini_1.1.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davidalves.net.DuelistMini 1.1", + "division": "roborumble", + "jar": "davidalves.net.DuelistMini_1.1.jar", + "jar_sha256": "9b2ccfee8ff26f622417b82fbe3634e7ff0b3c6693e5fcdd0f534f9a071d86b5", + "key": "roborumble/davidalves.net.DuelistMini_1.1.jar", + "kind": "robot" + }, + "latest_observation": "6fb819cdb10fc868", + "observations": [ + { + "classic": { + "elapsed": 3.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4765.0, + "scores": [ + 2860.0, + 1905.0 + ], + "selected": "davidalves.net.DuelistMini 1.1" + }, + "completed_at": "2026-09-08T21:42:20Z", + "delta_pct": -10.0, + "id": "6fb819cdb10fc868", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4290.0, + "scores": [ + 2273.0, + 2017.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/davidalves.net.DuelistNano_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davidalves.net.DuelistNano 1.0", + "division": "roborumble", + "jar": "davidalves.net.DuelistNano_1.0.jar", + "jar_sha256": "024b50bf85f17fa136ca87ba615701dd46473d8ef299c49794001271a9aa848e", + "key": "roborumble/davidalves.net.DuelistNano_1.0.jar", + "kind": "robot" + }, + "latest_observation": "eeb33d1a7dbabc53", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4314.0, + "scores": [ + 2288.0, + 2026.0 + ], + "selected": "davidalves.net.DuelistNano 1.0" + }, + "completed_at": "2026-09-08T21:42:41Z", + "delta_pct": 4.2, + "id": "eeb33d1a7dbabc53", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 18.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4495.0, + "scores": [ + 2293.0, + 2202.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/davidalves.net.Duelist_0.1.6src.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davidalves.net.Duelist 0.1.6src", + "division": "roborumble", + "jar": "davidalves.net.Duelist_0.1.6src.jar", + "jar_sha256": "85c0efdc1a1c9e91b1d35ab906e794c255165f961ce6ad5271a564686ae623ae", + "key": "roborumble/davidalves.net.Duelist_0.1.6src.jar", + "kind": "robot" + }, + "latest_observation": "da9c6f4187b20af6", + "observations": [ + { + "classic": { + "elapsed": 3.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4870.0, + "scores": [ + 2256.0, + 2614.0 + ], + "selected": "davidalves.net.Duelist 0.1.6src" + }, + "completed_at": "2026-09-08T21:41:25Z", + "delta_pct": 0.1, + "id": "da9c6f4187b20af6", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4877.0, + "scores": [ + 2904.0, + 1973.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/davv.DOne_b002.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "davv.DOne b002", + "division": "roborumble", + "jar": "davv.DOne_b002.jar", + "jar_sha256": "c4247ac7dade8278e7bdcb028af8c14d4850654318798c694a558df07d8b6a2e", + "key": "roborumble/davv.DOne_b002.jar", + "kind": "robot" + }, + "latest_observation": "8948876072cf5515", + "observations": [ + { + "classic": { + "elapsed": 4.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5189.0, + "scores": [ + 2593.0, + 2596.0 + ], + "selected": "davv.DOne b002" + }, + "completed_at": "2026-09-08T21:43:51Z", + "delta_pct": -53.3, + "id": "8948876072cf5515", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 30.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2422.0, + "scores": [ + 1387.0, + 1035.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/dcs.Eater_of_Worlds_1.1.3-A.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "dcs.Eater_of_Worlds 1.1.3-A", + "division": "roborumble", + "jar": "dcs.Eater_of_Worlds_1.1.3-A.jar", + "jar_sha256": "b674714bdd8a9a3f2a422c44789ce0328e3c97db328d486b5a08e57c622bd1b8", + "key": "roborumble/dcs.Eater_of_Worlds_1.1.3-A.jar", + "kind": "robot" + }, + "latest_observation": "acfc2f677316f7a1", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7446.0, + "scores": [ + 3219.0, + 4227.0 + ], + "selected": "dcs.Eater_of_Worlds 1.1.3-A" + }, + "completed_at": "2026-09-08T21:44:08Z", + "delta_pct": 19.2, + "id": "acfc2f677316f7a1", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8877.0, + "scores": [ + 5234.0, + 3643.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/dcs.Eater_of_Worlds_Mini_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "dcs.Eater_of_Worlds_Mini 1.0", + "division": "roborumble", + "jar": "dcs.Eater_of_Worlds_Mini_1.0.jar", + "jar_sha256": "424d954d97913eb026baa23b0a387bec3723e090b8c2619f83be76905a006b3d", + "key": "roborumble/dcs.Eater_of_Worlds_Mini_1.0.jar", + "kind": "robot" + }, + "latest_observation": "aa8ea784d11f187f", + "observations": [ + { + "classic": { + "elapsed": 2.5, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8122.0, + "scores": [ + 4301.0, + 3821.0 + ], + "selected": "dcs.Eater_of_Worlds_Mini 1.0" + }, + "completed_at": "2026-09-08T21:44:26Z", + "delta_pct": -3.7, + "id": "aa8ea784d11f187f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7824.0, + "scores": [ + 4118.0, + 3706.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/dcs.PM.Eater_of_Worlds_PM_1.2.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "dcs.PM.Eater_of_Worlds_PM 1.2", + "division": "roborumble", + "jar": "dcs.PM.Eater_of_Worlds_PM_1.2.jar", + "jar_sha256": "103d8b2e0e831171d8bc2ad4d2272f17765dfc9ecc7075ee4cdbba2a1a7b3e85", + "key": "roborumble/dcs.PM.Eater_of_Worlds_PM_1.2.jar", + "kind": "robot" + }, + "latest_observation": "ff977f89ff8c2e6b", + "observations": [ + { + "classic": { + "elapsed": 2.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5358.0, + "scores": [ + 2593.0, + 2765.0 + ], + "selected": "dcs.PM.Eater_of_Worlds_PM 1.2" + }, + "completed_at": "2026-09-08T21:44:42Z", + "delta_pct": 155.4, + "id": "ff977f89ff8c2e6b", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 12.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 13685.0, + "scores": [ + 7034.0, + 6651.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/de.erdega.robocode.Polyphemos_0.4.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "de.erdega.robocode.Polyphemos 0.4", + "division": "roborumble", + "jar": "de.erdega.robocode.Polyphemos_0.4.jar", + "jar_sha256": "64765b6e60690f6889f1ef44ef0e8a566871eee38b280784e68900dff5d0e7be", + "key": "roborumble/de.erdega.robocode.Polyphemos_0.4.jar", + "kind": "robot" + }, + "latest_observation": "2b4de671d6c6e4bf", + "observations": [ + { + "classic": { + "elapsed": 2.6, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5160.0, + "scores": [ + 2440.0, + 2720.0 + ], + "selected": "de.erdega.robocode.Polyphemos 0.4" + }, + "completed_at": "2026-09-08T21:45:07Z", + "delta_pct": -35.0, + "id": "2b4de671d6c6e4bf", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3354.0, + "scores": [ + 1829.0, + 1525.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/de.simpleworks.robocode.bots.swiBot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "de.simpleworks.robocode.bots.swiBot 1.0", + "division": "roborumble", + "jar": "de.simpleworks.robocode.bots.swiBot_1.0.jar", + "jar_sha256": "0f8ba834279b54d3494be8aeb57f35d557e8d05bb4075a832a76206b1fa89eef", + "key": "roborumble/de.simpleworks.robocode.bots.swiBot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "8a7446289797b1b0", + "observations": [ + { + "classic": { + "elapsed": 2.7, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 9417.0, + "scores": [ + 4829.0, + 4588.0 + ], + "selected": "de.simpleworks.robocode.bots.swiBot 1.0" + }, + "completed_at": "2026-09-08T21:45:32Z", + "delta_pct": -13.2, + "id": "8a7446289797b1b0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 22.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 8172.0, + "scores": [ + 4378.0, + 3794.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/deith.Czolgzilla_0.11.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "deith.Czolgzilla 0.11", + "division": "roborumble", + "jar": "deith.Czolgzilla_0.11.jar", + "jar_sha256": "62fcf900acce6f57575b9f550455c49c70238555233b37a6687f979f9af91779", + "key": "roborumble/deith.Czolgzilla_0.11.jar", + "kind": "robot" + }, + "latest_observation": "08cef06b36787464", + "observations": [ + { + "classic": { + "elapsed": 43.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5143.0, + "scores": [ + 3161.0, + 1982.0 + ], + "selected": "deith.Czolgzilla 0.11" + }, + "completed_at": "2026-09-08T21:46:55Z", + "delta_pct": -5.6, + "id": "08cef06b36787464", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 40.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 4853.0, + "scores": [ + 2548.0, + 2305.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/demetrix.ForceMajeure_0.75.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "demetrix.ForceMajeure 0.75", + "division": "roborumble", + "jar": "demetrix.ForceMajeure_0.75.jar", + "jar_sha256": "015c4cf71816f9b7ec45ca58c680054eada7157ea54b8eb29c33ec4a82be5011", + "key": "roborumble/demetrix.ForceMajeure_0.75.jar", + "kind": "robot" + }, + "latest_observation": "bbf69d95d8f28b8f", + "observations": [ + { + "classic": { + "elapsed": 8.9, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5942.0, + "scores": [ + 3395.0, + 2547.0 + ], + "selected": "demetrix.ForceMajeure 0.75" + }, + "completed_at": "2026-09-08T21:47:28Z", + "delta_pct": -0.5, + "id": "bbf69d95d8f28b8f", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 24.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5913.0, + "scores": [ + 3066.0, + 2847.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/demetrix.nano.Neutrino_0.27.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "demetrix.nano.Neutrino 0.27", + "division": "roborumble", + "jar": "demetrix.nano.Neutrino_0.27.jar", + "jar_sha256": "3ba40e81b6908456aad702dd6e8481f33d07898ac773a1307a20563157942a23", + "key": "roborumble/demetrix.nano.Neutrino_0.27.jar", + "kind": "robot" + }, + "latest_observation": "c87a4b8d228674d0", + "observations": [ + { + "classic": { + "elapsed": 2.4, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 7673.0, + "scores": [ + 4020.0, + 3653.0 + ], + "selected": "demetrix.nano.Neutrino 0.27" + }, + "completed_at": "2026-09-08T21:47:45Z", + "delta_pct": -17.5, + "id": "c87a4b8d228674d0", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 14.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6329.0, + "scores": [ + 3688.0, + 2641.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/demetrix.nano.SledgeHammer_0.22.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "demetrix.nano.SledgeHammer 0.22", + "division": "roborumble", + "jar": "demetrix.nano.SledgeHammer_0.22.jar", + "jar_sha256": "8ca91c5c9cbe37fbd67f136a38ac4be45c2f8b9eb470367957c3fe20e0edd3cd", + "key": "roborumble/demetrix.nano.SledgeHammer_0.22.jar", + "kind": "robot" + }, + "latest_observation": "804cc154798fef47", + "observations": [ + { + "classic": { + "elapsed": 2.1, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 10442.0, + "scores": [ + 4827.0, + 5615.0 + ], + "selected": "demetrix.nano.SledgeHammer 0.22" + }, + "completed_at": "2026-09-08T21:47:57Z", + "delta_pct": 58.1, + "id": "804cc154798fef47", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 10.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 16508.0, + "scores": [ + 8362.0, + 8146.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/deo.CloudBot_1.3.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "deo.CloudBot 1.3", + "division": "roborumble", + "jar": "deo.CloudBot_1.3.jar", + "jar_sha256": "d62f0561529c81e5da65ad44c4c6db8b31dceca043ec2d9fcc4646aa15ed28f3", + "key": "roborumble/deo.CloudBot_1.3.jar", + "kind": "robot" + }, + "latest_observation": "78bba33b96e662cd", + "observations": [ + { + "classic": { + "elapsed": 2.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5643.0, + "scores": [ + 2950.0, + 2693.0 + ], + "selected": "deo.CloudBot 1.3" + }, + "completed_at": "2026-09-08T21:48:20Z", + "delta_pct": -48.6, + "id": "78bba33b96e662cd", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 2899.0, + "scores": [ + 1506.0, + 1393.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + }, + "roborumble/deo.FlowerBot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "deo.FlowerBot 1.0", + "division": "roborumble", + "jar": "deo.FlowerBot_1.0.jar", + "jar_sha256": "b5546fad91b493970149f74a827f7080df7ada99a958deaeebbfcfc0c211a5e5", + "key": "roborumble/deo.FlowerBot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "fc65e7d5693090d9", + "observations": [ + { + "classic": { + "elapsed": 3.3, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6175.0, + "scores": [ + 3231.0, + 2944.0 + ], + "selected": "deo.FlowerBot 1.0" + }, + "completed_at": "2026-09-08T21:48:40Z", + "delta_pct": -11.2, + "id": "fc65e7d5693090d9", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "PASS", + "tank_royale": { + "elapsed": 16.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 5481.0, + "scores": [ + 3215.0, + 2266.0 + ], + "skipped": null + } + } + ], + "status": "PASS" + }, + "roborumble/deo.virtual.RainbowBot_1.0.jar": { + "diagnosis": { + "cause": null, + "owner": null, + "state": "untriaged" + }, + "identity": { + "classic_selected": "deo.virtual.RainbowBot 1.0", + "division": "roborumble", + "jar": "deo.virtual.RainbowBot_1.0.jar", + "jar_sha256": "3854b1a74b34f26b4fccfc997b5faadb4db60177cd48857d8bdba79e63f5bba4", + "key": "roborumble/deo.virtual.RainbowBot_1.0.jar", + "kind": "robot" + }, + "latest_observation": "38ab74151e9be2ed", + "observations": [ + { + "classic": { + "elapsed": 3.8, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 6603.0, + "scores": [ + 2903.0, + 3700.0 + ], + "selected": "deo.virtual.RainbowBot 1.0" + }, + "completed_at": "2026-09-08T21:49:04Z", + "delta_pct": -51.9, + "id": "38ab74151e9be2ed", + "manifest": { + "artifacts": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridge_commit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "official_parameters": true, + "supplied": { + "artifactSha256": { + "C:\\Code\\robocode-api-bridge\\robocode-api\\build\\libs\\robocode-api-0.5.0.jar": "A92135B08DF77D80362D62035F8C7EE96266673FA2563A6C159C1ED4D36A115E", + "C:\\Code\\robocode-api-bridge\\robots-wrapper\\build\\libs\\robots-wrapper-0.3.1.jar": "A6259E29CCAF9E710B1F5176B1FA3E1E6F97D14569E98A5E0A9E6C64CB5109E5", + "C:\\Code\\tank-royale\\bot-api\\java\\build\\libs\\robocode-tankroyale-bot-api-1.2.0.jar": "A855E74500F2D8F78F64574FC0CAE93D79B0AB35A1F74674789B7C878972052B", + "C:\\Code\\tank-royale\\runner\\examples\\lib\\robocode-tankroyale-runner.jar": "3B3212ADED7EDF2ECA481E2E536075F59E074993A85F87BA7F5BD0760892C151" + }, + "bridgeCommit": "59240f444c5182b7c15d856ac077e5b3116513ed", + "collectionDir": "C:\\Code\\LiteRumble robots", + "command": "python compat_test.py --limit 50", + "created": "2026-09-08T21:13:17.3265216Z", + "javaVersion": "openjdk version \"24.0.2\" 2025-07-15 OpenJDK Runtime Environment Temurin-24.0.2+12 (build 24.0.2+12) OpenJDK 64-Bit Server VM Temurin-24.0.2+12 (build 24.0.2+12, mixed mode, sharing)", + "pythonVersion": "Python 3.14.2", + "rcJava": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.17.10-hotspot\\bin\\java.exe", + "robocodeHome": "C:\\robocode", + "tankRoyaleCommit": "249cdaf77678126d82f48e93f6e01434aee88823", + "tankRoyaleVersion": "1.2.0" + }, + "tank_royale_commit": "249cdaf77678126d82f48e93f6e01434aee88823", + "threshold": 25.0 + }, + "setup": { + "height": 600, + "participants": 2, + "rounds": 35, + "width": 800 + }, + "status": "DISCREPANCY (score)", + "tank_royale": { + "elapsed": 20.0, + "error_count": 0, + "errors": [], + "has_log": false, + "ok": true, + "score": 3175.0, + "scores": [ + 1712.0, + 1463.0 + ], + "skipped": null + } + } + ], + "status": "DISCREPANCY (score)" + } + } +} diff --git a/compat-test/parity-registry.md b/compat-test/parity-registry.md new file mode 100644 index 0000000..483bb39 --- /dev/null +++ b/compat-test/parity-registry.md @@ -0,0 +1,243 @@ +# Legacy robot parity registry + +This generated table is the reviewed index of the append-only observations in `parity-registry.json`. Classic Robocode is the reference; an unresolved row requires diagnosis and a focused retest after its repair. + +## Current status + +| Status | Subjects | +|---|---:| +| DISCREPANCY (no score) | 4 | +| DISCREPANCY (score) | 65 | +| FAIL (TR) | 19 | +| PASS | 138 | + +## Subjects + +| Subject | Division | Kind | Status | Latest observation | Cause | Owner | +|---|---|---|---|---|---|---| +| roborumble/AD.CodaFirst_1.1.jar | roborumble | robot | DISCREPANCY (score) | c64fb0b475ea6e81 | - | - | +| roborumble/AIR.iRobot_1.0.jar | roborumble | robot | FAIL (TR) | 30ccf919e98128fe | - | - | +| roborumble/And.BasicSurfer_FF1.6.jar | roborumble | robot | PASS | e10ba12633f28ccf | - | - | +| roborumble/ArchAlpha.ArchimedesAlpha_1.0.jar | roborumble | robot | DISCREPANCY (no score) | 8ee700d1da5ca3de | - | - | +| roborumble/CharlieN.Omega.Omega_1.03.jar | roborumble | robot | PASS | 23e880a8344ee3d9 | - | - | +| roborumble/a.FreyaOS_1.0.jar | roborumble | robot | DISCREPANCY (score) | 250efa0576cb1c56 | - | - | +| roborumble/aaa.r.ScalarR_0.005h.053.jar | roborumble | robot | DISCREPANCY (score) | 789ba80b28f3224a | - | - | +| roborumble/ab.DengerousRoBatra_1.3.jar | roborumble | robot | PASS | b9f7cc9d84668eb6 | - | - | +| roborumble/abud.ThirdRobo_1.0.jar | roborumble | robot | FAIL (TR) | b6434f799b62dbb9 | - | - | +| roborumble/acid.Bl4ck_1.0.jar | roborumble | robot | DISCREPANCY (score) | 7bbc287f8bfe56e4 | - | - | +| roborumble/acid.Null_1.0.jar | roborumble | robot | DISCREPANCY (score) | 590ef3a4eaca28e3 | - | - | +| roborumble/acid.Syzygy_1.0.4.jar | roborumble | robot | DISCREPANCY (score) | e0d888daca1f0456 | - | - | +| roborumble/ad.Quest_0.10.jar | roborumble | robot | PASS | 90b87fb62a5d8769 | - | - | +| roborumble/ad.last.Bottom_1.0.jar | roborumble | robot | DISCREPANCY (score) | 536581d29ac8b51f | - | - | +| roborumble/adt.Ar1_2.1.jar | roborumble | robot | PASS | a7544fcb7a16e1cc | - | - | +| roborumble/adt.Ar2_1.0.jar | roborumble | robot | PASS | f8dc415d3174e2bd | - | - | +| roborumble/aetos.AetosFirstBot_1.0.jar | roborumble | robot | PASS | adf8a34914ae5ddc | - | - | +| roborumble/ag.Gir_0.99.jar | roborumble | robot | FAIL (TR) | 6a92a7c896d886ac | - | - | +| roborumble/agd.Mooserwirt2_2.7.jar | roborumble | robot | DISCREPANCY (score) | ff9a91c9aed410ac | - | - | +| roborumble/agrach.Dalek_1.0.jar | roborumble | robot | DISCREPANCY (score) | ba3220036d56b733 | - | - | +| roborumble/agrach.MicroDalek_1.0.jar | roborumble | robot | PASS | 530461a54d8b1dad | - | - | +| roborumble/agrach.RobotSlayer_1.0.jar | roborumble | robot | DISCREPANCY (score) | 8f77756a222c2ed6 | - | - | +| roborumble/ags.Glacier_0.3.2.jar | roborumble | robot | DISCREPANCY (score) | 60be2730fb1d2100 | - | - | +| roborumble/ags.Midboss_1q.fast.jar | roborumble | robot | PASS | 7effb7a405de90e7 | - | - | +| roborumble/ags.micro.Carpet_1.1.jar | roborumble | robot | PASS | a5199bebb61593c0 | - | - | +| roborumble/ags.polished.PolishedRuby_1.jar | roborumble | robot | DISCREPANCY (score) | fc49d718cc3c93ac | - | - | +| roborumble/ags.rougedc.RougeDC_willow.jar | roborumble | robot | PASS | c007d142eae29d0a | - | - | +| roborumble/ahf.Acero_1.0.jar | roborumble | robot | PASS | 9a49d2334b9adb0e | - | - | +| roborumble/ahf.NanoAndrew_.4.jar | roborumble | robot | DISCREPANCY (score) | 06a1568606c64145 | - | - | +| roborumble/ahf.r2d2.R2d2_0.86.jar | roborumble | robot | DISCREPANCY (score) | b8a0807ea26810cb | - | - | +| roborumble/ahr.ice.Ice_1.0.jar | roborumble | robot | PASS | 230fd620dc49add2 | - | - | +| roborumble/ak.Fermat_2.0.jar | roborumble | robot | DISCREPANCY (score) | 2e184f3d97965168 | - | - | +| roborumble/alex.Diabolo5_1.1.jar | roborumble | robot | PASS | 9571152abf9a4117 | - | - | +| roborumble/alk.lap.LoudAndProud_2.23.jar | roborumble | robot | PASS | b7150fa0f8305e61 | - | - | +| roborumble/am.Miedzix_3.0.jar | roborumble | robot | PASS | 95ffe43ca9a2cd04 | - | - | +| roborumble/amarok.Rookie_1.1.jar | roborumble | robot | PASS | 4358feef92af528c | - | - | +| roborumble/amc.ROBv202_1.01.jar | roborumble | robot | PASS | 7af3d80d2aa0cb8e | - | - | +| roborumble/amc.ROBv203_1.0.jar | roborumble | robot | PASS | 5b13343a09625cb7 | - | - | +| roborumble/amc.ROBv300_1.1.jar | roborumble | robot | DISCREPANCY (score) | f9df3a01abc1f04f | - | - | +| roborumble/amc.ROBv301_1.1.jar | roborumble | robot | DISCREPANCY (score) | 8f84ca57fd472f5b | - | - | +| roborumble/amc.ROBv400_1.0.jar | roborumble | robot | DISCREPANCY (score) | 09be55e2c9b7d445 | - | - | +| roborumble/amk.ChumbaMini_0.2.jar | roborumble | robot | PASS | a2683415dda92a08 | - | - | +| roborumble/amk.ChumbaWumba_0.3.jar | roborumble | robot | PASS | 945bce04cca29751 | - | - | +| roborumble/amk.Punbot.Punbot_0.01.jar | roborumble | robot | PASS | 5cb33aff96c3e759 | - | - | +| roborumble/amk.ShizzleStiX.ShizzleStiX_0.6.jar | roborumble | robot | PASS | fcb8486e2c29e9dc | - | - | +| roborumble/amk.jointstrike.JointStrike_0.2.jar | roborumble | robot | PASS | 5c6c92d169d651d3 | - | - | +| roborumble/amk.superstrike.SuperStrike_0.3.jar | roborumble | robot | DISCREPANCY (score) | 54ea093325f72804 | - | - | +| roborumble/ao.T100_0.9.jar | roborumble | robot | DISCREPANCY (score) | 4ae1803915fa8384 | - | - | +| roborumble/ap.Frederick_1.1.jar | roborumble | robot | PASS | df6c7329f8f52c4e | - | - | +| roborumble/apc.Caan_1.0.jar | roborumble | robot | PASS | f844e4bc6aff7dc0 | - | - | +| roborumble/apc.Colossus2_0.12.jar | roborumble | robot | FAIL (TR) | 6234b82cd630f7c9 | - | - | +| roborumble/apc.LeeroyJenkins2_1.0.jar | roborumble | robot | PASS | c115dfcf1a4a4fdf | - | - | +| roborumble/apc.botM_3.0.jar | roborumble | robot | PASS | 4a1b06c7f3fd0456 | - | - | +| roborumble/apollokidd.ApolloKidd_0.9.jar | roborumble | robot | DISCREPANCY (score) | b90a01cef8102d4f | - | - | +| roborumble/apv.AspidReloaded_0.6.jar | roborumble | robot | PASS | 22f23ec4b2359408 | - | - | +| roborumble/apv.Aspid_1.7.jar | roborumble | robot | PASS | f0bfd59e67a0674e | - | - | +| roborumble/apv.LauLectrik_1.2.jar | roborumble | robot | PASS | 379bc7ba025c9021 | - | - | +| roborumble/apv.MicroAspid_1.8.jar | roborumble | robot | PASS | 683da02ff1de941a | - | - | +| roborumble/apv.NanoLauLectrikTheCannibal_1.1.jar | roborumble | robot | PASS | 15a460cbb677c889 | - | - | +| roborumble/apv.NanoLauLectrik_1.0.jar | roborumble | robot | PASS | 1aa9b09bc500fd4b | - | - | +| roborumble/apv.ScruchiPu_1.0.jar | roborumble | robot | PASS | d749a519d41481d5 | - | - | +| roborumble/apv.TheBrainPi_0.5fix.jar | roborumble | robot | PASS | 0b26bcefd7d92f4f | - | - | +| roborumble/apv.test.Virus_0.6.1.jar | roborumble | robot | PASS | fb63ed9dcd64d83b | - | - | +| roborumble/ar.QuantumChromodynamics_1.2.1.jar | roborumble | robot | PASS | 4ac5fb2477202c50 | - | - | +| roborumble/ar.TheoryOfEverything_1.2.1.jar | roborumble | robot | PASS | 9ace621bf12f4172 | - | - | +| roborumble/ar.horizon.Horizon_1.2.2.jar | roborumble | robot | DISCREPANCY (score) | 97286a0cb62861a8 | - | - | +| roborumble/ara.Shera_0.88.jar | roborumble | robot | PASS | b32a6997ff56c9af | - | - | +| roborumble/areb.Union_1.06.jar | roborumble | robot | PASS | e533066dda10e17a | - | - | +| roborumble/arthord.KostyaTszyu_Beta2.jar | roborumble | robot | DISCREPANCY (score) | 36f054afe6dfd556 | - | - | +| roborumble/arthord.NanoSatanMelee_Beta.jar | roborumble | robot | PASS | aee831eb589eb863 | - | - | +| roborumble/arthord.NanoSatan_Mu.jar | roborumble | robot | PASS | cb4397fbdd3591a9 | - | - | +| roborumble/arthord.micro.Apoptygma_0.4.jar | roborumble | robot | PASS | 3c369261b2915cd0 | - | - | +| roborumble/arthord.micro.Muffin_0.6.1.jar | roborumble | robot | DISCREPANCY (score) | a7b360b5da35fac2 | - | - | +| roborumble/ary.Crisis_1.0.jar | roborumble | robot | PASS | 2728b67184ef42c0 | - | - | +| roborumble/ary.FourWD_1.3d.jar | roborumble | robot | DISCREPANCY (score) | 10b51506f52cd1be | - | - | +| roborumble/ary.Help_1.0.jar | roborumble | robot | DISCREPANCY (score) | a5fc6afd26a475b9 | - | - | +| roborumble/ary.SMG_1.01.jar | roborumble | robot | DISCREPANCY (score) | 5df472261fca6166 | - | - | +| roborumble/ary.micro.Weak_1.2.jar | roborumble | robot | PASS | 371017386f1da182 | - | - | +| roborumble/ary.mini.Nimi_1.0.jar | roborumble | robot | DISCREPANCY (score) | e0d8d0f6f8806455 | - | - | +| roborumble/ary.nano.AceSurf_1.2.jar | roborumble | robot | DISCREPANCY (score) | bd77f78dc4f9642f | - | - | +| roborumble/ary.nano.ColorNanoP_1.1.jar | roborumble | robot | PASS | 7c40044d94ec9a01 | - | - | +| roborumble/as.xbots_1.0.jar | roborumble | robot | DISCREPANCY (score) | a84fbf62fb36b2a2 | - | - | +| roborumble/asd.Cthulhu_1.2.jar | roborumble | robot | PASS | 62a7416486d668ba | - | - | +| roborumble/asm.Statistas_0.1.jar | roborumble | robot | PASS | 1f68932ec9132d3a | - | - | +| roborumble/awl.Locutus_1.5.jar | roborumble | robot | PASS | 044a09527daed943 | - | - | +| roborumble/axeBots.HataMoto_3.09.jar | roborumble | robot | PASS | f3c9ed411fa769b7 | - | - | +| roborumble/axeBots.Musashi_2.18.jar | roborumble | robot | PASS | d96c381e473a9e9f | - | - | +| roborumble/axeBots.Okami_1.04.jar | roborumble | robot | PASS | 74bce683db58a4ec | - | - | +| roborumble/axeBots.SilverSurfer_2.53.33fix.jar | roborumble | robot | PASS | 9b6fc48236f56191 | - | - | +| roborumble/ayk.WallHugger_1.0.jar | roborumble | robot | PASS | 7d779898eaf34726 | - | - | +| roborumble/az.Ololobot_0.2.4.jar | roborumble | robot | FAIL (TR) | 5cf402dd473c1227 | - | - | +| roborumble/banshee.micro.Nexus6_0.3.0.jar | roborumble | robot | PASS | 0cf456b6f9cb9978 | - | - | +| roborumble/banshee.mini.Nexus6_0.2.0.jar | roborumble | robot | PASS | d4cda9b611b80d04 | - | - | +| roborumble/barontrozo.BaronTrozo_1.7.6.jar | roborumble | robot | PASS | 004179d3a54b0e5a | - | - | +| roborumble/bayen.UbaMicro_1.4.jar | roborumble | robot | PASS | 26edca5dc7a5d68a | - | - | +| roborumble/bayen.UbaRamLT_1.0.jar | roborumble | robot | DISCREPANCY (score) | 13b1bb4843e9815b | - | - | +| roborumble/bayen.nano.Squirrel_0.2.jar | roborumble | robot | PASS | 6fcfbf55b4d8ff5c | - | - | +| roborumble/bayen.nut.Squirrel_1.621.jar | roborumble | robot | DISCREPANCY (score) | 517b1c7cec309414 | - | - | +| roborumble/bbo.RamboT_0.3.jar | roborumble | robot | PASS | df99f8a1d6c00d7e | - | - | +| roborumble/bbo.TheRoof_1.4.3.jar | roborumble | robot | PASS | 39adaf77fb8fca87 | - | - | +| roborumble/benhorner.PureAggression_0.2.6.jar | roborumble | robot | PASS | ca5a8e78cc56d369 | - | - | +| roborumble/bigpete.Stewie_1.0.jar | roborumble | robot | PASS | e8b293a979c1c0b4 | - | - | +| roborumble/bing2.Melody_1.3.1.jar | roborumble | robot | DISCREPANCY (score) | 6d5c62b55bd1282c | - | - | +| roborumble/bjl.LoneDragon_0.5.jar | roborumble | robot | PASS | b407ed4b3237d3e7 | - | - | +| roborumble/bk.Shooter_1.0.jar | roborumble | robot | DISCREPANCY (score) | 17eb9124acd74e55 | - | - | +| roborumble/blir.micro.blixi.Blixi_1.2.jar | roborumble | robot | DISCREPANCY (score) | 32ac2de21087f5bd | - | - | +| roborumble/blir.mini.oops.Splooshlu_2.0.jar | roborumble | robot | PASS | 9d2209ef822252f0 | - | - | +| roborumble/blir.nano.Bruce_R1.0.0.jar | roborumble | robot | PASS | e98608d4efb99503 | - | - | +| roborumble/blir.nano.Cabbage_R1.0.1.jar | roborumble | robot | DISCREPANCY (score) | 14e36192003c6140 | - | - | +| roborumble/blir.nano.inch.Inchworm_1.0.jar | roborumble | robot | PASS | 7bd4cdf08768932e | - | - | +| roborumble/blr.Chicken001_0.1.jar | roborumble | robot | PASS | fa1b7716484381ca | - | - | +| roborumble/bndl.LostLion_1.2.jar | roborumble | robot | PASS | 1a29913b8f87ac3a | - | - | +| roborumble/boe.Minerva_0.80.jar | roborumble | robot | PASS | 8205a7ec0f3730f8 | - | - | +| roborumble/bons.NanoStalker_1.2.jar | roborumble | robot | DISCREPANCY (score) | 73559040c308ecc0 | - | - | +| roborumble/bots.UberBot_1.2c.jar | roborumble | robot | PASS | 258737685abd4504 | - | - | +| roborumble/bots.UnterBot_1.0.jar | roborumble | robot | DISCREPANCY (score) | a57b9c4d5a68c0e3 | - | - | +| roborumble/bots.UnterExBot_1.0.jar | roborumble | robot | DISCREPANCY (score) | 0eeef9f8e9a05217 | - | - | +| roborumble/bp.Kuma_1.0.jar | roborumble | robot | DISCREPANCY (score) | a5efd143dba4df0f | - | - | +| roborumble/braaropolis.Abot_1.0.jar | roborumble | robot | DISCREPANCY (score) | 36610aff4c63ca29 | - | - | +| roborumble/brainfade.Fallen_0.63.jar | roborumble | robot | PASS | cfd838bd46fc2f16 | - | - | +| roborumble/brainfade.melee.Dusk_0.44.jar | roborumble | robot | PASS | c24d76413b604bbc | - | - | +| roborumble/bts.mega.Gnarly_1.4.jar | roborumble | robot | PASS | ea1a4d3c629039e8 | - | - | +| roborumble/bts.wiki.RipCurl_0.9b.jar | roborumble | robot | FAIL (TR) | 0b71b2a50f905e18 | - | - | +| roborumble/buba.Archivist_0.1.jar | roborumble | robot | PASS | d18c23f855ed3f66 | - | - | +| roborumble/buba.Buba_0.3.jar | roborumble | robot | PASS | 92de0a656f602dca | - | - | +| roborumble/bumblebee.Bumblebee_1.0.jar | roborumble | robot | PASS | 684d3891682e1261 | - | - | +| roborumble/bvh.fnr.Fenrir_0.36l.jar | roborumble | robot | PASS | c42dcc45e38dcd92 | - | - | +| roborumble/bvh.frg.Friga_0.112dev.jar | roborumble | robot | PASS | 2c64749929672cae | - | - | +| roborumble/bvh.fry.Freya_0.82.jar | roborumble | robot | FAIL (TR) | d32b1f5ce3e25f80 | - | - | +| roborumble/bvh.hdr.Hodur_0.4.jar | roborumble | robot | DISCREPANCY (score) | bc89209e78a077fc | - | - | +| roborumble/bvh.loki.Loki_0.5.jar | roborumble | robot | DISCREPANCY (score) | c679e09780c18a52 | - | - | +| roborumble/bvh.micro.Freya_0.3.jar | roborumble | robot | PASS | 2f1498ceffdac7e0 | - | - | +| roborumble/bvh.micro.Svadilfari_0.2.jar | roborumble | robot | PASS | 4dadfc08d52161ce | - | - | +| roborumble/bvh.mini.Fenrir_0.39.jar | roborumble | robot | PASS | ff57f8cea1909f17 | - | - | +| roborumble/bvh.mini.Freya_0.55.jar | roborumble | robot | PASS | 815497cd00aa57b0 | - | - | +| roborumble/bvh.mini.Mjolnir_0.3.jar | roborumble | robot | DISCREPANCY (score) | 3d1c3e239d06d795 | - | - | +| roborumble/bvh.mini.Wodan_0.50.jar | roborumble | robot | PASS | d89e8a196146f1ec | - | - | +| roborumble/bvh.tyr.Tyr_1.74.jar | roborumble | robot | PASS | f40bad8a5aff304f | - | - | +| roborumble/bwbaugh.nano.Tirunculus_0.0.0a.jar | roborumble | robot | DISCREPANCY (score) | b935555308fc01c3 | - | - | +| roborumble/bzdp.BoxCar_2.0.jar | roborumble | robot | PASS | 67c108afb1e67978 | - | - | +| roborumble/bzdp.Pansy_2.1.jar | roborumble | robot | PASS | a96b223336b776df | - | - | +| roborumble/caimano.Furia_Ceca_0.22.jar | roborumble | robot | DISCREPANCY (score) | 99d4763f956857c8 | - | - | +| roborumble/casey.Flee_1.0.jar | roborumble | robot | PASS | ad19841f89469280 | - | - | +| roborumble/cb.Domogled_1.2.jar | roborumble | robot | FAIL (TR) | ab4a97816c447d60 | - | - | +| roborumble/cb.fire.Firestarter_2.0f.jar | roborumble | robot | FAIL (TR) | 2002e30ad998c641 | - | - | +| roborumble/cb.mega.RandomBot_1.0.jar | roborumble | robot | FAIL (TR) | 55bade0feb6ac865 | - | - | +| roborumble/cb.nano.Insomnia_1.0.jar | roborumble | robot | PASS | 997241f811003c48 | - | - | +| roborumble/cbot.agile.Nibbler_0.2.jar | roborumble | robot | DISCREPANCY (score) | 50feb7c195d9d53e | - | - | +| roborumble/cbot.cbot.CBot_0.8.jar | roborumble | robot | FAIL (TR) | 7337304cd84cf9c0 | - | - | +| roborumble/cf.OldMan.OldManXP_0.1.jar | roborumble | robot | PASS | f54923f1b67ca9f0 | - | - | +| roborumble/cf.mini.Chiva_1.0.jar | roborumble | robot | PASS | 336aaa29d4d4cb86 | - | - | +| roborumble/cf.proto.Shiva_2.2.jar | roborumble | robot | PASS | 92716decc58e938d | - | - | +| roborumble/cf.star.Star2_1.23.jar | roborumble | robot | PASS | 8c06e2125b4e11c4 | - | - | +| roborumble/ch.rhj.rbc.RHJ1_1.0.jar | roborumble | robot | PASS | 09fc48a0219093cf | - | - | +| roborumble/chase.pm.Pytko_1.0.jar | roborumble | robot | PASS | 5621c60c56abe7ae | - | - | +| roborumble/chickenfuego.UrChicken2_1.0.jar | roborumble | robot | PASS | ac7ec21a2a822b4f | - | - | +| roborumble/cjk.Merkava_0.1.1.jar | roborumble | robot | PASS | ca8bad284ef8d30e | - | - | +| roborumble/cjm.Che_1.2.jar | roborumble | robot | PASS | 30b3c8b16bb49f75 | - | - | +| roborumble/cli.Dancer_1.1.jar | roborumble | robot | PASS | 75019a166932d5c2 | - | - | +| roborumble/cli.WasteOfAmmo_1.0.jar | roborumble | robot | DISCREPANCY (no score) | ad72f39287f5b880 | - | - | +| roborumble/codemojo.nano.Woot_1.0.jar | roborumble | robot | PASS | ec2f186e76fabdbc | - | - | +| roborumble/com.arsenic.NewTest_1.0.jar | roborumble | robot | PASS | bec9ffc1e65a95d1 | - | - | +| roborumble/com.blogspot.malinkody.DestrobotMalin_1.0.jar | roborumble | robot | DISCREPANCY (score) | 41f11a8de1bd0c5b | - | - | +| roborumble/com.cohesiva.robocode.ManOwaR_1.0.jar | roborumble | robot | PASS | b68f0a69b507a3fe | - | - | +| roborumble/com.sociesc.T1000_1.0.0.jar | roborumble | robot | DISCREPANCY (no score) | c50ef80274e4a320 | - | - | +| roborumble/com.spp.robocode.MostlyHarmless_010.jar | roborumble | robot | PASS | 7f12b894b7bb568c | - | - | +| roborumble/com.syncleus.robocode.Dreadnaught_0.1.jar | roborumble | robot | PASS | f963f02cb575c278 | - | - | +| roborumble/com.timothyveletta.FuzzyBot_1.1.jar | roborumble | robot | PASS | f3979e1d91165e7b | - | - | +| roborumble/conscience.Bulldozer_1.0a.jar | roborumble | robot | DISCREPANCY (score) | 34ee10313f50e735 | - | - | +| roborumble/conscience.Electron_1.3g.jar | roborumble | robot | PASS | 60e25212f69814cd | - | - | +| roborumble/conscience.Idem_1.0a.jar | roborumble | robot | PASS | 2c5f75820a136af0 | - | - | +| roborumble/conscience.Suicidal_1.1.jar | roborumble | robot | DISCREPANCY (no score) | 126c32b41d68f5f3 | - | - | +| roborumble/cre.Karolos_0.32.jar | roborumble | robot | FAIL (TR) | 0c5b559772cf4ee1 | - | - | +| roborumble/cs.Nene_1.0.5.jar | roborumble | robot | DISCREPANCY (score) | 77f6703bbf53891a | - | - | +| roborumble/cs.PumpkinPie_1.0.jar | roborumble | robot | PASS | 90e4313a94769aff | - | - | +| roborumble/cs.Wren_1.0.jar | roborumble | robot | PASS | c9973e9dd44d5919 | - | - | +| roborumble/cs.s2.Seraphim_2.3.1.jar | roborumble | robot | PASS | de2ae85b37c1610b | - | - | +| roborumble/csm.NthGeneration_0.04.jar | roborumble | robot | PASS | e8bab6b8456b7c4a | - | - | +| roborumble/csp.Eagle_3.30.jar | roborumble | robot | DISCREPANCY (score) | e0122d77dc924a71 | - | - | +| roborumble/css.Delitioner_0.11.jar | roborumble | robot | PASS | 9bf3a4bffbd5125f | - | - | +| roborumble/cuoq.Kakera_1.0.jar | roborumble | robot | PASS | 99a4b47c6b169333 | - | - | +| roborumble/cw.megas.Blade_0.8.jar | roborumble | robot | FAIL (TR) | 8fd749571b62d83f | - | - | +| roborumble/cw.megas.GhostShell_GT.jar | roborumble | robot | PASS | 624c2e5957e9c806 | - | - | +| roborumble/cw.megas.Gridd_0.4.jar | roborumble | robot | PASS | b0e92913f32f5e4a | - | - | +| roborumble/cw.megas.Polar_3.2.jar | roborumble | robot | PASS | 275e5d14496de98c | - | - | +| roborumble/cw.megas.Silhouette_1.1.jar | roborumble | robot | PASS | c619f7cbb9bcea81 | - | - | +| roborumble/cx.BlestPain_1.41.jar | roborumble | robot | PASS | 33f8afb939371ae3 | - | - | +| roborumble/cx.CigaretBH_1.03.jar | roborumble | robot | PASS | 1677b2a1b4827612 | - | - | +| roborumble/cx.Lacrimas_1.36.jar | roborumble | robot | PASS | 20139227a27029e4 | - | - | +| roborumble/cx.Princess_1.0.jar | roborumble | robot | PASS | ee8fec5f1ac10af9 | - | - | +| roborumble/cx.micro.Blur_0.2.jar | roborumble | robot | FAIL (TR) | cf57283fe7c065c6 | - | - | +| roborumble/cx.micro.Smoke_0.96.jar | roborumble | robot | PASS | d0ce3ae37d563131 | - | - | +| roborumble/cx.micro.Spark_0.6.jar | roborumble | robot | DISCREPANCY (score) | 4a48d9ed154a3163 | - | - | +| roborumble/cx.mini.BlackSwans_0.60.jar | roborumble | robot | PASS | 6b425d3c251fa7bc | - | - | +| roborumble/cx.mini.Cigaret_1.31.jar | roborumble | robot | PASS | 8547c53305c88bf5 | - | - | +| roborumble/cx.mini.Nimrod_0.55.jar | roborumble | robot | DISCREPANCY (score) | 13e1779cf8e10822 | - | - | +| roborumble/cx.nano.Smog_2.6.jar | roborumble | robot | DISCREPANCY (score) | c37a0d6ebee94fdf | - | - | +| roborumble/cyragia.Bot_1.1.jar | roborumble | robot | PASS | 962c336578cde35f | - | - | +| roborumble/da.NewBGank_1.4.jar | roborumble | robot | DISCREPANCY (score) | a25291b7dea73bfb | - | - | +| roborumble/daemons.DizzyA_1.0.jar | roborumble | robot | DISCREPANCY (score) | 4fb778b08e7b30a5 | - | - | +| roborumble/dam.MogBot_2.9.jar | roborumble | robot | FAIL (TR) | d949ac75405a14c5 | - | - | +| roborumble/dans.Cinnamon_1.2.jar | roborumble | robot | DISCREPANCY (score) | 4396cf2704a52d50 | - | - | +| roborumble/darkcanuck.Gaff_1.50.jar | roborumble | robot | FAIL (TR) | 970cb17042cd15f3 | - | - | +| roborumble/darkcanuck.Holden_1.13a.jar | roborumble | robot | FAIL (TR) | 3e764de13ff9996b | - | - | +| roborumble/darkcanuck.Pris_0.92.jar | roborumble | robot | FAIL (TR) | a1c846f8e60831ac | - | - | +| roborumble/davidalves.Firebird_0.25.jar | roborumble | robot | PASS | fae39438b7bb4d8a | - | - | +| roborumble/davidalves.PhoenixOS_1.1.jar | roborumble | robot | FAIL (TR) | 8f13036b4836dcbf | - | - | +| roborumble/davidalves.Phoenix_1.02.jar | roborumble | robot | PASS | 8abd22893c0c806b | - | - | +| roborumble/davidalves.net.DuelistMicroMkII_1.1.jar | roborumble | robot | DISCREPANCY (score) | 34cf1f962dcb1bcd | - | - | +| roborumble/davidalves.net.DuelistMicro_1.22.jar | roborumble | robot | DISCREPANCY (score) | 4d34a6e0b2152b18 | - | - | +| roborumble/davidalves.net.DuelistMini_1.1.jar | roborumble | robot | PASS | 6fb819cdb10fc868 | - | - | +| roborumble/davidalves.net.DuelistNano_1.0.jar | roborumble | robot | PASS | eeb33d1a7dbabc53 | - | - | +| roborumble/davidalves.net.Duelist_0.1.6src.jar | roborumble | robot | PASS | da9c6f4187b20af6 | - | - | +| roborumble/davv.DOne_b002.jar | roborumble | robot | DISCREPANCY (score) | 8948876072cf5515 | - | - | +| roborumble/dcs.Eater_of_Worlds_1.1.3-A.jar | roborumble | robot | PASS | acfc2f677316f7a1 | - | - | +| roborumble/dcs.Eater_of_Worlds_Mini_1.0.jar | roborumble | robot | PASS | aa8ea784d11f187f | - | - | +| roborumble/dcs.PM.Eater_of_Worlds_PM_1.2.jar | roborumble | robot | DISCREPANCY (score) | ff977f89ff8c2e6b | - | - | +| roborumble/de.erdega.robocode.Polyphemos_0.4.jar | roborumble | robot | DISCREPANCY (score) | 2b4de671d6c6e4bf | - | - | +| roborumble/de.simpleworks.robocode.bots.swiBot_1.0.jar | roborumble | robot | PASS | 8a7446289797b1b0 | - | - | +| roborumble/deith.Czolgzilla_0.11.jar | roborumble | robot | PASS | 08cef06b36787464 | - | - | +| roborumble/demetrix.ForceMajeure_0.75.jar | roborumble | robot | PASS | bbf69d95d8f28b8f | - | - | +| roborumble/demetrix.nano.Neutrino_0.27.jar | roborumble | robot | PASS | c87a4b8d228674d0 | - | - | +| roborumble/demetrix.nano.SledgeHammer_0.22.jar | roborumble | robot | DISCREPANCY (score) | 804cc154798fef47 | - | - | +| roborumble/deo.CloudBot_1.3.jar | roborumble | robot | DISCREPANCY (score) | 78bba33b96e662cd | - | - | +| roborumble/deo.FlowerBot_1.0.jar | roborumble | robot | PASS | fc65e7d5693090d9 | - | - | +| roborumble/deo.virtual.RainbowBot_1.0.jar | roborumble | robot | DISCREPANCY (score) | 38ab74151e9be2ed | - | - | diff --git a/compat-test/parity_registry.py b/compat-test/parity_registry.py new file mode 100644 index 0000000..e8d0c34 --- /dev/null +++ b/compat-test/parity_registry.py @@ -0,0 +1,159 @@ +"""Tracked, append-only parity observations for the compatibility harness.""" + +from __future__ import annotations + +import hashlib +import json +import re +from collections import Counter +from pathlib import Path + + +SCHEMA_VERSION = 1 +EXCEPTION_RE = re.compile(r"\b((?:[a-zA-Z_$][\w$]*\.)+[A-Z][\w$]*(?:Exception|Error))\b") +FRAME_RE = re.compile(r"^\s*at\s+([\w.$]+)\([^)]*\)", re.MULTILINE) +FRAME_NOISE_PREFIXES = ("java.", "javax.", "jdk.", "sun.", "robocode.", "dev.robocode.") +UNRESOLVED_STATUSES = frozenset(( + "DISCREPANCY (errors)", "DISCREPANCY (score)", "DISCREPANCY (no score)", + "DISCREPANCY (outcome)", "FAIL (RC)", "FAIL (TR)", "FAIL (both)", +)) + + +def sha256_file(path: Path) -> str | None: + if not path.is_file(): + return None + digest = hashlib.sha256() + with path.open("rb") as stream: + for block in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def error_signatures(errors: list[str], log_text: str = "") -> list[dict[str, str]]: + """Return exception class plus first legacy application frame for each distinct error.""" + text = "\n".join(errors + ([log_text] if log_text else [])) + signatures: set[tuple[str, str]] = set() + for match in EXCEPTION_RE.finditer(text): + origin = "unknown" + following = text[match.end():] + for frame in FRAME_RE.finditer(following): + candidate = frame.group(1) + if not candidate.startswith(FRAME_NOISE_PREFIXES): + origin = candidate + break + signatures.add((match.group(1), origin)) + return [ + {"exception": exception, "origin": origin} + for exception, origin in sorted(signatures) + ] + + +def signature_keys(signatures: list[dict[str, str]]) -> set[tuple[str, str]]: + return {(s["exception"], s.get("origin", "unknown")) for s in signatures} + + +def compare_errors(rc: list[dict[str, str]], tr: list[dict[str, str]]) -> dict[str, list[dict[str, str]]]: + rc_keys, tr_keys = signature_keys(rc), signature_keys(tr) + return { + "classic_only": [ + {"exception": exception, "origin": origin} + for exception, origin in sorted(rc_keys - tr_keys) + ], + "tank_royale_only": [ + {"exception": exception, "origin": origin} + for exception, origin in sorted(tr_keys - rc_keys) + ], + } + + +def is_unresolved(status: str) -> bool: + return status in UNRESOLVED_STATUSES + + +def load_registry(path: Path) -> dict: + if path.exists(): + return json.loads(path.read_text(encoding="utf-8")) + return {"schema_version": SCHEMA_VERSION, "subjects": {}} + + +def observation_id(key: str, entry: dict, manifest: dict) -> str: + payload = json.dumps({"key": key, "entry": entry, "manifest": manifest}, sort_keys=True) + return hashlib.sha256(payload.encode("utf-8")).hexdigest()[:16] + + +def subject_identity(key: str, entry: dict, collection_dir: Path) -> dict: + collection, jar_name = key.split("/", 1) + jar = collection_dir / collection / jar_name + return { + "key": key, + "division": collection, + "jar": jar_name, + "jar_sha256": sha256_file(jar), + "kind": "team" if entry.get("setup", {}).get("team") else "robot", + "classic_selected": entry.get("rc", {}).get("selected"), + } + + +def sync_state(registry: dict, state: dict, collection_dir: Path, manifest: dict) -> int: + """Append state observations without replacing earlier evidence.""" + added = 0 + subjects = registry.setdefault("subjects", {}) + for key, entry in sorted(state.get("robots", {}).items()): + subject = subjects.setdefault(key, { + "identity": subject_identity(key, entry, collection_dir), + "diagnosis": {"state": "untriaged", "cause": None, "owner": None}, + "observations": [], + }) + oid = observation_id(key, entry, manifest) + if any(observation["id"] == oid for observation in subject["observations"]): + continue + subject["observations"].append({ + "id": oid, + "completed_at": entry.get("completed_at"), + "status": entry.get("status"), + "delta_pct": entry.get("delta_pct"), + "setup": entry.get("setup"), + "classic": entry.get("rc", {}), + "tank_royale": entry.get("tr", {}), + "manifest": manifest, + }) + subject["latest_observation"] = oid + subject["status"] = entry.get("status") + added += 1 + return added + + +def render_markdown(registry: dict) -> str: + subjects = registry.get("subjects", {}) + counts = Counter(subject.get("status", "unknown") for subject in subjects.values()) + lines = [ + "# Legacy robot parity registry", + "", + "This generated table is the reviewed index of the append-only observations in `parity-registry.json`. Classic Robocode is the reference; an unresolved row requires diagnosis and a focused retest after its repair.", + "", + "## Current status", + "", + "| Status | Subjects |", + "|---|---:|", + ] + lines.extend(f"| {status} | {count} |" for status, count in sorted(counts.items())) + lines.extend([ + "", + "## Subjects", + "", + "| Subject | Division | Kind | Status | Latest observation | Cause | Owner |", + "|---|---|---|---|---|---|---|", + ]) + for key, subject in sorted(subjects.items()): + identity = subject["identity"] + diagnosis = subject.get("diagnosis", {}) + lines.append( + f"| {key} | {identity['division']} | {identity['kind']} | {subject.get('status', 'unknown')} | " + f"{subject.get('latest_observation', '-')} | {diagnosis.get('cause') or '-'} | {diagnosis.get('owner') or '-'} |" + ) + return "\n".join(lines) + "\n" + + +def save_registry(registry: dict, json_path: Path, markdown_path: Path) -> None: + json_path.write_text(json.dumps(registry, indent=2, sort_keys=True) + "\n", encoding="utf-8") + markdown_path.write_text(render_markdown(registry), encoding="utf-8") diff --git a/compat-test/test_parity_registry.py b/compat-test/test_parity_registry.py new file mode 100644 index 0000000..4457fed --- /dev/null +++ b/compat-test/test_parity_registry.py @@ -0,0 +1,77 @@ +import importlib.util +import tempfile +import unittest +from pathlib import Path + + +MODULE = Path(__file__).with_name("parity_registry.py") +SPEC = importlib.util.spec_from_file_location("parity_registry", MODULE) +registry = importlib.util.module_from_spec(SPEC) +SPEC.loader.exec_module(registry) + + +class ParityRegistryTest(unittest.TestCase): + def testHARN003_UnitPositive_ErrorSignatureUsesClassAndLegacyOrigin(self): + signatures = registry.error_signatures([ + "java.lang.NullPointerException: boom\n" + " at dev.robocode.tankroyale.bridge.BotPeer.dispatch(BotPeer.java:10)\n" + " at legacy.Bot.onScannedRobot(Bot.java:20)" + ]) + self.assertEqual( + [{"exception": "java.lang.NullPointerException", "origin": "legacy.Bot.onScannedRobot"}], + signatures, + ) + + def testHARN003_UnitNegative_SameExceptionFromDifferentCallbackIsDifferent(self): + classic = [{"exception": "java.lang.NullPointerException", "origin": "legacy.Bot.run"}] + tank = [{"exception": "java.lang.NullPointerException", "origin": "legacy.Bot.onScannedRobot"}] + difference = registry.compare_errors(classic, tank) + self.assertEqual(classic, difference["classic_only"]) + self.assertEqual(tank, difference["tank_royale_only"]) + + def testHARN001_UnitPositive_StateSyncAppendsWithoutReplacingEarlierObservation(self): + state = {"robots": {"roborumble/a.Bot_1.0.jar": { + "status": "PASS", "delta_pct": 1.0, "completed_at": "2026-09-09T00:00:00Z", + "setup": {"team": False}, "rc": {}, "tr": {}, + }}} + data = {"schema_version": 1, "subjects": {}} + manifest = {"bridge_commit": "abc"} + self.assertEqual(1, registry.sync_state(data, state, Path("missing"), manifest)) + self.assertEqual(0, registry.sync_state(data, state, Path("missing"), manifest)) + self.assertEqual("PASS", data["subjects"]["roborumble/a.Bot_1.0.jar"]["status"]) + + def testHARN001_UnitNegative_FailedCasesRemainUnresolved(self): + self.assertTrue(registry.is_unresolved("FAIL (TR)")) + self.assertTrue(registry.is_unresolved("DISCREPANCY (score)")) + self.assertFalse(registry.is_unresolved("PASS")) + + def testHARN001_UnitPositive_TeamIdentityIncludesItsJarDigest(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + jar = root / "teamrumble" / "legacy.Team_1.0.jar" + jar.parent.mkdir() + jar.write_bytes(b"team") + identity = registry.subject_identity("teamrumble/legacy.Team_1.0.jar", { + "setup": {"team": True}, "rc": {"selected": "legacy.Team 1.0"}, + }, root) + self.assertEqual("team", identity["kind"]) + self.assertEqual(64, len(identity["jar_sha256"])) + + def testHARN001_UnitPositive_NewObservationRetainsPriorRun(self): + data = {"schema_version": 1, "subjects": {}} + entry = { + "status": "DISCREPANCY (score)", "delta_pct": 40.0, + "completed_at": "2026-09-09T00:00:00Z", "setup": {}, "rc": {}, "tr": {}, + } + state = {"robots": {"roborumble/a.Bot_1.0.jar": entry}} + registry.sync_state(data, state, Path("missing"), {"bridge_commit": "one"}) + entry["completed_at"] = "2026-09-10T00:00:00Z" + entry["status"] = "PASS" + registry.sync_state(data, state, Path("missing"), {"bridge_commit": "two"}) + subject = data["subjects"]["roborumble/a.Bot_1.0.jar"] + self.assertEqual(2, len(subject["observations"])) + self.assertEqual("PASS", subject["status"]) + + +if __name__ == "__main__": + unittest.main() diff --git a/docs/capabilities/CAP-005-score-parity/README.md b/docs/capabilities/CAP-005-score-parity/README.md index ed87372..d2826de 100644 --- a/docs/capabilities/CAP-005-score-parity/README.md +++ b/docs/capabilities/CAP-005-score-parity/README.md @@ -23,7 +23,7 @@ The relationship between this capability and its neighbours is therefore diagnos ## What it covers -Score comparability per division at official parameters, the regression gate over a pinned watch list of bots that have diverged, and the rule that a bot throwing only under the bridge ends its battle immediately rather than producing a score. +Pinned parity cases per jar or team at official parameters, the regression gate over a pinned watch list, and the rule that an error or completion mismatch is an unresolved case rather than a score. The tracked registry keeps every case's engine artifacts, observations, diagnosis, and repair retest. ## What it does not cover diff --git a/docs/capabilities/CAP-005-score-parity/criteria.md b/docs/capabilities/CAP-005-score-parity/criteria.md index 58399e8..1154082 100644 --- a/docs/capabilities/CAP-005-score-parity/criteria.md +++ b/docs/capabilities/CAP-005-score-parity/criteria.md @@ -40,10 +40,11 @@ Feature: Score parity across the rumble collections @SCORE-003 @draft Scenario: A bot that throws only under the bridge stops its battle Test-type: Integration - Given a bot whose classic run produced a known set of exception signatures - When the Tank Royale run produces a signature the classic run did not + Given a bot whose classic run produced a known set of normalized exception signatures + When the Tank Royale run produces a class-and-legacy-origin signature the classic run did not Then the battle is stopped at that point and the signature is recorded And no score is reported for that pairing + # A signature is exception class plus the first legacy callback or application frame. # Decided against the classic baseline, so this is a verdict rather than a judgment. # Draft only because the harness is Python — see AN-003. Plan door: M-001. diff --git a/docs/capabilities/CAP-007-compatibility-harness/README.md b/docs/capabilities/CAP-007-compatibility-harness/README.md index 89987a1..fe02453 100644 --- a/docs/capabilities/CAP-007-compatibility-harness/README.md +++ b/docs/capabilities/CAP-007-compatibility-harness/README.md @@ -23,7 +23,7 @@ An instrument whose failures are indistinguishable from findings needs promises ## What it covers -Staging a robot for each engine without modifying it, running the battle at the division's official parameters, surviving robots that hang or crash, checkpointing so a multi-hour sweep can be interrupted and resumed, classifying each result, averaging repeats for a regression verdict, stopping a battle on a Tank-Royale-only exception, and emitting per-turn traces for diagnosis. +Staging a robot for each engine without modifying it, running the battle at the division's official parameters, surviving robots that hang or crash, checkpointing so a multi-hour sweep can be interrupted and resumed, classifying each result, maintaining the tracked parity registry, averaging repeats for a regression verdict, stopping Tank Royale score collection on an asymmetric error, and emitting per-turn traces for diagnosis. ## What it does not cover diff --git a/docs/capabilities/CAP-007-compatibility-harness/criteria.md b/docs/capabilities/CAP-007-compatibility-harness/criteria.md index 6a0ca27..7eb8c66 100644 --- a/docs/capabilities/CAP-007-compatibility-harness/criteria.md +++ b/docs/capabilities/CAP-007-compatibility-harness/criteria.md @@ -64,10 +64,10 @@ Feature: The compatibility harness @HARN-006 @draft Scenario: A Tank-Royale-only exception aborts the battle at once Test-type: Integration - Given a classic run that produced a known set of exception signatures - When the Tank Royale run emits a signature not in that set + Given a classic run that produced a known set of normalized exception signatures + When the Tank Royale run emits a class-and-legacy-origin signature not in that set Then the battle is stopped at that point and the signature is recorded - # The rule C-004 states. Does not exist. Plan door: M-001. + # The rule C-004 states. A signature is exception class plus the first legacy callback or application frame. Plan door: M-001. @HARN-007 @draft Scenario: Each division runs at its official parameters diff --git a/docs/capabilities/CAP-007-compatibility-harness/design.md b/docs/capabilities/CAP-007-compatibility-harness/design.md index d6df1b0..45f0601 100644 --- a/docs/capabilities/CAP-007-compatibility-harness/design.md +++ b/docs/capabilities/CAP-007-compatibility-harness/design.md @@ -26,7 +26,13 @@ Stage for Tank Royale: the jar with the bridge, Bot API, and wrapper jars alongs That duplication is load-bearing rather than tidy. `C-004`'s fail-fast rule needs an exception attributed to a participant, and two instances writing to one log makes attribution impossible. -Compare: scores as the sum of both participants' totals, errors as stack-trace-shaped signatures scraped from consoles and logs. +Compare: scores as the sum of all staged participants' totals, errors as normalized exception class plus the first legacy callback or application frame scraped from consoles and logs. A completion mismatch, an unmatched normalized error, a timeout, or a confirmed score gap is a parity case rather than a pass. + +## Durable parity registry + +`compat-test/parity-registry.json` is append-only per subject. An observation carries the official setup, source jar digest, selected classic identity, team classification, both engine outcomes, normalized errors, and the bridge, Tank Royale, Bot API, wrapper, and runner fingerprints that produced it. `parity-registry.md` is generated from that JSON and is the review table for every subject. + +The harness imports an interrupted checkpoint with `--sync-registry`, runs new first-pass work in bounded `--limit` batches, and selects retests with `--retry-unresolved` or `--retest-cause`. Matched subjects stay recorded and are not selected after an unrelated repair. ## What changes for the milestone @@ -44,6 +50,6 @@ The bytecode transform that rewrites `while(true)` loops fails on modern JVMs fo This is the kind of exclusion that needs justifying rather than accumulating. Each one narrows what the instrument can see, and a growing list of ignored signatures is how an instrument stops reporting the thing it was built for. `HARN-003` covers the classification including exclusions, so a new one has to be stated rather than added quietly. -## Why the report is untracked, and why that is a problem +## Why the registry is tracked -The generated report is excluded from version control along with the work directories and progress files. It is also the evidence `SCORE-001` is judged from, which means the corpus names evidence that exists only in whoever last ran the sweep's working tree, and a reviewer reading the acceptance brief cannot open it. Recorded as a blocked carrier during extraction; `M-006` has to resolve it when it produces the first real baseline. +The generated compatibility report remains a local checkpoint view. The parity registry is the reviewable evidence carrier for `SCORE-001`; it survives an interrupted sweep, names the artifacts that produced each result, and shows whether a later repair resolved the same case. diff --git a/docs/constraints/C-004-regression-gate.md b/docs/constraints/C-004-regression-gate.md index ad8f1cb..4cf9c21 100644 --- a/docs/constraints/C-004-regression-gate.md +++ b/docs/constraints/C-004-regression-gate.md @@ -3,14 +3,14 @@ id: C-004 type: constraint status: active links: [CAP-005, CAP-007] -title: A regression verdict averages repeats, and a Tank-Royale-only exception ends the battle +title: A regression verdict averages repeats, and an asymmetric error ends score collection source: The OQ-001 Q2 resolution, recorded in PDR-001 enforcement: agent provenance: inferred reversal-cost: high --- -# C-004 — A regression verdict averages repeats, and a Tank-Royale-only exception ends the battle +# C-004 — A regression verdict averages repeats, and an asymmetric error ends score collection Two rules, because a divergence between the engines arrives in two shapes and only one of them is a quantity. @@ -22,13 +22,13 @@ A single battle is not evidence about a bot. One watched bot has swung by a fact Bots whose scores are meaningless at any repeat count are marked as such on the watch list. They are reported and never fail the run, because a gate that cries wolf on the same bot every time trains people to ignore it. -## An exception classic did not produce ends the battle immediately +## An error that classic did not produce ends Tank Royale score collection immediately -When the Tank Royale side throws an exception whose signature the classic side did not produce, the battle is stopped and the signature is recorded. It is not scored, and it is not averaged. +Classic Robocode is the reference. When the Tank Royale side throws an exception whose normalized signature classic did not produce, the battle is stopped and the signature is recorded. A normalized signature contains the exception class and the first legacy callback or application frame; engine frames, paths, and line numbers are not part of it. The stopped battle is not scored or averaged. The two rules are opposites on purpose. A score difference is a quantity that noise can explain and repetition can resolve. The same bot throwing only under the bridge is a categorical fact about the bridge that no amount of repetition improves, and finishing the battle to produce a score for it spends minutes to learn nothing further. The classic side runs first, so its signatures are already the baseline the Tank Royale side is compared against. -This is also what keeps the error check from becoming a matter of opinion. Judged against a baseline rather than against a reviewer's sense of which exceptions look normal, "did this bot misbehave only under the bridge" has an answer. +An error or completion mismatch in either direction is an unresolved parity case. The Tank Royale-only case can stop immediately because classic has already run; a classic-only mismatch is recorded after Tank Royale completes. This keeps the comparison objective: the registry compares observable outcomes, not a reviewer's sense of which exception looks normal. ## Residual diff --git a/docs/decisions/PDR-003-versioned-parity-registry.md b/docs/decisions/PDR-003-versioned-parity-registry.md new file mode 100644 index 0000000..1eb8925 --- /dev/null +++ b/docs/decisions/PDR-003-versioned-parity-registry.md @@ -0,0 +1,23 @@ +--- +id: PDR-003 +type: decision +status: inferred +author: agent +accepted-by: [] +links: [CAP-005, CAP-007, C-004, P-001] +title: Treat every rumble subject as a versioned parity case against classic Robocode +--- + +# PDR-003 — Treat every rumble subject as a versioned parity case against classic Robocode + +## Decision + +The compatibility harness keeps an append-only, tracked parity registry for every robot jar and team. Classic Robocode is the behavioural reference. Each observation records the source identity, official setup, engine artifacts, outcomes, normalized errors, and the later diagnosis or repair that changed its status. + +Errors compare by exception class and first legacy callback or application frame. Tank-Royale-only errors stop score collection immediately because classic has already established the reference. Completion and error mismatches in either direction remain unresolved cases. + +First-pass work uses bounded batches. A repair retests only unresolved cases tagged to its named cause and cases sharing that cause; matched cases remain evidence and are not rerun by default. Score gaps are investigated only after the existing repeated-measurement rule confirms them. + +## Consequences + +The registry, rather than an ignored local report, is the evidence carrier for the population-level M-006 judgment. A repair can show which observed failures it fixed without rerunning healthy jars. The collection stays read-only, and an upstream Tank Royale repair is rebuilt as a compatible Bot API and runner pair before its cases are retested. diff --git a/docs/decisions/README.md b/docs/decisions/README.md index 7f90b2a..4f6cfbf 100644 --- a/docs/decisions/README.md +++ b/docs/decisions/README.md @@ -33,4 +33,5 @@ A decision that changes a methodology contract inventories every live carrier th - [IDR-007 — FIO-004 stays @draft; classic's own evidence for it depends on a SecurityManager this bridge cannot have](IDR-007-fio-004-stays-draft-no-securitymanager.md) · `inferred` — `CH-009` closes `FIO-001`, `FIO-002`, and `FIO-003` but leaves `FIO-004` `@draft`. - [ADR-002 — Map team robots onto Tank Royale's native team model rather than reconstructing team semantics](ADR-002-map-teams-onto-tank-royales-native-team-model.md) · `inferred` — The bridge maps a classic team onto Tank Royale's own team concept: each team member becomes its own Tank Royale bot process, grouped by the Tank Royale booter's own team mechanism (a `teamMembers`… - [IDR-008 — Preserve arbitrary classic Serializable team messages through a bridge envelope](IDR-008-preserve-serializable-team-messages.md) · `inferred` — Non-primitive legacy team messages use a bridge-owned Java-serialization envelope because Tank Royale's JSON serializer cannot reflect into every classic message type. +- [PDR-003 — Treat every rumble subject as a versioned parity case against classic Robocode](PDR-003-versioned-parity-registry.md) · `inferred` — The compatibility harness keeps an append-only, tracked parity registry for every robot jar and team. diff --git a/docs/plans/P-001-bridge-parity-campaign.md b/docs/plans/P-001-bridge-parity-campaign.md index 4fb5f7f..333139d 100644 --- a/docs/plans/P-001-bridge-parity-campaign.md +++ b/docs/plans/P-001-bridge-parity-campaign.md @@ -30,7 +30,7 @@ The milestone order after `M-001` follows the priority order the project had alr | M-004 | file I/O sandboxing | Robot file I/O is confined to the robot's data directory as classic confines it, and the bot that surfaced the defect completes a battle without the access errors it currently produces. | done | | M-005 | team robot support | The wrapper produces runnable Tank Royale bot directories for team jars, and the team division is no longer skipped by the harness. | done | | M-007 | every peer method is proven to route correctly | Each method on the five `robocode.robotinterfaces.peer` interfaces has a unit test proving which Bot API call it makes and with what arguments, and a reflective coverage check fails the build when a method has none. | done | -| M-006 | full sweep across all three divisions | A sweep at official parameters has run across the one-versus-one, melee, and team collections, and its report is the baseline the regression watch list is measured against. | todo | +| M-006 | versioned parity campaign across all three divisions | Every discoverable robot jar and team has a pinned, official-parameter parity case against classic Robocode. Every asymmetric outcome, error, hang, and confirmed score gap is diagnosed and retested after its repair; the tracked registry contains no unresolved bridge or Tank Royale discrepancy. | todo | ## Evidence doors @@ -92,7 +92,7 @@ They are bookkeeping rather than a second plan. A door closes when its criterion `M-005` is last of the implementation milestones because it is the only one that is greenfield rather than a repair, and because the team division is the smallest. Its mapping decision is resolved (`AN-013`, `ADR-002`), the wrapper/peer groundwork landed in `CH-010`, and `CH-011` closes the exit criterion by running grouped team entries through both engines. `TEAM-002` remains an evidence door for the protocol's unresolved classic-name versus Tank-Royale-id identity difference; that does not reopen the milestone's narrower runnable-team criterion. -`M-006` closes the campaign by producing the baseline everything afterwards is measured against. It is deliberately not first: sweeping at official parameters before the foundation exists would produce another set of numbers nobody can act on. +`M-006` closes the campaign by keeping a versioned parity case for every collection subject and resolving the cases that differ. It is deliberately not first: sweeping at official parameters before the foundation exists would produce another set of numbers nobody can act on. ## What would change this plan From 037a69671f0a6405bd94ceec47c1083f9e584613 Mon Sep 17 00:00:00 2001 From: "Flemming N. Larsen" Date: Wed, 9 Sep 2026 20:01:17 +0200 Subject: [PATCH 3/5] Digest versioned M-006 parity campaign --- .clue/id-ledger.yaml | 4 + .../open-questions.md | 3 - .../proposal.md | 15 -- .../tasks.md | 9 -- compat-test/compat_test.py | 31 ++++ compat-test/parity-registry.json | 130 ++++++++--------- compat-test/parity-registry.md | 132 +++++++++--------- compat-test/parity_registry.py | 17 ++- compat-test/test_parity_registry.py | 7 + 9 files changed, 188 insertions(+), 160 deletions(-) delete mode 100644 changes/CH-014-m006-versioned-parity-registry/open-questions.md delete mode 100644 changes/CH-014-m006-versioned-parity-registry/proposal.md delete mode 100644 changes/CH-014-m006-versioned-parity-registry/tasks.md diff --git a/.clue/id-ledger.yaml b/.clue/id-ledger.yaml index b16bc1c..a0b0d18 100644 --- a/.clue/id-ledger.yaml +++ b/.clue/id-ledger.yaml @@ -136,6 +136,10 @@ events: - {id: PDR-003, kind: numeric, state: reserved, prefix: PDR, component: "3"} - {id: HARN-001, kind: numeric, state: reserved, prefix: HARN, component: "1"} - {id: PDR-003, kind: numeric, state: live, prefix: PDR, component: "3"} + - {id: TASKS-007, kind: numeric, state: reserved, prefix: TASKS, component: "7"} + - {id: OQ-005, kind: numeric, state: reserved, prefix: OQ, component: "5"} + - {id: TASKS-007, kind: numeric, state: live, prefix: TASKS, component: "7"} + - {id: OQ-005, kind: numeric, state: live, prefix: OQ, component: "5"} high-water: - {id: ADR-002, kind: numeric, state: reserved, prefix: ADR, component: "2"} - {id: AN-014, kind: numeric, state: reserved, prefix: AN, component: "14"} diff --git a/changes/CH-014-m006-versioned-parity-registry/open-questions.md b/changes/CH-014-m006-versioned-parity-registry/open-questions.md deleted file mode 100644 index afb6441..0000000 --- a/changes/CH-014-m006-versioned-parity-registry/open-questions.md +++ /dev/null @@ -1,3 +0,0 @@ -# Open questions - -None currently. A missing classic baseline, an unclassifiable error origin, or an upstream behaviour that cannot be reproduced locally becomes a registry case and a diagnosis task; it does not silently pass. diff --git a/changes/CH-014-m006-versioned-parity-registry/proposal.md b/changes/CH-014-m006-versioned-parity-registry/proposal.md deleted file mode 100644 index 90a9378..0000000 --- a/changes/CH-014-m006-versioned-parity-registry/proposal.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -id: CH-014 -type: change -status: proposed -links: [P-001#M-006] -title: Turn M-006 into a versioned legacy-robot parity campaign ---- - -# Proposal - -M-006 currently promises one sweep report. That report is ignored by Git, records only the latest observation, and cannot tell a reviewer whether a failure on Tank Royale is equivalent to classic Robocode or whether a later repair fixed the affected robots. - -This change makes classic Robocode the explicit behavioural reference and adds a tracked parity registry for every rumble jar and team. The registry records pinned engine artifacts, official division setup, outcome, normalized errors, score evidence, diagnosis, and repair retests. It retains healthy cases without rerunning them after unrelated repairs, while batches of unresolved cases are retested by named cause. - -The change revises M-006, C-004, CAP-005, and CAP-007 because it changes the campaign and measurement methodology. It records the decision in a PDR, upgrades the generated Cliewen carriers needed for coordinated identity allocation, and updates the harness and its tests. Participant jars remain read-only. diff --git a/changes/CH-014-m006-versioned-parity-registry/tasks.md b/changes/CH-014-m006-versioned-parity-registry/tasks.md deleted file mode 100644 index 729b47b..0000000 --- a/changes/CH-014-m006-versioned-parity-registry/tasks.md +++ /dev/null @@ -1,9 +0,0 @@ -# Tasks - -- [x] Commit the required Cliewen carrier migration, coordinated identity ledger, adopter role, and proposal; serves `P-001#M-006`. -- [x] Record the versioned parity-registry decision and revise the M-006 campaign, constraints, capabilities, criteria, designs, and harness guidance; serves `SCORE-001`, `SCORE-002`, `SCORE-003`, `SCORE-006`, `HARN-001`, `HARN-003`, and `HARN-006`. -- [x] Add a tracked parity registry, generated review table, artifact manifest, and migration path for checkpoint state; serves `SCORE-001` and `HARN-001`. -- [x] Extend the harness with origin-aware error equivalence, unresolved and cause-based retests, and 25-subject batch checkpoints; serves `SCORE-003`, `HARN-003`, and `HARN-006`. -- [ ] Add focused positive and negative tests for registry identity, status transitions, error normalization, score confirmation, and team cases; serves `SCORE-002`, `SCORE-003`, `HARN-001`, and `HARN-003`. -- [x] Import eligible official observations, run focused real-engine checks, and save the first registry checkpoint; serves `SCORE-001` and `SCORE-006`. -- [ ] Regenerate indexes, digest the permanent corpus, verify the committed candidate, and prepare the draft PR for review. diff --git a/compat-test/compat_test.py b/compat-test/compat_test.py index 09d0715..5eabadb 100644 --- a/compat-test/compat_test.py +++ b/compat-test/compat_test.py @@ -44,6 +44,7 @@ is_unresolved, load_registry, save_registry, + score_gap_confirmed, signature_keys, sync_state, ) @@ -966,6 +967,8 @@ def should_run(entry, opts, registry=None, key=None): return True if opts.retry_unresolved and is_unresolved(entry.get("status", "")): return True + if opts.confirm_score and entry.get("status") == "DISCREPANCY (score)": + return True if opts.retest_cause and registry is not None and key: diagnosis = registry.get("subjects", {}).get(key, {}).get("diagnosis", {}) return (is_unresolved(entry.get("status", "")) @@ -1029,6 +1032,8 @@ def parse_args(): help="re-run failed or discrepant robots (compatibility alias)") p.add_argument("--retry-unresolved", action="store_true", help="re-run only currently unresolved parity cases") + p.add_argument("--confirm-score", action="store_true", + help="run five official repeats for score-review cases") p.add_argument("--retest-cause", help="re-run unresolved registry cases tagged with this diagnosis cause") p.add_argument("--set-cause", nargs=3, metavar=("SUBJECT", "CAUSE", "OWNER"), @@ -1139,6 +1144,7 @@ def measure_repeatedly(jar, classname, version, opts, setup, repeats): return { "rc_mean": mean(rc_scores), "tr_mean": mean(tr_scores), "delta_mean": mean(deltas), "samples": len(deltas), "attempts": attempts, + "deltas": deltas, "bridge_only_signatures": bridge_only, } @@ -1668,6 +1674,31 @@ def main(): print(f"{index} {key} ...", flush=True) setup = division_setup(collection, opts) + if opts.confirm_score: + measured = measure_repeatedly(jar, classname, version, opts, setup, REGRESSION_REPEATS) + if measured["bridge_only_signatures"]: + status = "DISCREPANCY (errors)" + elif measured["samples"] < REGRESSION_REPEATS: + status = "DISCREPANCY (outcome)" + elif score_gap_confirmed(measured["deltas"], REGRESSION_BAND_POINTS): + status = "CONFIRMED (score)" + else: + status = "MATCHED (score noise)" + state["robots"][key] = { + "status": status, + "delta_pct": measured["delta_mean"], + "division": collection, + "setup": setup, + "rc": {"ok": measured["samples"] == REGRESSION_REPEATS, "score": measured["rc_mean"], "errors": []}, + "tr": {"ok": measured["samples"] == REGRESSION_REPEATS, "score": measured["tr_mean"], "errors": []}, + "confirmation": measured, + "completed_at": now_iso(), + } + save_state(state) + regenerate_report(state) + tested += 1 + print(f" confirmation delta={measured['delta_mean']!s} -> {status}", flush=True) + continue rc = run_rc_battle(jar, classname, version, opts, setup) attach_error_signatures(rc) rc["has_log"] = write_error_log("robocode", robot_name, rc.pop("log_text", "")) diff --git a/compat-test/parity-registry.json b/compat-test/parity-registry.json index 8bb7b4d..66e1ce6 100644 --- a/compat-test/parity-registry.json +++ b/compat-test/parity-registry.json @@ -86,7 +86,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/AIR.iRobot_1.0.jar": { "diagnosis": { @@ -593,7 +593,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/aaa.r.ScalarR_0.005h.053.jar": { "diagnosis": { @@ -680,7 +680,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ab.DengerousRoBatra_1.3.jar": { "diagnosis": { @@ -1122,7 +1122,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/acid.Null_1.0.jar": { "diagnosis": { @@ -1209,7 +1209,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/acid.Syzygy_1.0.4.jar": { "diagnosis": { @@ -1296,7 +1296,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ad.Quest_0.10.jar": { "diagnosis": { @@ -1470,7 +1470,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/adt.Ar1_2.1.jar": { "diagnosis": { @@ -1943,7 +1943,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/agrach.Dalek_1.0.jar": { "diagnosis": { @@ -2030,7 +2030,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/agrach.MicroDalek_1.0.jar": { "diagnosis": { @@ -2204,7 +2204,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ags.Glacier_0.3.2.jar": { "diagnosis": { @@ -2291,7 +2291,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ags.Midboss_1q.fast.jar": { "diagnosis": { @@ -2552,7 +2552,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ags.rougedc.RougeDC_willow.jar": { "diagnosis": { @@ -2813,7 +2813,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ahf.r2d2.R2d2_0.86.jar": { "diagnosis": { @@ -2900,7 +2900,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ahr.ice.Ice_1.0.jar": { "diagnosis": { @@ -3074,7 +3074,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/alex.Diabolo5_1.1.jar": { "diagnosis": { @@ -3683,7 +3683,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/amc.ROBv301_1.1.jar": { "diagnosis": { @@ -3770,7 +3770,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/amc.ROBv400_1.0.jar": { "diagnosis": { @@ -3857,7 +3857,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/amk.ChumbaMini_0.2.jar": { "diagnosis": { @@ -4480,7 +4480,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ao.T100_0.9.jar": { "diagnosis": { @@ -4567,7 +4567,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ap.Frederick_1.1.jar": { "diagnosis": { @@ -5187,7 +5187,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/apv.AspidReloaded_0.6.jar": { "diagnosis": { @@ -6237,7 +6237,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ara.Shera_0.88.jar": { "diagnosis": { @@ -6498,7 +6498,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/arthord.NanoSatanMelee_Beta.jar": { "diagnosis": { @@ -6846,7 +6846,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ary.Crisis_1.0.jar": { "diagnosis": { @@ -7088,7 +7088,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ary.Help_1.0.jar": { "diagnosis": { @@ -7175,7 +7175,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ary.SMG_1.01.jar": { "diagnosis": { @@ -7262,7 +7262,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ary.micro.Weak_1.2.jar": { "diagnosis": { @@ -7436,7 +7436,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ary.nano.AceSurf_1.2.jar": { "diagnosis": { @@ -7523,7 +7523,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/ary.nano.ColorNanoP_1.1.jar": { "diagnosis": { @@ -7697,7 +7697,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/asd.Cthulhu_1.2.jar": { "diagnosis": { @@ -9028,7 +9028,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bayen.nano.Squirrel_0.2.jar": { "diagnosis": { @@ -9202,7 +9202,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bbo.RamboT_0.3.jar": { "diagnosis": { @@ -9637,7 +9637,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bjl.LoneDragon_0.5.jar": { "diagnosis": { @@ -9811,7 +9811,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/blir.micro.blixi.Blixi_1.2.jar": { "diagnosis": { @@ -9898,7 +9898,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/blir.mini.oops.Splooshlu_2.0.jar": { "diagnosis": { @@ -10159,7 +10159,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/blir.nano.inch.Inchworm_1.0.jar": { "diagnosis": { @@ -10594,7 +10594,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bots.UberBot_1.2c.jar": { "diagnosis": { @@ -10768,7 +10768,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bots.UnterExBot_1.0.jar": { "diagnosis": { @@ -10855,7 +10855,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bp.Kuma_1.0.jar": { "diagnosis": { @@ -10942,7 +10942,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/braaropolis.Abot_1.0.jar": { "diagnosis": { @@ -11029,7 +11029,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/brainfade.Fallen_0.63.jar": { "diagnosis": { @@ -11987,7 +11987,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bvh.loki.Loki_0.5.jar": { "diagnosis": { @@ -12074,7 +12074,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bvh.micro.Freya_0.3.jar": { "diagnosis": { @@ -12509,7 +12509,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bvh.mini.Wodan_0.50.jar": { "diagnosis": { @@ -12770,7 +12770,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/bzdp.BoxCar_2.0.jar": { "diagnosis": { @@ -13031,7 +13031,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/casey.Flee_1.0.jar": { "diagnosis": { @@ -13562,7 +13562,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/cbot.cbot.CBot_0.8.jar": { "diagnosis": { @@ -14884,7 +14884,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/com.cohesiva.robocode.ManOwaR_1.0.jar": { "diagnosis": { @@ -15413,7 +15413,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/conscience.Electron_1.3g.jar": { "diagnosis": { @@ -15946,7 +15946,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/cs.PumpkinPie_1.0.jar": { "diagnosis": { @@ -16381,7 +16381,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/css.Delitioner_0.11.jar": { "diagnosis": { @@ -17835,7 +17835,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/cx.mini.BlackSwans_0.60.jar": { "diagnosis": { @@ -18096,7 +18096,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/cx.nano.Smog_2.6.jar": { "diagnosis": { @@ -18183,7 +18183,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/cyragia.Bot_1.1.jar": { "diagnosis": { @@ -18357,7 +18357,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/daemons.DizzyA_1.0.jar": { "diagnosis": { @@ -18444,7 +18444,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/dam.MogBot_2.9.jar": { "diagnosis": { @@ -18644,7 +18644,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/darkcanuck.Gaff_1.50.jar": { "diagnosis": { @@ -19257,7 +19257,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/davidalves.net.DuelistMicro_1.22.jar": { "diagnosis": { @@ -19344,7 +19344,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/davidalves.net.DuelistMini_1.1.jar": { "diagnosis": { @@ -19692,7 +19692,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/dcs.Eater_of_Worlds_1.1.3-A.jar": { "diagnosis": { @@ -19953,7 +19953,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/de.erdega.robocode.Polyphemos_0.4.jar": { "diagnosis": { @@ -20040,7 +20040,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/de.simpleworks.robocode.bots.swiBot_1.0.jar": { "diagnosis": { @@ -20475,7 +20475,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/deo.CloudBot_1.3.jar": { "diagnosis": { @@ -20562,7 +20562,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" }, "roborumble/deo.FlowerBot_1.0.jar": { "diagnosis": { @@ -20736,7 +20736,7 @@ } } ], - "status": "DISCREPANCY (score)" + "status": "score-review" } } } diff --git a/compat-test/parity-registry.md b/compat-test/parity-registry.md index 483bb39..ad5f05b 100644 --- a/compat-test/parity-registry.md +++ b/compat-test/parity-registry.md @@ -7,68 +7,68 @@ This generated table is the reviewed index of the append-only observations in `p | Status | Subjects | |---|---:| | DISCREPANCY (no score) | 4 | -| DISCREPANCY (score) | 65 | | FAIL (TR) | 19 | | PASS | 138 | +| score-review | 65 | ## Subjects | Subject | Division | Kind | Status | Latest observation | Cause | Owner | |---|---|---|---|---|---|---| -| roborumble/AD.CodaFirst_1.1.jar | roborumble | robot | DISCREPANCY (score) | c64fb0b475ea6e81 | - | - | +| roborumble/AD.CodaFirst_1.1.jar | roborumble | robot | score-review | c64fb0b475ea6e81 | - | - | | roborumble/AIR.iRobot_1.0.jar | roborumble | robot | FAIL (TR) | 30ccf919e98128fe | - | - | | roborumble/And.BasicSurfer_FF1.6.jar | roborumble | robot | PASS | e10ba12633f28ccf | - | - | | roborumble/ArchAlpha.ArchimedesAlpha_1.0.jar | roborumble | robot | DISCREPANCY (no score) | 8ee700d1da5ca3de | - | - | | roborumble/CharlieN.Omega.Omega_1.03.jar | roborumble | robot | PASS | 23e880a8344ee3d9 | - | - | -| roborumble/a.FreyaOS_1.0.jar | roborumble | robot | DISCREPANCY (score) | 250efa0576cb1c56 | - | - | -| roborumble/aaa.r.ScalarR_0.005h.053.jar | roborumble | robot | DISCREPANCY (score) | 789ba80b28f3224a | - | - | +| roborumble/a.FreyaOS_1.0.jar | roborumble | robot | score-review | 250efa0576cb1c56 | - | - | +| roborumble/aaa.r.ScalarR_0.005h.053.jar | roborumble | robot | score-review | 789ba80b28f3224a | - | - | | roborumble/ab.DengerousRoBatra_1.3.jar | roborumble | robot | PASS | b9f7cc9d84668eb6 | - | - | | roborumble/abud.ThirdRobo_1.0.jar | roborumble | robot | FAIL (TR) | b6434f799b62dbb9 | - | - | -| roborumble/acid.Bl4ck_1.0.jar | roborumble | robot | DISCREPANCY (score) | 7bbc287f8bfe56e4 | - | - | -| roborumble/acid.Null_1.0.jar | roborumble | robot | DISCREPANCY (score) | 590ef3a4eaca28e3 | - | - | -| roborumble/acid.Syzygy_1.0.4.jar | roborumble | robot | DISCREPANCY (score) | e0d888daca1f0456 | - | - | +| roborumble/acid.Bl4ck_1.0.jar | roborumble | robot | score-review | 7bbc287f8bfe56e4 | - | - | +| roborumble/acid.Null_1.0.jar | roborumble | robot | score-review | 590ef3a4eaca28e3 | - | - | +| roborumble/acid.Syzygy_1.0.4.jar | roborumble | robot | score-review | e0d888daca1f0456 | - | - | | roborumble/ad.Quest_0.10.jar | roborumble | robot | PASS | 90b87fb62a5d8769 | - | - | -| roborumble/ad.last.Bottom_1.0.jar | roborumble | robot | DISCREPANCY (score) | 536581d29ac8b51f | - | - | +| roborumble/ad.last.Bottom_1.0.jar | roborumble | robot | score-review | 536581d29ac8b51f | - | - | | roborumble/adt.Ar1_2.1.jar | roborumble | robot | PASS | a7544fcb7a16e1cc | - | - | | roborumble/adt.Ar2_1.0.jar | roborumble | robot | PASS | f8dc415d3174e2bd | - | - | | roborumble/aetos.AetosFirstBot_1.0.jar | roborumble | robot | PASS | adf8a34914ae5ddc | - | - | | roborumble/ag.Gir_0.99.jar | roborumble | robot | FAIL (TR) | 6a92a7c896d886ac | - | - | -| roborumble/agd.Mooserwirt2_2.7.jar | roborumble | robot | DISCREPANCY (score) | ff9a91c9aed410ac | - | - | -| roborumble/agrach.Dalek_1.0.jar | roborumble | robot | DISCREPANCY (score) | ba3220036d56b733 | - | - | +| roborumble/agd.Mooserwirt2_2.7.jar | roborumble | robot | score-review | ff9a91c9aed410ac | - | - | +| roborumble/agrach.Dalek_1.0.jar | roborumble | robot | score-review | ba3220036d56b733 | - | - | | roborumble/agrach.MicroDalek_1.0.jar | roborumble | robot | PASS | 530461a54d8b1dad | - | - | -| roborumble/agrach.RobotSlayer_1.0.jar | roborumble | robot | DISCREPANCY (score) | 8f77756a222c2ed6 | - | - | -| roborumble/ags.Glacier_0.3.2.jar | roborumble | robot | DISCREPANCY (score) | 60be2730fb1d2100 | - | - | +| roborumble/agrach.RobotSlayer_1.0.jar | roborumble | robot | score-review | 8f77756a222c2ed6 | - | - | +| roborumble/ags.Glacier_0.3.2.jar | roborumble | robot | score-review | 60be2730fb1d2100 | - | - | | roborumble/ags.Midboss_1q.fast.jar | roborumble | robot | PASS | 7effb7a405de90e7 | - | - | | roborumble/ags.micro.Carpet_1.1.jar | roborumble | robot | PASS | a5199bebb61593c0 | - | - | -| roborumble/ags.polished.PolishedRuby_1.jar | roborumble | robot | DISCREPANCY (score) | fc49d718cc3c93ac | - | - | +| roborumble/ags.polished.PolishedRuby_1.jar | roborumble | robot | score-review | fc49d718cc3c93ac | - | - | | roborumble/ags.rougedc.RougeDC_willow.jar | roborumble | robot | PASS | c007d142eae29d0a | - | - | | roborumble/ahf.Acero_1.0.jar | roborumble | robot | PASS | 9a49d2334b9adb0e | - | - | -| roborumble/ahf.NanoAndrew_.4.jar | roborumble | robot | DISCREPANCY (score) | 06a1568606c64145 | - | - | -| roborumble/ahf.r2d2.R2d2_0.86.jar | roborumble | robot | DISCREPANCY (score) | b8a0807ea26810cb | - | - | +| roborumble/ahf.NanoAndrew_.4.jar | roborumble | robot | score-review | 06a1568606c64145 | - | - | +| roborumble/ahf.r2d2.R2d2_0.86.jar | roborumble | robot | score-review | b8a0807ea26810cb | - | - | | roborumble/ahr.ice.Ice_1.0.jar | roborumble | robot | PASS | 230fd620dc49add2 | - | - | -| roborumble/ak.Fermat_2.0.jar | roborumble | robot | DISCREPANCY (score) | 2e184f3d97965168 | - | - | +| roborumble/ak.Fermat_2.0.jar | roborumble | robot | score-review | 2e184f3d97965168 | - | - | | roborumble/alex.Diabolo5_1.1.jar | roborumble | robot | PASS | 9571152abf9a4117 | - | - | | roborumble/alk.lap.LoudAndProud_2.23.jar | roborumble | robot | PASS | b7150fa0f8305e61 | - | - | | roborumble/am.Miedzix_3.0.jar | roborumble | robot | PASS | 95ffe43ca9a2cd04 | - | - | | roborumble/amarok.Rookie_1.1.jar | roborumble | robot | PASS | 4358feef92af528c | - | - | | roborumble/amc.ROBv202_1.01.jar | roborumble | robot | PASS | 7af3d80d2aa0cb8e | - | - | | roborumble/amc.ROBv203_1.0.jar | roborumble | robot | PASS | 5b13343a09625cb7 | - | - | -| roborumble/amc.ROBv300_1.1.jar | roborumble | robot | DISCREPANCY (score) | f9df3a01abc1f04f | - | - | -| roborumble/amc.ROBv301_1.1.jar | roborumble | robot | DISCREPANCY (score) | 8f84ca57fd472f5b | - | - | -| roborumble/amc.ROBv400_1.0.jar | roborumble | robot | DISCREPANCY (score) | 09be55e2c9b7d445 | - | - | +| roborumble/amc.ROBv300_1.1.jar | roborumble | robot | score-review | f9df3a01abc1f04f | - | - | +| roborumble/amc.ROBv301_1.1.jar | roborumble | robot | score-review | 8f84ca57fd472f5b | - | - | +| roborumble/amc.ROBv400_1.0.jar | roborumble | robot | score-review | 09be55e2c9b7d445 | - | - | | roborumble/amk.ChumbaMini_0.2.jar | roborumble | robot | PASS | a2683415dda92a08 | - | - | | roborumble/amk.ChumbaWumba_0.3.jar | roborumble | robot | PASS | 945bce04cca29751 | - | - | | roborumble/amk.Punbot.Punbot_0.01.jar | roborumble | robot | PASS | 5cb33aff96c3e759 | - | - | | roborumble/amk.ShizzleStiX.ShizzleStiX_0.6.jar | roborumble | robot | PASS | fcb8486e2c29e9dc | - | - | | roborumble/amk.jointstrike.JointStrike_0.2.jar | roborumble | robot | PASS | 5c6c92d169d651d3 | - | - | -| roborumble/amk.superstrike.SuperStrike_0.3.jar | roborumble | robot | DISCREPANCY (score) | 54ea093325f72804 | - | - | -| roborumble/ao.T100_0.9.jar | roborumble | robot | DISCREPANCY (score) | 4ae1803915fa8384 | - | - | +| roborumble/amk.superstrike.SuperStrike_0.3.jar | roborumble | robot | score-review | 54ea093325f72804 | - | - | +| roborumble/ao.T100_0.9.jar | roborumble | robot | score-review | 4ae1803915fa8384 | - | - | | roborumble/ap.Frederick_1.1.jar | roborumble | robot | PASS | df6c7329f8f52c4e | - | - | | roborumble/apc.Caan_1.0.jar | roborumble | robot | PASS | f844e4bc6aff7dc0 | - | - | | roborumble/apc.Colossus2_0.12.jar | roborumble | robot | FAIL (TR) | 6234b82cd630f7c9 | - | - | | roborumble/apc.LeeroyJenkins2_1.0.jar | roborumble | robot | PASS | c115dfcf1a4a4fdf | - | - | | roborumble/apc.botM_3.0.jar | roborumble | robot | PASS | 4a1b06c7f3fd0456 | - | - | -| roborumble/apollokidd.ApolloKidd_0.9.jar | roborumble | robot | DISCREPANCY (score) | b90a01cef8102d4f | - | - | +| roborumble/apollokidd.ApolloKidd_0.9.jar | roborumble | robot | score-review | b90a01cef8102d4f | - | - | | roborumble/apv.AspidReloaded_0.6.jar | roborumble | robot | PASS | 22f23ec4b2359408 | - | - | | roborumble/apv.Aspid_1.7.jar | roborumble | robot | PASS | f0bfd59e67a0674e | - | - | | roborumble/apv.LauLectrik_1.2.jar | roborumble | robot | PASS | 379bc7ba025c9021 | - | - | @@ -80,23 +80,23 @@ This generated table is the reviewed index of the append-only observations in `p | roborumble/apv.test.Virus_0.6.1.jar | roborumble | robot | PASS | fb63ed9dcd64d83b | - | - | | roborumble/ar.QuantumChromodynamics_1.2.1.jar | roborumble | robot | PASS | 4ac5fb2477202c50 | - | - | | roborumble/ar.TheoryOfEverything_1.2.1.jar | roborumble | robot | PASS | 9ace621bf12f4172 | - | - | -| roborumble/ar.horizon.Horizon_1.2.2.jar | roborumble | robot | DISCREPANCY (score) | 97286a0cb62861a8 | - | - | +| roborumble/ar.horizon.Horizon_1.2.2.jar | roborumble | robot | score-review | 97286a0cb62861a8 | - | - | | roborumble/ara.Shera_0.88.jar | roborumble | robot | PASS | b32a6997ff56c9af | - | - | | roborumble/areb.Union_1.06.jar | roborumble | robot | PASS | e533066dda10e17a | - | - | -| roborumble/arthord.KostyaTszyu_Beta2.jar | roborumble | robot | DISCREPANCY (score) | 36f054afe6dfd556 | - | - | +| roborumble/arthord.KostyaTszyu_Beta2.jar | roborumble | robot | score-review | 36f054afe6dfd556 | - | - | | roborumble/arthord.NanoSatanMelee_Beta.jar | roborumble | robot | PASS | aee831eb589eb863 | - | - | | roborumble/arthord.NanoSatan_Mu.jar | roborumble | robot | PASS | cb4397fbdd3591a9 | - | - | | roborumble/arthord.micro.Apoptygma_0.4.jar | roborumble | robot | PASS | 3c369261b2915cd0 | - | - | -| roborumble/arthord.micro.Muffin_0.6.1.jar | roborumble | robot | DISCREPANCY (score) | a7b360b5da35fac2 | - | - | +| roborumble/arthord.micro.Muffin_0.6.1.jar | roborumble | robot | score-review | a7b360b5da35fac2 | - | - | | roborumble/ary.Crisis_1.0.jar | roborumble | robot | PASS | 2728b67184ef42c0 | - | - | -| roborumble/ary.FourWD_1.3d.jar | roborumble | robot | DISCREPANCY (score) | 10b51506f52cd1be | - | - | -| roborumble/ary.Help_1.0.jar | roborumble | robot | DISCREPANCY (score) | a5fc6afd26a475b9 | - | - | -| roborumble/ary.SMG_1.01.jar | roborumble | robot | DISCREPANCY (score) | 5df472261fca6166 | - | - | +| roborumble/ary.FourWD_1.3d.jar | roborumble | robot | score-review | 10b51506f52cd1be | - | - | +| roborumble/ary.Help_1.0.jar | roborumble | robot | score-review | a5fc6afd26a475b9 | - | - | +| roborumble/ary.SMG_1.01.jar | roborumble | robot | score-review | 5df472261fca6166 | - | - | | roborumble/ary.micro.Weak_1.2.jar | roborumble | robot | PASS | 371017386f1da182 | - | - | -| roborumble/ary.mini.Nimi_1.0.jar | roborumble | robot | DISCREPANCY (score) | e0d8d0f6f8806455 | - | - | -| roborumble/ary.nano.AceSurf_1.2.jar | roborumble | robot | DISCREPANCY (score) | bd77f78dc4f9642f | - | - | +| roborumble/ary.mini.Nimi_1.0.jar | roborumble | robot | score-review | e0d8d0f6f8806455 | - | - | +| roborumble/ary.nano.AceSurf_1.2.jar | roborumble | robot | score-review | bd77f78dc4f9642f | - | - | | roborumble/ary.nano.ColorNanoP_1.1.jar | roborumble | robot | PASS | 7c40044d94ec9a01 | - | - | -| roborumble/as.xbots_1.0.jar | roborumble | robot | DISCREPANCY (score) | a84fbf62fb36b2a2 | - | - | +| roborumble/as.xbots_1.0.jar | roborumble | robot | score-review | a84fbf62fb36b2a2 | - | - | | roborumble/asd.Cthulhu_1.2.jar | roborumble | robot | PASS | 62a7416486d668ba | - | - | | roborumble/asm.Statistas_0.1.jar | roborumble | robot | PASS | 1f68932ec9132d3a | - | - | | roborumble/awl.Locutus_1.5.jar | roborumble | robot | PASS | 044a09527daed943 | - | - | @@ -110,30 +110,30 @@ This generated table is the reviewed index of the append-only observations in `p | roborumble/banshee.mini.Nexus6_0.2.0.jar | roborumble | robot | PASS | d4cda9b611b80d04 | - | - | | roborumble/barontrozo.BaronTrozo_1.7.6.jar | roborumble | robot | PASS | 004179d3a54b0e5a | - | - | | roborumble/bayen.UbaMicro_1.4.jar | roborumble | robot | PASS | 26edca5dc7a5d68a | - | - | -| roborumble/bayen.UbaRamLT_1.0.jar | roborumble | robot | DISCREPANCY (score) | 13b1bb4843e9815b | - | - | +| roborumble/bayen.UbaRamLT_1.0.jar | roborumble | robot | score-review | 13b1bb4843e9815b | - | - | | roborumble/bayen.nano.Squirrel_0.2.jar | roborumble | robot | PASS | 6fcfbf55b4d8ff5c | - | - | -| roborumble/bayen.nut.Squirrel_1.621.jar | roborumble | robot | DISCREPANCY (score) | 517b1c7cec309414 | - | - | +| roborumble/bayen.nut.Squirrel_1.621.jar | roborumble | robot | score-review | 517b1c7cec309414 | - | - | | roborumble/bbo.RamboT_0.3.jar | roborumble | robot | PASS | df99f8a1d6c00d7e | - | - | | roborumble/bbo.TheRoof_1.4.3.jar | roborumble | robot | PASS | 39adaf77fb8fca87 | - | - | | roborumble/benhorner.PureAggression_0.2.6.jar | roborumble | robot | PASS | ca5a8e78cc56d369 | - | - | | roborumble/bigpete.Stewie_1.0.jar | roborumble | robot | PASS | e8b293a979c1c0b4 | - | - | -| roborumble/bing2.Melody_1.3.1.jar | roborumble | robot | DISCREPANCY (score) | 6d5c62b55bd1282c | - | - | +| roborumble/bing2.Melody_1.3.1.jar | roborumble | robot | score-review | 6d5c62b55bd1282c | - | - | | roborumble/bjl.LoneDragon_0.5.jar | roborumble | robot | PASS | b407ed4b3237d3e7 | - | - | -| roborumble/bk.Shooter_1.0.jar | roborumble | robot | DISCREPANCY (score) | 17eb9124acd74e55 | - | - | -| roborumble/blir.micro.blixi.Blixi_1.2.jar | roborumble | robot | DISCREPANCY (score) | 32ac2de21087f5bd | - | - | +| roborumble/bk.Shooter_1.0.jar | roborumble | robot | score-review | 17eb9124acd74e55 | - | - | +| roborumble/blir.micro.blixi.Blixi_1.2.jar | roborumble | robot | score-review | 32ac2de21087f5bd | - | - | | roborumble/blir.mini.oops.Splooshlu_2.0.jar | roborumble | robot | PASS | 9d2209ef822252f0 | - | - | | roborumble/blir.nano.Bruce_R1.0.0.jar | roborumble | robot | PASS | e98608d4efb99503 | - | - | -| roborumble/blir.nano.Cabbage_R1.0.1.jar | roborumble | robot | DISCREPANCY (score) | 14e36192003c6140 | - | - | +| roborumble/blir.nano.Cabbage_R1.0.1.jar | roborumble | robot | score-review | 14e36192003c6140 | - | - | | roborumble/blir.nano.inch.Inchworm_1.0.jar | roborumble | robot | PASS | 7bd4cdf08768932e | - | - | | roborumble/blr.Chicken001_0.1.jar | roborumble | robot | PASS | fa1b7716484381ca | - | - | | roborumble/bndl.LostLion_1.2.jar | roborumble | robot | PASS | 1a29913b8f87ac3a | - | - | | roborumble/boe.Minerva_0.80.jar | roborumble | robot | PASS | 8205a7ec0f3730f8 | - | - | -| roborumble/bons.NanoStalker_1.2.jar | roborumble | robot | DISCREPANCY (score) | 73559040c308ecc0 | - | - | +| roborumble/bons.NanoStalker_1.2.jar | roborumble | robot | score-review | 73559040c308ecc0 | - | - | | roborumble/bots.UberBot_1.2c.jar | roborumble | robot | PASS | 258737685abd4504 | - | - | -| roborumble/bots.UnterBot_1.0.jar | roborumble | robot | DISCREPANCY (score) | a57b9c4d5a68c0e3 | - | - | -| roborumble/bots.UnterExBot_1.0.jar | roborumble | robot | DISCREPANCY (score) | 0eeef9f8e9a05217 | - | - | -| roborumble/bp.Kuma_1.0.jar | roborumble | robot | DISCREPANCY (score) | a5efd143dba4df0f | - | - | -| roborumble/braaropolis.Abot_1.0.jar | roborumble | robot | DISCREPANCY (score) | 36610aff4c63ca29 | - | - | +| roborumble/bots.UnterBot_1.0.jar | roborumble | robot | score-review | a57b9c4d5a68c0e3 | - | - | +| roborumble/bots.UnterExBot_1.0.jar | roborumble | robot | score-review | 0eeef9f8e9a05217 | - | - | +| roborumble/bp.Kuma_1.0.jar | roborumble | robot | score-review | a5efd143dba4df0f | - | - | +| roborumble/braaropolis.Abot_1.0.jar | roborumble | robot | score-review | 36610aff4c63ca29 | - | - | | roborumble/brainfade.Fallen_0.63.jar | roborumble | robot | PASS | cfd838bd46fc2f16 | - | - | | roborumble/brainfade.melee.Dusk_0.44.jar | roborumble | robot | PASS | c24d76413b604bbc | - | - | | roborumble/bts.mega.Gnarly_1.4.jar | roborumble | robot | PASS | ea1a4d3c629039e8 | - | - | @@ -144,25 +144,25 @@ This generated table is the reviewed index of the append-only observations in `p | roborumble/bvh.fnr.Fenrir_0.36l.jar | roborumble | robot | PASS | c42dcc45e38dcd92 | - | - | | roborumble/bvh.frg.Friga_0.112dev.jar | roborumble | robot | PASS | 2c64749929672cae | - | - | | roborumble/bvh.fry.Freya_0.82.jar | roborumble | robot | FAIL (TR) | d32b1f5ce3e25f80 | - | - | -| roborumble/bvh.hdr.Hodur_0.4.jar | roborumble | robot | DISCREPANCY (score) | bc89209e78a077fc | - | - | -| roborumble/bvh.loki.Loki_0.5.jar | roborumble | robot | DISCREPANCY (score) | c679e09780c18a52 | - | - | +| roborumble/bvh.hdr.Hodur_0.4.jar | roborumble | robot | score-review | bc89209e78a077fc | - | - | +| roborumble/bvh.loki.Loki_0.5.jar | roborumble | robot | score-review | c679e09780c18a52 | - | - | | roborumble/bvh.micro.Freya_0.3.jar | roborumble | robot | PASS | 2f1498ceffdac7e0 | - | - | | roborumble/bvh.micro.Svadilfari_0.2.jar | roborumble | robot | PASS | 4dadfc08d52161ce | - | - | | roborumble/bvh.mini.Fenrir_0.39.jar | roborumble | robot | PASS | ff57f8cea1909f17 | - | - | | roborumble/bvh.mini.Freya_0.55.jar | roborumble | robot | PASS | 815497cd00aa57b0 | - | - | -| roborumble/bvh.mini.Mjolnir_0.3.jar | roborumble | robot | DISCREPANCY (score) | 3d1c3e239d06d795 | - | - | +| roborumble/bvh.mini.Mjolnir_0.3.jar | roborumble | robot | score-review | 3d1c3e239d06d795 | - | - | | roborumble/bvh.mini.Wodan_0.50.jar | roborumble | robot | PASS | d89e8a196146f1ec | - | - | | roborumble/bvh.tyr.Tyr_1.74.jar | roborumble | robot | PASS | f40bad8a5aff304f | - | - | -| roborumble/bwbaugh.nano.Tirunculus_0.0.0a.jar | roborumble | robot | DISCREPANCY (score) | b935555308fc01c3 | - | - | +| roborumble/bwbaugh.nano.Tirunculus_0.0.0a.jar | roborumble | robot | score-review | b935555308fc01c3 | - | - | | roborumble/bzdp.BoxCar_2.0.jar | roborumble | robot | PASS | 67c108afb1e67978 | - | - | | roborumble/bzdp.Pansy_2.1.jar | roborumble | robot | PASS | a96b223336b776df | - | - | -| roborumble/caimano.Furia_Ceca_0.22.jar | roborumble | robot | DISCREPANCY (score) | 99d4763f956857c8 | - | - | +| roborumble/caimano.Furia_Ceca_0.22.jar | roborumble | robot | score-review | 99d4763f956857c8 | - | - | | roborumble/casey.Flee_1.0.jar | roborumble | robot | PASS | ad19841f89469280 | - | - | | roborumble/cb.Domogled_1.2.jar | roborumble | robot | FAIL (TR) | ab4a97816c447d60 | - | - | | roborumble/cb.fire.Firestarter_2.0f.jar | roborumble | robot | FAIL (TR) | 2002e30ad998c641 | - | - | | roborumble/cb.mega.RandomBot_1.0.jar | roborumble | robot | FAIL (TR) | 55bade0feb6ac865 | - | - | | roborumble/cb.nano.Insomnia_1.0.jar | roborumble | robot | PASS | 997241f811003c48 | - | - | -| roborumble/cbot.agile.Nibbler_0.2.jar | roborumble | robot | DISCREPANCY (score) | 50feb7c195d9d53e | - | - | +| roborumble/cbot.agile.Nibbler_0.2.jar | roborumble | robot | score-review | 50feb7c195d9d53e | - | - | | roborumble/cbot.cbot.CBot_0.8.jar | roborumble | robot | FAIL (TR) | 7337304cd84cf9c0 | - | - | | roborumble/cf.OldMan.OldManXP_0.1.jar | roborumble | robot | PASS | f54923f1b67ca9f0 | - | - | | roborumble/cf.mini.Chiva_1.0.jar | roborumble | robot | PASS | 336aaa29d4d4cb86 | - | - | @@ -177,23 +177,23 @@ This generated table is the reviewed index of the append-only observations in `p | roborumble/cli.WasteOfAmmo_1.0.jar | roborumble | robot | DISCREPANCY (no score) | ad72f39287f5b880 | - | - | | roborumble/codemojo.nano.Woot_1.0.jar | roborumble | robot | PASS | ec2f186e76fabdbc | - | - | | roborumble/com.arsenic.NewTest_1.0.jar | roborumble | robot | PASS | bec9ffc1e65a95d1 | - | - | -| roborumble/com.blogspot.malinkody.DestrobotMalin_1.0.jar | roborumble | robot | DISCREPANCY (score) | 41f11a8de1bd0c5b | - | - | +| roborumble/com.blogspot.malinkody.DestrobotMalin_1.0.jar | roborumble | robot | score-review | 41f11a8de1bd0c5b | - | - | | roborumble/com.cohesiva.robocode.ManOwaR_1.0.jar | roborumble | robot | PASS | b68f0a69b507a3fe | - | - | | roborumble/com.sociesc.T1000_1.0.0.jar | roborumble | robot | DISCREPANCY (no score) | c50ef80274e4a320 | - | - | | roborumble/com.spp.robocode.MostlyHarmless_010.jar | roborumble | robot | PASS | 7f12b894b7bb568c | - | - | | roborumble/com.syncleus.robocode.Dreadnaught_0.1.jar | roborumble | robot | PASS | f963f02cb575c278 | - | - | | roborumble/com.timothyveletta.FuzzyBot_1.1.jar | roborumble | robot | PASS | f3979e1d91165e7b | - | - | -| roborumble/conscience.Bulldozer_1.0a.jar | roborumble | robot | DISCREPANCY (score) | 34ee10313f50e735 | - | - | +| roborumble/conscience.Bulldozer_1.0a.jar | roborumble | robot | score-review | 34ee10313f50e735 | - | - | | roborumble/conscience.Electron_1.3g.jar | roborumble | robot | PASS | 60e25212f69814cd | - | - | | roborumble/conscience.Idem_1.0a.jar | roborumble | robot | PASS | 2c5f75820a136af0 | - | - | | roborumble/conscience.Suicidal_1.1.jar | roborumble | robot | DISCREPANCY (no score) | 126c32b41d68f5f3 | - | - | | roborumble/cre.Karolos_0.32.jar | roborumble | robot | FAIL (TR) | 0c5b559772cf4ee1 | - | - | -| roborumble/cs.Nene_1.0.5.jar | roborumble | robot | DISCREPANCY (score) | 77f6703bbf53891a | - | - | +| roborumble/cs.Nene_1.0.5.jar | roborumble | robot | score-review | 77f6703bbf53891a | - | - | | roborumble/cs.PumpkinPie_1.0.jar | roborumble | robot | PASS | 90e4313a94769aff | - | - | | roborumble/cs.Wren_1.0.jar | roborumble | robot | PASS | c9973e9dd44d5919 | - | - | | roborumble/cs.s2.Seraphim_2.3.1.jar | roborumble | robot | PASS | de2ae85b37c1610b | - | - | | roborumble/csm.NthGeneration_0.04.jar | roborumble | robot | PASS | e8bab6b8456b7c4a | - | - | -| roborumble/csp.Eagle_3.30.jar | roborumble | robot | DISCREPANCY (score) | e0122d77dc924a71 | - | - | +| roborumble/csp.Eagle_3.30.jar | roborumble | robot | score-review | e0122d77dc924a71 | - | - | | roborumble/css.Delitioner_0.11.jar | roborumble | robot | PASS | 9bf3a4bffbd5125f | - | - | | roborumble/cuoq.Kakera_1.0.jar | roborumble | robot | PASS | 99a4b47c6b169333 | - | - | | roborumble/cw.megas.Blade_0.8.jar | roborumble | robot | FAIL (TR) | 8fd749571b62d83f | - | - | @@ -207,37 +207,37 @@ This generated table is the reviewed index of the append-only observations in `p | roborumble/cx.Princess_1.0.jar | roborumble | robot | PASS | ee8fec5f1ac10af9 | - | - | | roborumble/cx.micro.Blur_0.2.jar | roborumble | robot | FAIL (TR) | cf57283fe7c065c6 | - | - | | roborumble/cx.micro.Smoke_0.96.jar | roborumble | robot | PASS | d0ce3ae37d563131 | - | - | -| roborumble/cx.micro.Spark_0.6.jar | roborumble | robot | DISCREPANCY (score) | 4a48d9ed154a3163 | - | - | +| roborumble/cx.micro.Spark_0.6.jar | roborumble | robot | score-review | 4a48d9ed154a3163 | - | - | | roborumble/cx.mini.BlackSwans_0.60.jar | roborumble | robot | PASS | 6b425d3c251fa7bc | - | - | | roborumble/cx.mini.Cigaret_1.31.jar | roborumble | robot | PASS | 8547c53305c88bf5 | - | - | -| roborumble/cx.mini.Nimrod_0.55.jar | roborumble | robot | DISCREPANCY (score) | 13e1779cf8e10822 | - | - | -| roborumble/cx.nano.Smog_2.6.jar | roborumble | robot | DISCREPANCY (score) | c37a0d6ebee94fdf | - | - | +| roborumble/cx.mini.Nimrod_0.55.jar | roborumble | robot | score-review | 13e1779cf8e10822 | - | - | +| roborumble/cx.nano.Smog_2.6.jar | roborumble | robot | score-review | c37a0d6ebee94fdf | - | - | | roborumble/cyragia.Bot_1.1.jar | roborumble | robot | PASS | 962c336578cde35f | - | - | -| roborumble/da.NewBGank_1.4.jar | roborumble | robot | DISCREPANCY (score) | a25291b7dea73bfb | - | - | -| roborumble/daemons.DizzyA_1.0.jar | roborumble | robot | DISCREPANCY (score) | 4fb778b08e7b30a5 | - | - | +| roborumble/da.NewBGank_1.4.jar | roborumble | robot | score-review | a25291b7dea73bfb | - | - | +| roborumble/daemons.DizzyA_1.0.jar | roborumble | robot | score-review | 4fb778b08e7b30a5 | - | - | | roborumble/dam.MogBot_2.9.jar | roborumble | robot | FAIL (TR) | d949ac75405a14c5 | - | - | -| roborumble/dans.Cinnamon_1.2.jar | roborumble | robot | DISCREPANCY (score) | 4396cf2704a52d50 | - | - | +| roborumble/dans.Cinnamon_1.2.jar | roborumble | robot | score-review | 4396cf2704a52d50 | - | - | | roborumble/darkcanuck.Gaff_1.50.jar | roborumble | robot | FAIL (TR) | 970cb17042cd15f3 | - | - | | roborumble/darkcanuck.Holden_1.13a.jar | roborumble | robot | FAIL (TR) | 3e764de13ff9996b | - | - | | roborumble/darkcanuck.Pris_0.92.jar | roborumble | robot | FAIL (TR) | a1c846f8e60831ac | - | - | | roborumble/davidalves.Firebird_0.25.jar | roborumble | robot | PASS | fae39438b7bb4d8a | - | - | | roborumble/davidalves.PhoenixOS_1.1.jar | roborumble | robot | FAIL (TR) | 8f13036b4836dcbf | - | - | | roborumble/davidalves.Phoenix_1.02.jar | roborumble | robot | PASS | 8abd22893c0c806b | - | - | -| roborumble/davidalves.net.DuelistMicroMkII_1.1.jar | roborumble | robot | DISCREPANCY (score) | 34cf1f962dcb1bcd | - | - | -| roborumble/davidalves.net.DuelistMicro_1.22.jar | roborumble | robot | DISCREPANCY (score) | 4d34a6e0b2152b18 | - | - | +| roborumble/davidalves.net.DuelistMicroMkII_1.1.jar | roborumble | robot | score-review | 34cf1f962dcb1bcd | - | - | +| roborumble/davidalves.net.DuelistMicro_1.22.jar | roborumble | robot | score-review | 4d34a6e0b2152b18 | - | - | | roborumble/davidalves.net.DuelistMini_1.1.jar | roborumble | robot | PASS | 6fb819cdb10fc868 | - | - | | roborumble/davidalves.net.DuelistNano_1.0.jar | roborumble | robot | PASS | eeb33d1a7dbabc53 | - | - | | roborumble/davidalves.net.Duelist_0.1.6src.jar | roborumble | robot | PASS | da9c6f4187b20af6 | - | - | -| roborumble/davv.DOne_b002.jar | roborumble | robot | DISCREPANCY (score) | 8948876072cf5515 | - | - | +| roborumble/davv.DOne_b002.jar | roborumble | robot | score-review | 8948876072cf5515 | - | - | | roborumble/dcs.Eater_of_Worlds_1.1.3-A.jar | roborumble | robot | PASS | acfc2f677316f7a1 | - | - | | roborumble/dcs.Eater_of_Worlds_Mini_1.0.jar | roborumble | robot | PASS | aa8ea784d11f187f | - | - | -| roborumble/dcs.PM.Eater_of_Worlds_PM_1.2.jar | roborumble | robot | DISCREPANCY (score) | ff977f89ff8c2e6b | - | - | -| roborumble/de.erdega.robocode.Polyphemos_0.4.jar | roborumble | robot | DISCREPANCY (score) | 2b4de671d6c6e4bf | - | - | +| roborumble/dcs.PM.Eater_of_Worlds_PM_1.2.jar | roborumble | robot | score-review | ff977f89ff8c2e6b | - | - | +| roborumble/de.erdega.robocode.Polyphemos_0.4.jar | roborumble | robot | score-review | 2b4de671d6c6e4bf | - | - | | roborumble/de.simpleworks.robocode.bots.swiBot_1.0.jar | roborumble | robot | PASS | 8a7446289797b1b0 | - | - | | roborumble/deith.Czolgzilla_0.11.jar | roborumble | robot | PASS | 08cef06b36787464 | - | - | | roborumble/demetrix.ForceMajeure_0.75.jar | roborumble | robot | PASS | bbf69d95d8f28b8f | - | - | | roborumble/demetrix.nano.Neutrino_0.27.jar | roborumble | robot | PASS | c87a4b8d228674d0 | - | - | -| roborumble/demetrix.nano.SledgeHammer_0.22.jar | roborumble | robot | DISCREPANCY (score) | 804cc154798fef47 | - | - | -| roborumble/deo.CloudBot_1.3.jar | roborumble | robot | DISCREPANCY (score) | 78bba33b96e662cd | - | - | +| roborumble/demetrix.nano.SledgeHammer_0.22.jar | roborumble | robot | score-review | 804cc154798fef47 | - | - | +| roborumble/deo.CloudBot_1.3.jar | roborumble | robot | score-review | 78bba33b96e662cd | - | - | | roborumble/deo.FlowerBot_1.0.jar | roborumble | robot | PASS | fc65e7d5693090d9 | - | - | -| roborumble/deo.virtual.RainbowBot_1.0.jar | roborumble | robot | DISCREPANCY (score) | 38ab74151e9be2ed | - | - | +| roborumble/deo.virtual.RainbowBot_1.0.jar | roborumble | robot | score-review | 38ab74151e9be2ed | - | - | diff --git a/compat-test/parity_registry.py b/compat-test/parity_registry.py index e8d0c34..45b7ee4 100644 --- a/compat-test/parity_registry.py +++ b/compat-test/parity_registry.py @@ -15,7 +15,7 @@ FRAME_NOISE_PREFIXES = ("java.", "javax.", "jdk.", "sun.", "robocode.", "dev.robocode.") UNRESOLVED_STATUSES = frozenset(( "DISCREPANCY (errors)", "DISCREPANCY (score)", "DISCREPANCY (no score)", - "DISCREPANCY (outcome)", "FAIL (RC)", "FAIL (TR)", "FAIL (both)", + "DISCREPANCY (outcome)", "CONFIRMED (score)", "FAIL (RC)", "FAIL (TR)", "FAIL (both)", )) @@ -70,6 +70,14 @@ def is_unresolved(status: str) -> bool: return status in UNRESOLVED_STATUSES +def registry_status(status: str) -> str: + return "score-review" if status == "DISCREPANCY (score)" else status + + +def score_gap_confirmed(deltas: list[float], threshold: float, repeats: int = 5) -> bool: + return len(deltas) >= repeats and abs(sum(deltas) / len(deltas)) > threshold + + def load_registry(path: Path) -> dict: if path.exists(): return json.loads(path.read_text(encoding="utf-8")) @@ -115,11 +123,16 @@ def sync_state(registry: dict, state: dict, collection_dir: Path, manifest: dict "setup": entry.get("setup"), "classic": entry.get("rc", {}), "tank_royale": entry.get("tr", {}), + "confirmation": entry.get("confirmation"), "manifest": manifest, }) subject["latest_observation"] = oid - subject["status"] = entry.get("status") + subject["status"] = registry_status(entry.get("status", "unknown")) added += 1 + for subject in subjects.values(): + observations = subject.get("observations", []) + if observations: + subject["status"] = registry_status(observations[-1].get("status", "unknown")) return added diff --git a/compat-test/test_parity_registry.py b/compat-test/test_parity_registry.py index 4457fed..3ea01ee 100644 --- a/compat-test/test_parity_registry.py +++ b/compat-test/test_parity_registry.py @@ -45,6 +45,13 @@ def testHARN001_UnitNegative_FailedCasesRemainUnresolved(self): self.assertTrue(registry.is_unresolved("DISCREPANCY (score)")) self.assertFalse(registry.is_unresolved("PASS")) + def testSCORE002_UnitPositive_FiveRepeatedScoreGapsAreConfirmed(self): + self.assertTrue(registry.score_gap_confirmed([20.0, 21.0, 22.0, 19.0, 20.0], 15.0)) + + def testSCORE002_UnitNegative_InsufficientOrSmallSamplesStayInReview(self): + self.assertFalse(registry.score_gap_confirmed([30.0, 30.0, 30.0, 30.0], 15.0)) + self.assertFalse(registry.score_gap_confirmed([2.0, 3.0, 4.0, 2.0, 3.0], 15.0)) + def testHARN001_UnitPositive_TeamIdentityIncludesItsJarDigest(self): with tempfile.TemporaryDirectory() as directory: root = Path(directory) From 3f2c69ec447b637c2ddadcb8177dc0ed18f82163 Mon Sep 17 00:00:00 2001 From: "Flemming N. Larsen" Date: Wed, 9 Sep 2026 20:09:35 +0200 Subject: [PATCH 4/5] Repair parity registry review findings --- compat-test/README.md | 3 +- compat-test/compat_test.py | 39 +- compat-test/parity-registry.json | 3174 +++++++++++------ compat-test/parity_registry.py | 75 +- compat-test/test_parity_registry.py | 54 + .../PDR-003-versioned-parity-registry.md | 4 +- 6 files changed, 2202 insertions(+), 1147 deletions(-) diff --git a/compat-test/README.md b/compat-test/README.md index c2e65ed..850740f 100644 --- a/compat-test/README.md +++ b/compat-test/README.md @@ -79,6 +79,7 @@ python compat_test.py --rounds 5 # override the official round cou python compat_test.py --retry-failed # re-run only FAIL/ERROR robots python compat_test.py --retry-unresolved # re-run every unresolved parity case python compat_test.py --retest-cause lifecycle # re-run unresolved cases tagged to one cause +python compat_test.py --retest-cause lifecycle --repair 249cdaf # link retest to its repair python compat_test.py --sync-registry --registry-manifest C:\path\to\run-manifest.json python compat_test.py --force # re-run everything python compat_test.py --report-only # just regenerate the report @@ -198,7 +199,7 @@ untested robot. Completed robots are never re-run unless `--force` (everything) Full error details land in `errors/robocode/.log` and `errors/tank-royale/.log`; the master table is `compatibility_report.md`. -`parity-registry.json` is the tracked evidence carrier. It appends each subject observation with its jar identity, setup, engine artifacts, normalized errors, and current diagnosis. `parity-registry.md` renders the current status of every subject for review. Import an existing checkpoint with `--sync-registry`; after a diagnosis, tag a case with `--set-cause ` and rerun that cause with `--retest-cause `. +`parity-registry.json` is the tracked evidence carrier. It appends each subject observation with the exact jar identity, setup, engine artifacts, normalized errors, and focused retest link. It also retains an append-only diagnosis history, so a later triage decision cannot rewrite an earlier one. `parity-registry.md` renders the current status of every subject for review. Import an existing checkpoint with `--sync-registry`; after a diagnosis, tag a case with `--set-cause ` and rerun that cause with `--retest-cause --repair `. **Every row states the setup it was measured at.** The report is regenerated from the state file long after the battles ran, so a single header describing the current configuration diff --git a/compat-test/compat_test.py b/compat-test/compat_test.py index 5eabadb..f914495 100644 --- a/compat-test/compat_test.py +++ b/compat-test/compat_test.py @@ -39,7 +39,9 @@ from pathlib import Path from parity_registry import ( + add_diagnosis, compare_errors, + diagnosis_for_cause, error_signatures, is_unresolved, load_registry, @@ -302,7 +304,7 @@ def collected(): if time.time() > deadline: kill_process_tree(proc) return -1, collected() + "\n", True - if abort_when(): + if abort_when("".join(chunks)): kill_process_tree(proc) return -1, collected() + "\n", False time.sleep(poll_seconds) @@ -338,13 +340,23 @@ def __init__(self, bot_dirs, rc_signatures): self.found = set() self.triggered = False - def __call__(self): + def __call__(self, worker_output=""): + """Check both bot logs and runner/worker output received so far. + + Runner output arrives through ``run_java`` while the process is live. Looking at + it here gives C-004 the same fail-fast behavior for exceptions reported by the + runner or worker as for exceptions written by a staged bot. + """ for d in self.bot_dirs: for log_name in ("stderr.log", "stdout.log"): for signature in error_signatures([], read_capped(d / log_name)): key = (signature["exception"], signature["origin"]) if key not in self.rc_signatures: self.found.add(key) + for signature in error_signatures([], worker_output): + key = (signature["exception"], signature["origin"]) + if key not in self.rc_signatures: + self.found.add(key) self.triggered = bool(self.found) return self.triggered @@ -970,9 +982,10 @@ def should_run(entry, opts, registry=None, key=None): if opts.confirm_score and entry.get("status") == "DISCREPANCY (score)": return True if opts.retest_cause and registry is not None and key: - diagnosis = registry.get("subjects", {}).get(key, {}).get("diagnosis", {}) + diagnosis = diagnosis_for_cause(registry.get("subjects", {}).get(key, {}), + opts.retest_cause) return (is_unresolved(entry.get("status", "")) - and diagnosis.get("cause") == opts.retest_cause) + and diagnosis is not None) if opts.retry_failed: return entry.get("status", "").startswith(("FAIL", "ERROR", "HARNESS", "DISCREPANCY")) return False @@ -1036,6 +1049,8 @@ def parse_args(): help="run five official repeats for score-review cases") p.add_argument("--retest-cause", help="re-run unresolved registry cases tagged with this diagnosis cause") + p.add_argument("--repair", + help="repair reference recorded on observations made by --retest-cause") p.add_argument("--set-cause", nargs=3, metavar=("SUBJECT", "CAUSE", "OWNER"), help="tag a registry subject with its diagnosed cause and owner") p.add_argument("--sync-registry", action="store_true", @@ -1618,6 +1633,10 @@ def division_setup(collection, opts): def main(): opts = parse_args() + if opts.repair and not opts.retest_cause: + print("--repair requires --retest-cause so it can be linked to a diagnosis.", file=sys.stderr) + return 2 + if opts.conformance: return run_conformance(opts) if opts.regression: @@ -1646,7 +1665,7 @@ def main(): if subject is None: print(f"Registry subject not found: {subject_key}", file=sys.stderr) return 2 - subject["diagnosis"] = {"state": "diagnosed", "cause": cause, "owner": owner} + add_diagnosis(subject, cause, owner, now_iso()) save_registry(registry, PARITY_REGISTRY_FILE, PARITY_REGISTRY_REPORT) print(f"Tagged {subject_key} with cause {cause} ({owner}).") return 0 @@ -1674,6 +1693,12 @@ def main(): print(f"{index} {key} ...", flush=True) setup = division_setup(collection, opts) + diagnosis = diagnosis_for_cause( + registry.get("subjects", {}).get(key, {}), opts.retest_cause) \ + if opts.retest_cause else None + retest = ({"cause": diagnosis["cause"], "owner": diagnosis.get("owner"), + "diagnosis_id": diagnosis["id"], "repair": opts.repair} + if diagnosis else None) if opts.confirm_score: measured = measure_repeatedly(jar, classname, version, opts, setup, REGRESSION_REPEATS) if measured["bridge_only_signatures"]: @@ -1694,6 +1719,8 @@ def main(): "confirmation": measured, "completed_at": now_iso(), } + if retest: + state["robots"][key]["retest"] = retest save_state(state) regenerate_report(state) tested += 1 @@ -1725,6 +1752,8 @@ def main(): "errors", "error_signatures", "bridge_only_signatures", "has_log", "skipped")}, "completed_at": now_iso(), } + if retest: + state["robots"][key]["retest"] = retest save_state(state) regenerate_report(state) tested += 1 diff --git a/compat-test/parity-registry.json b/compat-test/parity-registry.json index 66e1ce6..cb09890 100644 --- a/compat-test/parity-registry.json +++ b/compat-test/parity-registry.json @@ -1,12 +1,8 @@ { - "schema_version": 1, + "schema_version": 2, "subjects": { "roborumble/AD.CodaFirst_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "AD.CodaFirst 1.1", "division": "roborumble", @@ -70,6 +66,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "AD.CodaFirst 1.1", + "division": "roborumble", + "jar": "AD.CodaFirst_1.1.jar", + "jar_sha256": "140825976d19ac8cbbf3a92040a9bc8568acb15933f6888cd0adce705497421f", + "key": "roborumble/AD.CodaFirst_1.1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 18.0, @@ -89,11 +93,7 @@ "status": "score-review" }, "roborumble/AIR.iRobot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "AIR.iRobot 1.0", "division": "roborumble", @@ -157,6 +157,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "AIR.iRobot 1.0", + "division": "roborumble", + "jar": "AIR.iRobot_1.0.jar", + "jar_sha256": "b0843906e321f787ca4da9f79bdd645f2e8524a69a98056e89350a9efed076af", + "key": "roborumble/AIR.iRobot_1.0.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 6.2, @@ -177,11 +185,7 @@ "status": "FAIL (TR)" }, "roborumble/And.BasicSurfer_FF1.6.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "And.BasicSurfer FF1.6", "division": "roborumble", @@ -245,6 +249,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "And.BasicSurfer FF1.6", + "division": "roborumble", + "jar": "And.BasicSurfer_FF1.6.jar", + "jar_sha256": "ff0393de6bfab609d13bd37c562ff5d2736e7b186ebfd65039ac1cde3546b1f9", + "key": "roborumble/And.BasicSurfer_FF1.6.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 24.0, @@ -264,11 +276,7 @@ "status": "PASS" }, "roborumble/ArchAlpha.ArchimedesAlpha_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ArchAlpha.ArchimedesAlpha 1.0", "division": "roborumble", @@ -332,6 +340,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ArchAlpha.ArchimedesAlpha 1.0", + "division": "roborumble", + "jar": "ArchAlpha.ArchimedesAlpha_1.0.jar", + "jar_sha256": "dcb4cdb1a904ba42b0747af1b29c660fe5fd01c225f4f079875cc07499b36554", + "key": "roborumble/ArchAlpha.ArchimedesAlpha_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (no score)", "tank_royale": { "elapsed": 30.0, @@ -351,11 +367,7 @@ "status": "DISCREPANCY (no score)" }, "roborumble/CharlieN.Omega.Omega_1.03.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "CharlieN.Omega.Omega 1.03", "division": "roborumble", @@ -419,6 +431,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "CharlieN.Omega.Omega 1.03", + "division": "roborumble", + "jar": "CharlieN.Omega.Omega_1.03.jar", + "jar_sha256": "fc785490d5488702362baf9d7ed4a1e49d3b35e56054c64deab067d69423b8a7", + "key": "roborumble/CharlieN.Omega.Omega_1.03.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -438,11 +458,7 @@ "status": "PASS" }, "roborumble/a.FreyaOS_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "a.FreyaOS 1.0", "division": "roborumble", @@ -506,6 +522,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "a.FreyaOS 1.0", + "division": "roborumble", + "jar": "a.FreyaOS_1.0.jar", + "jar_sha256": "76223355e093db18e286f0660a56ffe097eb1d5549215c31cc60bddf946602b4", + "key": "roborumble/a.FreyaOS_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 26.0, @@ -575,6 +599,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "a.FreyaOS 1.0", + "division": "roborumble", + "jar": "a.FreyaOS_1.0.jar", + "jar_sha256": "76223355e093db18e286f0660a56ffe097eb1d5549215c31cc60bddf946602b4", + "key": "roborumble/a.FreyaOS_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "bridge_only_signatures": null, @@ -596,11 +628,7 @@ "status": "score-review" }, "roborumble/aaa.r.ScalarR_0.005h.053.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "aaa.r.ScalarR 0.005h.053", "division": "roborumble", @@ -664,6 +692,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "aaa.r.ScalarR 0.005h.053", + "division": "roborumble", + "jar": "aaa.r.ScalarR_0.005h.053.jar", + "jar_sha256": "60fef68d968790732c85b20d885e1ca9e99c5ba245e43c1a167f9f3b8956c055", + "key": "roborumble/aaa.r.ScalarR_0.005h.053.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 14.1, @@ -683,11 +719,7 @@ "status": "score-review" }, "roborumble/ab.DengerousRoBatra_1.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ab.DengerousRoBatra 1.3", "division": "roborumble", @@ -751,6 +783,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ab.DengerousRoBatra 1.3", + "division": "roborumble", + "jar": "ab.DengerousRoBatra_1.3.jar", + "jar_sha256": "62d46305baa7ded6cbbe763b1614d41c1ff2dd2d9992c028cfbf1a26c228530f", + "key": "roborumble/ab.DengerousRoBatra_1.3.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -770,11 +810,7 @@ "status": "PASS" }, "roborumble/abud.ThirdRobo_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "abud.ThirdRobo 1.0", "division": "roborumble", @@ -939,6 +975,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "abud.ThirdRobo 1.0", + "division": "roborumble", + "jar": "abud.ThirdRobo_1.0.jar", + "jar_sha256": "124b7067cca1b407845176fd26ad2388aab1ad20085b34bd5561539515272a16", + "key": "roborumble/abud.ThirdRobo_1.0.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -1038,11 +1082,7 @@ "status": "FAIL (TR)" }, "roborumble/acid.Bl4ck_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "acid.Bl4ck 1.0", "division": "roborumble", @@ -1106,6 +1146,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "acid.Bl4ck 1.0", + "division": "roborumble", + "jar": "acid.Bl4ck_1.0.jar", + "jar_sha256": "50cca7b205a1a20119a7b0d3810f54e6ce0a0c985612da73c161fcdc5bbbd5fd", + "key": "roborumble/acid.Bl4ck_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 26.0, @@ -1125,11 +1173,7 @@ "status": "score-review" }, "roborumble/acid.Null_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "acid.Null 1.0", "division": "roborumble", @@ -1193,6 +1237,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "acid.Null 1.0", + "division": "roborumble", + "jar": "acid.Null_1.0.jar", + "jar_sha256": "66547223ee9a81b17dc19f612f5ec2fe6745fcacee1823d5d88c61cd08c76f04", + "key": "roborumble/acid.Null_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 28.0, @@ -1212,11 +1264,7 @@ "status": "score-review" }, "roborumble/acid.Syzygy_1.0.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "acid.Syzygy 1.0.4", "division": "roborumble", @@ -1280,6 +1328,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "acid.Syzygy 1.0.4", + "division": "roborumble", + "jar": "acid.Syzygy_1.0.4.jar", + "jar_sha256": "a7336d30e377b013c9beaa6b4afabf93d3b8a83224d344beb7428e0361c4aa97", + "key": "roborumble/acid.Syzygy_1.0.4.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 28.1, @@ -1299,11 +1355,7 @@ "status": "score-review" }, "roborumble/ad.Quest_0.10.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ad.Quest 0.10", "division": "roborumble", @@ -1367,6 +1419,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ad.Quest 0.10", + "division": "roborumble", + "jar": "ad.Quest_0.10.jar", + "jar_sha256": "7121f3447f5a2ee15fb6a8efbdecb35c5732def3307427f5c747990b2b2d8969", + "key": "roborumble/ad.Quest_0.10.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -1386,11 +1446,7 @@ "status": "PASS" }, "roborumble/ad.last.Bottom_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ad.last.Bottom 1.0", "division": "roborumble", @@ -1454,6 +1510,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ad.last.Bottom 1.0", + "division": "roborumble", + "jar": "ad.last.Bottom_1.0.jar", + "jar_sha256": "8ae6c84241634e3f1b2f550ff6bf50b603dd8f19c23f67e06df6c2328a0820bf", + "key": "roborumble/ad.last.Bottom_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 34.0, @@ -1473,11 +1537,7 @@ "status": "score-review" }, "roborumble/adt.Ar1_2.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "adt.Ar1 2.1", "division": "roborumble", @@ -1541,6 +1601,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "adt.Ar1 2.1", + "division": "roborumble", + "jar": "adt.Ar1_2.1.jar", + "jar_sha256": "37857b3fe3d082f121da8dd8ca81a5ea58edcab65fad3c552d71dfa65f58b14e", + "key": "roborumble/adt.Ar1_2.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -1560,11 +1628,7 @@ "status": "PASS" }, "roborumble/adt.Ar2_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "adt.Ar2 1.0", "division": "roborumble", @@ -1628,6 +1692,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "adt.Ar2 1.0", + "division": "roborumble", + "jar": "adt.Ar2_1.0.jar", + "jar_sha256": "2adf54760aefa12c1e79667c064a9529b85aed2218e8a7457c335fb91153394e", + "key": "roborumble/adt.Ar2_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -1647,11 +1719,7 @@ "status": "PASS" }, "roborumble/aetos.AetosFirstBot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "aetos.AetosFirstBot 1.0", "division": "roborumble", @@ -1715,6 +1783,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "aetos.AetosFirstBot 1.0", + "division": "roborumble", + "jar": "aetos.AetosFirstBot_1.0.jar", + "jar_sha256": "b07790002d150956d9c859100b63581fbf720807de75ea51d10d2355c23552dd", + "key": "roborumble/aetos.AetosFirstBot_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -1734,11 +1810,7 @@ "status": "PASS" }, "roborumble/ag.Gir_0.99.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ag.Gir 0.99", "division": "roborumble", @@ -1802,6 +1874,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ag.Gir 0.99", + "division": "roborumble", + "jar": "ag.Gir_0.99.jar", + "jar_sha256": "35a4cbabb1c433b6a4e54977741e90195fa95332d7afcce0c7ffe9c8af1ce32d", + "key": "roborumble/ag.Gir_0.99.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 10.1, @@ -1859,11 +1939,7 @@ "status": "FAIL (TR)" }, "roborumble/agd.Mooserwirt2_2.7.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "agd.Mooserwirt2 2.7", "division": "roborumble", @@ -1927,6 +2003,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "agd.Mooserwirt2 2.7", + "division": "roborumble", + "jar": "agd.Mooserwirt2_2.7.jar", + "jar_sha256": "377e6a4c674d0436ee7d3cf8e29c2581fc37e55238e6fefef86394c55a35b556", + "key": "roborumble/agd.Mooserwirt2_2.7.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 24.0, @@ -1946,11 +2030,7 @@ "status": "score-review" }, "roborumble/agrach.Dalek_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "agrach.Dalek 1.0", "division": "roborumble", @@ -2014,6 +2094,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "agrach.Dalek 1.0", + "division": "roborumble", + "jar": "agrach.Dalek_1.0.jar", + "jar_sha256": "1b594bd828661ec7fbeb11aba73bccf7567d16e78a9ff21114a1f430c7152836", + "key": "roborumble/agrach.Dalek_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 22.2, @@ -2033,11 +2121,7 @@ "status": "score-review" }, "roborumble/agrach.MicroDalek_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "agrach.MicroDalek 1.0", "division": "roborumble", @@ -2101,6 +2185,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "agrach.MicroDalek 1.0", + "division": "roborumble", + "jar": "agrach.MicroDalek_1.0.jar", + "jar_sha256": "f0830bebf9d2d5be6388b696e437fc369f2e68f3255f56332a24f0b40f81b979", + "key": "roborumble/agrach.MicroDalek_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -2120,11 +2212,7 @@ "status": "PASS" }, "roborumble/agrach.RobotSlayer_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "agrach.RobotSlayer 1.0", "division": "roborumble", @@ -2188,6 +2276,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "agrach.RobotSlayer 1.0", + "division": "roborumble", + "jar": "agrach.RobotSlayer_1.0.jar", + "jar_sha256": "7710708e2d15c46fe622ea196065c3fa78c785a8ba0ab3afe5587de3d1072ff9", + "key": "roborumble/agrach.RobotSlayer_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 24.0, @@ -2207,11 +2303,7 @@ "status": "score-review" }, "roborumble/ags.Glacier_0.3.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ags.Glacier 0.3.2", "division": "roborumble", @@ -2275,6 +2367,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ags.Glacier 0.3.2", + "division": "roborumble", + "jar": "ags.Glacier_0.3.2.jar", + "jar_sha256": "2d8c919e37b033113b5377aac90c2ac1641a44fd31367c98190c2466be90a151", + "key": "roborumble/ags.Glacier_0.3.2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.0, @@ -2294,11 +2394,7 @@ "status": "score-review" }, "roborumble/ags.Midboss_1q.fast.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ags.Midboss 1q.fast", "division": "roborumble", @@ -2362,6 +2458,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ags.Midboss 1q.fast", + "division": "roborumble", + "jar": "ags.Midboss_1q.fast.jar", + "jar_sha256": "803ebb0582eb77b476fe649cf8875bbf95df2ebd92fcf7853077aa7b583a4045", + "key": "roborumble/ags.Midboss_1q.fast.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 24.0, @@ -2381,11 +2485,7 @@ "status": "PASS" }, "roborumble/ags.micro.Carpet_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ags.micro.Carpet 1.1", "division": "roborumble", @@ -2449,6 +2549,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ags.micro.Carpet 1.1", + "division": "roborumble", + "jar": "ags.micro.Carpet_1.1.jar", + "jar_sha256": "d7d22013f45d03d1d2131ebfbf63fedf29cae8f95bf7683eb8075a29569adc9e", + "key": "roborumble/ags.micro.Carpet_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 28.0, @@ -2468,11 +2576,7 @@ "status": "PASS" }, "roborumble/ags.polished.PolishedRuby_1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ags.polished.PolishedRuby 1", "division": "roborumble", @@ -2536,6 +2640,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ags.polished.PolishedRuby 1", + "division": "roborumble", + "jar": "ags.polished.PolishedRuby_1.jar", + "jar_sha256": "66674145d1a973e3d1b5079f97a991485a890c843f47ee5c0caff9fb9b0fbfcf", + "key": "roborumble/ags.polished.PolishedRuby_1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.1, @@ -2555,11 +2667,7 @@ "status": "score-review" }, "roborumble/ags.rougedc.RougeDC_willow.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ags.rougedc.RougeDC willow", "division": "roborumble", @@ -2623,6 +2731,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ags.rougedc.RougeDC willow", + "division": "roborumble", + "jar": "ags.rougedc.RougeDC_willow.jar", + "jar_sha256": "2aee27ddd085c75f61943240e090e018c9e69f658cd4afed508430910a41d2ab", + "key": "roborumble/ags.rougedc.RougeDC_willow.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.1, @@ -2642,11 +2758,7 @@ "status": "PASS" }, "roborumble/ahf.Acero_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ahf.Acero 1.0", "division": "roborumble", @@ -2710,6 +2822,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ahf.Acero 1.0", + "division": "roborumble", + "jar": "ahf.Acero_1.0.jar", + "jar_sha256": "5208b0efb272a5f43a85b11f70f05f0c550b5f2860b7e38d41d4f43a487a0fda", + "key": "roborumble/ahf.Acero_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -2729,11 +2849,7 @@ "status": "PASS" }, "roborumble/ahf.NanoAndrew_.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ahf.NanoAndrew .4", "division": "roborumble", @@ -2797,6 +2913,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ahf.NanoAndrew .4", + "division": "roborumble", + "jar": "ahf.NanoAndrew_.4.jar", + "jar_sha256": "667ad546b341badd93276d9de63623cf8ddd42918f46a2a04b23dbe114bacf2d", + "key": "roborumble/ahf.NanoAndrew_.4.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 30.0, @@ -2816,11 +2940,7 @@ "status": "score-review" }, "roborumble/ahf.r2d2.R2d2_0.86.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ahf.r2d2.R2d2 0.86", "division": "roborumble", @@ -2884,6 +3004,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ahf.r2d2.R2d2 0.86", + "division": "roborumble", + "jar": "ahf.r2d2.R2d2_0.86.jar", + "jar_sha256": "cdd8e80b980375b1ed59df8fe5a361207c9d3ee32c6e0d81f936e000c2b1b9f2", + "key": "roborumble/ahf.r2d2.R2d2_0.86.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.0, @@ -2903,11 +3031,7 @@ "status": "score-review" }, "roborumble/ahr.ice.Ice_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ahr.ice.Ice 1.0", "division": "roborumble", @@ -2971,6 +3095,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ahr.ice.Ice 1.0", + "division": "roborumble", + "jar": "ahr.ice.Ice_1.0.jar", + "jar_sha256": "419d2945138fc27ba706a168f2ef666a1b40905e98b08ccc62312f2de15ef242", + "key": "roborumble/ahr.ice.Ice_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -2990,11 +3122,7 @@ "status": "PASS" }, "roborumble/ak.Fermat_2.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ak.Fermat 2.0", "division": "roborumble", @@ -3058,6 +3186,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ak.Fermat 2.0", + "division": "roborumble", + "jar": "ak.Fermat_2.0.jar", + "jar_sha256": "814688bbe0f93cf5cc6a6be42ab0e69ad0259c54cba8547b20ddb4b1bd7107b3", + "key": "roborumble/ak.Fermat_2.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.0, @@ -3077,11 +3213,7 @@ "status": "score-review" }, "roborumble/alex.Diabolo5_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "alex.Diabolo5 1.1", "division": "roborumble", @@ -3145,6 +3277,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "alex.Diabolo5 1.1", + "division": "roborumble", + "jar": "alex.Diabolo5_1.1.jar", + "jar_sha256": "cc1530acd1e1ec159e4dde664d7ea82601b7b69ac93a0a081725f877391e6496", + "key": "roborumble/alex.Diabolo5_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -3164,11 +3304,7 @@ "status": "PASS" }, "roborumble/alk.lap.LoudAndProud_2.23.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "alk.lap.LoudAndProud 2.23", "division": "roborumble", @@ -3232,6 +3368,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "alk.lap.LoudAndProud 2.23", + "division": "roborumble", + "jar": "alk.lap.LoudAndProud_2.23.jar", + "jar_sha256": "17efb1d5344e72a8d6a5028db163d1727b131b8b9b2cb146e801df88cc1b945b", + "key": "roborumble/alk.lap.LoudAndProud_2.23.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -3251,11 +3395,7 @@ "status": "PASS" }, "roborumble/am.Miedzix_3.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "am.Miedzix 3.0", "division": "roborumble", @@ -3319,6 +3459,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "am.Miedzix 3.0", + "division": "roborumble", + "jar": "am.Miedzix_3.0.jar", + "jar_sha256": "eaebae0baf5108909282e2e018424089c946d6cf91938a01185df48783fa097f", + "key": "roborumble/am.Miedzix_3.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 12.0, @@ -3338,11 +3486,7 @@ "status": "PASS" }, "roborumble/amarok.Rookie_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amarok.Rookie 1.1", "division": "roborumble", @@ -3406,6 +3550,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amarok.Rookie 1.1", + "division": "roborumble", + "jar": "amarok.Rookie_1.1.jar", + "jar_sha256": "34cf928378f574c9d6eba50911a39c636f8a7605c310be52839fd1bd4d667e39", + "key": "roborumble/amarok.Rookie_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -3425,11 +3577,7 @@ "status": "PASS" }, "roborumble/amc.ROBv202_1.01.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amc.ROBv202 1.01", "division": "roborumble", @@ -3493,6 +3641,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amc.ROBv202 1.01", + "division": "roborumble", + "jar": "amc.ROBv202_1.01.jar", + "jar_sha256": "eeeefad3aaac8d19b0ce5d7a3d3af5b4808fefbaf71523c6ecd43834150ee6be", + "key": "roborumble/amc.ROBv202_1.01.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 28.0, @@ -3512,11 +3668,7 @@ "status": "PASS" }, "roborumble/amc.ROBv203_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amc.ROBv203 1.0", "division": "roborumble", @@ -3580,6 +3732,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amc.ROBv203 1.0", + "division": "roborumble", + "jar": "amc.ROBv203_1.0.jar", + "jar_sha256": "1bb9b1b15f09c382abba7ee7043a81277dda0cb68bcd058b92f02fa0abda3bdd", + "key": "roborumble/amc.ROBv203_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -3599,11 +3759,7 @@ "status": "PASS" }, "roborumble/amc.ROBv300_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amc.ROBv300 1.1", "division": "roborumble", @@ -3667,6 +3823,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amc.ROBv300 1.1", + "division": "roborumble", + "jar": "amc.ROBv300_1.1.jar", + "jar_sha256": "6db4ed03047d5efd9e8de254be8f68d9e3417a875c591e974514ff055d390920", + "key": "roborumble/amc.ROBv300_1.1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 24.1, @@ -3686,11 +3850,7 @@ "status": "score-review" }, "roborumble/amc.ROBv301_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amc.ROBv301 1.1", "division": "roborumble", @@ -3754,6 +3914,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amc.ROBv301 1.1", + "division": "roborumble", + "jar": "amc.ROBv301_1.1.jar", + "jar_sha256": "0f5ce30be90a631bbca672094046847e552d2b2370af3ec73b3d9ed8c737798f", + "key": "roborumble/amc.ROBv301_1.1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 24.1, @@ -3773,11 +3941,7 @@ "status": "score-review" }, "roborumble/amc.ROBv400_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amc.ROBv400 1.0", "division": "roborumble", @@ -3841,6 +4005,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amc.ROBv400 1.0", + "division": "roborumble", + "jar": "amc.ROBv400_1.0.jar", + "jar_sha256": "ed8d81415f6cc852706df58f162e484cb4dc68882357c4e2f5875f5908eafa86", + "key": "roborumble/amc.ROBv400_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 22.0, @@ -3860,11 +4032,7 @@ "status": "score-review" }, "roborumble/amk.ChumbaMini_0.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amk.ChumbaMini 0.2", "division": "roborumble", @@ -4029,6 +4197,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amk.ChumbaMini 0.2", + "division": "roborumble", + "jar": "amk.ChumbaMini_0.2.jar", + "jar_sha256": "5770270c23f9223e4df93f5455fcf461ecd30309fc318f3d53cbbdf93e133d6b", + "key": "roborumble/amk.ChumbaMini_0.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -4048,11 +4224,7 @@ "status": "PASS" }, "roborumble/amk.ChumbaWumba_0.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amk.ChumbaWumba 0.3", "division": "roborumble", @@ -4116,6 +4288,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amk.ChumbaWumba 0.3", + "division": "roborumble", + "jar": "amk.ChumbaWumba_0.3.jar", + "jar_sha256": "f7594cdfa02419ae112013ec923387736a89840712162020ecb899e39d6127e9", + "key": "roborumble/amk.ChumbaWumba_0.3.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -4135,11 +4315,7 @@ "status": "PASS" }, "roborumble/amk.Punbot.Punbot_0.01.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amk.Punbot.Punbot 0.01", "division": "roborumble", @@ -4203,6 +4379,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amk.Punbot.Punbot 0.01", + "division": "roborumble", + "jar": "amk.Punbot.Punbot_0.01.jar", + "jar_sha256": "44e10755757c7cb523ad7f6a746f5524f6a054fe7d047528da8330829284b389", + "key": "roborumble/amk.Punbot.Punbot_0.01.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -4222,11 +4406,7 @@ "status": "PASS" }, "roborumble/amk.ShizzleStiX.ShizzleStiX_0.6.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amk.ShizzleStiX.ShizzleStiX 0.6", "division": "roborumble", @@ -4290,6 +4470,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amk.ShizzleStiX.ShizzleStiX 0.6", + "division": "roborumble", + "jar": "amk.ShizzleStiX.ShizzleStiX_0.6.jar", + "jar_sha256": "3e93e50b7380b8b2f98ab1c30911bc56a98c6eb27ccb5125d1aa8cbbc5987850", + "key": "roborumble/amk.ShizzleStiX.ShizzleStiX_0.6.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -4309,11 +4497,7 @@ "status": "PASS" }, "roborumble/amk.jointstrike.JointStrike_0.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amk.jointstrike.JointStrike 0.2", "division": "roborumble", @@ -4377,6 +4561,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amk.jointstrike.JointStrike 0.2", + "division": "roborumble", + "jar": "amk.jointstrike.JointStrike_0.2.jar", + "jar_sha256": "3f45fd832f7bb6b6ceb3841c1ab108583ba11b49ba06cbde2f8e61637dc28297", + "key": "roborumble/amk.jointstrike.JointStrike_0.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -4396,11 +4588,7 @@ "status": "PASS" }, "roborumble/amk.superstrike.SuperStrike_0.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "amk.superstrike.SuperStrike 0.3", "division": "roborumble", @@ -4464,6 +4652,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "amk.superstrike.SuperStrike 0.3", + "division": "roborumble", + "jar": "amk.superstrike.SuperStrike_0.3.jar", + "jar_sha256": "ef146a488f92e25b5f8f957831fd715bb6a6b2b1f8cf72ffa05bad505c34c79b", + "key": "roborumble/amk.superstrike.SuperStrike_0.3.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 18.0, @@ -4483,11 +4679,7 @@ "status": "score-review" }, "roborumble/ao.T100_0.9.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ao.T100 0.9", "division": "roborumble", @@ -4551,6 +4743,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ao.T100 0.9", + "division": "roborumble", + "jar": "ao.T100_0.9.jar", + "jar_sha256": "05273a2b787354f59695eeb17a4a8de330ed34d75d805aa17d91a7b756efaae0", + "key": "roborumble/ao.T100_0.9.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 96.1, @@ -4570,11 +4770,7 @@ "status": "score-review" }, "roborumble/ap.Frederick_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ap.Frederick 1.1", "division": "roborumble", @@ -4638,6 +4834,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ap.Frederick 1.1", + "division": "roborumble", + "jar": "ap.Frederick_1.1.jar", + "jar_sha256": "d7f1709e4ea064f0662f383c339f57390977292fdd921933adc36e305a375899", + "key": "roborumble/ap.Frederick_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 34.0, @@ -4657,11 +4861,7 @@ "status": "PASS" }, "roborumble/apc.Caan_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apc.Caan 1.0", "division": "roborumble", @@ -4725,6 +4925,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apc.Caan 1.0", + "division": "roborumble", + "jar": "apc.Caan_1.0.jar", + "jar_sha256": "1cd29b8da786378b068170b3be45ce03620477218732e4b54e939165f33463b6", + "key": "roborumble/apc.Caan_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -4744,11 +4952,7 @@ "status": "PASS" }, "roborumble/apc.Colossus2_0.12.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apc.Colossus2 0.12", "division": "roborumble", @@ -4812,6 +5016,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apc.Colossus2 0.12", + "division": "roborumble", + "jar": "apc.Colossus2_0.12.jar", + "jar_sha256": "b4dbfb04c20332efad6d132d89259a0218fb245dbc8d73a14e368d6dcc024db3", + "key": "roborumble/apc.Colossus2_0.12.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -4929,11 +5141,7 @@ "status": "FAIL (TR)" }, "roborumble/apc.LeeroyJenkins2_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apc.LeeroyJenkins2 1.0", "division": "roborumble", @@ -4997,6 +5205,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apc.LeeroyJenkins2 1.0", + "division": "roborumble", + "jar": "apc.LeeroyJenkins2_1.0.jar", + "jar_sha256": "966e1947db52d724adaf02c233a17fdb172066c7fb9ab7a41741ba7eb5374a0d", + "key": "roborumble/apc.LeeroyJenkins2_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -5016,11 +5232,7 @@ "status": "PASS" }, "roborumble/apc.botM_3.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apc.botM 3.0", "division": "roborumble", @@ -5084,6 +5296,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apc.botM 3.0", + "division": "roborumble", + "jar": "apc.botM_3.0.jar", + "jar_sha256": "9348a9b3c2e0f175bacf361dc3b20a0842f186c228564bcafd8b6d853d345d94", + "key": "roborumble/apc.botM_3.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -5103,11 +5323,7 @@ "status": "PASS" }, "roborumble/apollokidd.ApolloKidd_0.9.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apollokidd.ApolloKidd 0.9", "division": "roborumble", @@ -5171,6 +5387,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apollokidd.ApolloKidd 0.9", + "division": "roborumble", + "jar": "apollokidd.ApolloKidd_0.9.jar", + "jar_sha256": "e7153516f9b25d4d571e484022c7c9fc6ab19f036faeb46213764691c84e7390", + "key": "roborumble/apollokidd.ApolloKidd_0.9.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 24.0, @@ -5190,11 +5414,7 @@ "status": "score-review" }, "roborumble/apv.AspidReloaded_0.6.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.AspidReloaded 0.6", "division": "roborumble", @@ -5258,6 +5478,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.AspidReloaded 0.6", + "division": "roborumble", + "jar": "apv.AspidReloaded_0.6.jar", + "jar_sha256": "9cbef59e538da1a8edb9d9dd38ac7970a9607232b6e663eeaae9899c4c3161b1", + "key": "roborumble/apv.AspidReloaded_0.6.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -5277,11 +5505,7 @@ "status": "PASS" }, "roborumble/apv.Aspid_1.7.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.Aspid 1.7", "division": "roborumble", @@ -5345,6 +5569,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.Aspid 1.7", + "division": "roborumble", + "jar": "apv.Aspid_1.7.jar", + "jar_sha256": "4cf2bf08d8816f48106ef02f849e5afd7b52f46490902c8643d2d1c19853437d", + "key": "roborumble/apv.Aspid_1.7.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -5364,11 +5596,7 @@ "status": "PASS" }, "roborumble/apv.LauLectrik_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.LauLectrik 1.2", "division": "roborumble", @@ -5435,6 +5663,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.LauLectrik 1.2", + "division": "roborumble", + "jar": "apv.LauLectrik_1.2.jar", + "jar_sha256": "b9268644ac0983cc1feaef4d7052c796ba74e0da321887bdaf37da70725ff822", + "key": "roborumble/apv.LauLectrik_1.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -5457,11 +5693,7 @@ "status": "PASS" }, "roborumble/apv.MicroAspid_1.8.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.MicroAspid 1.8", "division": "roborumble", @@ -5525,6 +5757,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.MicroAspid 1.8", + "division": "roborumble", + "jar": "apv.MicroAspid_1.8.jar", + "jar_sha256": "2bbff478cfaca3f612e1bb707973c4a65a7be125ef016689f3cba9363f9147e6", + "key": "roborumble/apv.MicroAspid_1.8.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -5544,11 +5784,7 @@ "status": "PASS" }, "roborumble/apv.NanoLauLectrikTheCannibal_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.NanoLauLectrikTheCannibal 1.1", "division": "roborumble", @@ -5612,6 +5848,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.NanoLauLectrikTheCannibal 1.1", + "division": "roborumble", + "jar": "apv.NanoLauLectrikTheCannibal_1.1.jar", + "jar_sha256": "de413e324848ddca35723cea47c4ed4e23c46b669d4fbfe97ceac6d2c93c1fc8", + "key": "roborumble/apv.NanoLauLectrikTheCannibal_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 12.0, @@ -5631,11 +5875,7 @@ "status": "PASS" }, "roborumble/apv.NanoLauLectrik_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.NanoLauLectrik 1.0", "division": "roborumble", @@ -5699,6 +5939,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.NanoLauLectrik 1.0", + "division": "roborumble", + "jar": "apv.NanoLauLectrik_1.0.jar", + "jar_sha256": "4500794fdf2577950dd3981cdb314b4f750e1bfa66133dcdf546fa0203ee868d", + "key": "roborumble/apv.NanoLauLectrik_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -5718,11 +5966,7 @@ "status": "PASS" }, "roborumble/apv.ScruchiPu_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.ScruchiPu 1.0", "division": "roborumble", @@ -5786,6 +6030,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.ScruchiPu 1.0", + "division": "roborumble", + "jar": "apv.ScruchiPu_1.0.jar", + "jar_sha256": "dcefa76d1e2eb841349fe2dce3a84218c99c08dba3eb6ecc5a34b933e00096bc", + "key": "roborumble/apv.ScruchiPu_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -5805,11 +6057,7 @@ "status": "PASS" }, "roborumble/apv.TheBrainPi_0.5fix.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.TheBrainPi 0.5fix", "division": "roborumble", @@ -5873,6 +6121,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.TheBrainPi 0.5fix", + "division": "roborumble", + "jar": "apv.TheBrainPi_0.5fix.jar", + "jar_sha256": "6414ce843145505046bfdb9c4cba00b486ebdead9767c9d3d1fb3b245746746e", + "key": "roborumble/apv.TheBrainPi_0.5fix.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -5892,11 +6148,7 @@ "status": "PASS" }, "roborumble/apv.test.Virus_0.6.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "apv.test.Virus 0.6.1", "division": "roborumble", @@ -5960,6 +6212,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "apv.test.Virus 0.6.1", + "division": "roborumble", + "jar": "apv.test.Virus_0.6.1.jar", + "jar_sha256": "d6ce0ae230281fd974d6326c1e80fe53714bdbe20a09511911e81efed040f798", + "key": "roborumble/apv.test.Virus_0.6.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 24.0, @@ -5979,11 +6239,7 @@ "status": "PASS" }, "roborumble/ar.QuantumChromodynamics_1.2.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ar.QuantumChromodynamics 1.2.1", "division": "roborumble", @@ -6047,6 +6303,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ar.QuantumChromodynamics 1.2.1", + "division": "roborumble", + "jar": "ar.QuantumChromodynamics_1.2.1.jar", + "jar_sha256": "fe5372baa66f5f4fe5c138baa674c7b38c4548e200b9cc878ae7a78a0d3d95d7", + "key": "roborumble/ar.QuantumChromodynamics_1.2.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -6066,11 +6330,7 @@ "status": "PASS" }, "roborumble/ar.TheoryOfEverything_1.2.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ar.TheoryOfEverything 1.2.1", "division": "roborumble", @@ -6134,6 +6394,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ar.TheoryOfEverything 1.2.1", + "division": "roborumble", + "jar": "ar.TheoryOfEverything_1.2.1.jar", + "jar_sha256": "488629ee6595de0c24c69df967caa534dcc4359ace7708088dc544dfb98293b9", + "key": "roborumble/ar.TheoryOfEverything_1.2.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -6153,11 +6421,7 @@ "status": "PASS" }, "roborumble/ar.horizon.Horizon_1.2.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ar.horizon.Horizon 1.2.2", "division": "roborumble", @@ -6221,6 +6485,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ar.horizon.Horizon 1.2.2", + "division": "roborumble", + "jar": "ar.horizon.Horizon_1.2.2.jar", + "jar_sha256": "2d8dee69f687581106100d53b46cea3571ed70c88e9d8601b69c48f850c20a70", + "key": "roborumble/ar.horizon.Horizon_1.2.2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 24.0, @@ -6240,11 +6512,7 @@ "status": "score-review" }, "roborumble/ara.Shera_0.88.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ara.Shera 0.88", "division": "roborumble", @@ -6308,6 +6576,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ara.Shera 0.88", + "division": "roborumble", + "jar": "ara.Shera_0.88.jar", + "jar_sha256": "9474b68598ae5e71010b835259467b6dc35427e2826ace23e484a6a11160a040", + "key": "roborumble/ara.Shera_0.88.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 34.0, @@ -6327,11 +6603,7 @@ "status": "PASS" }, "roborumble/areb.Union_1.06.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "areb.Union 1.06", "division": "roborumble", @@ -6395,6 +6667,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "areb.Union 1.06", + "division": "roborumble", + "jar": "areb.Union_1.06.jar", + "jar_sha256": "98ee4d7e04fbf9b6ae81c712f6e1b3090d76f1ba36ef84b80d16c82ddf830f1d", + "key": "roborumble/areb.Union_1.06.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 32.0, @@ -6414,11 +6694,7 @@ "status": "PASS" }, "roborumble/arthord.KostyaTszyu_Beta2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "arthord.KostyaTszyu Beta2", "division": "roborumble", @@ -6482,6 +6758,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "arthord.KostyaTszyu Beta2", + "division": "roborumble", + "jar": "arthord.KostyaTszyu_Beta2.jar", + "jar_sha256": "c4aff289b00bc68748dde4f18aff699b9ef22eceeb1e529ea086be5a61cccc4d", + "key": "roborumble/arthord.KostyaTszyu_Beta2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 18.0, @@ -6501,11 +6785,7 @@ "status": "score-review" }, "roborumble/arthord.NanoSatanMelee_Beta.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "arthord.NanoSatanMelee Beta", "division": "roborumble", @@ -6569,6 +6849,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "arthord.NanoSatanMelee Beta", + "division": "roborumble", + "jar": "arthord.NanoSatanMelee_Beta.jar", + "jar_sha256": "a0737bc6d25f6b89618c119a6df62ae89a44d9a2a7d662056dddefdde04f37fe", + "key": "roborumble/arthord.NanoSatanMelee_Beta.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -6588,11 +6876,7 @@ "status": "PASS" }, "roborumble/arthord.NanoSatan_Mu.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "arthord.NanoSatan Mu", "division": "roborumble", @@ -6656,6 +6940,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "arthord.NanoSatan Mu", + "division": "roborumble", + "jar": "arthord.NanoSatan_Mu.jar", + "jar_sha256": "a4796a1447ea7a3d8268dff283375e5188089afb88d66a62e14de9346a32e5fb", + "key": "roborumble/arthord.NanoSatan_Mu.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -6675,11 +6967,7 @@ "status": "PASS" }, "roborumble/arthord.micro.Apoptygma_0.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "arthord.micro.Apoptygma 0.4", "division": "roborumble", @@ -6743,6 +7031,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "arthord.micro.Apoptygma 0.4", + "division": "roborumble", + "jar": "arthord.micro.Apoptygma_0.4.jar", + "jar_sha256": "d07f93659bb20a2980e452dad383dbe0e1333144918cabf313423bc19dba8509", + "key": "roborumble/arthord.micro.Apoptygma_0.4.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -6762,11 +7058,7 @@ "status": "PASS" }, "roborumble/arthord.micro.Muffin_0.6.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "arthord.micro.Muffin 0.6.1", "division": "roborumble", @@ -6830,6 +7122,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "arthord.micro.Muffin 0.6.1", + "division": "roborumble", + "jar": "arthord.micro.Muffin_0.6.1.jar", + "jar_sha256": "a5b7c2fe230839a0452e06b8036ef3ed5ebbe771c75a67a00e6d9f6ffe547c6c", + "key": "roborumble/arthord.micro.Muffin_0.6.1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 12.0, @@ -6849,11 +7149,7 @@ "status": "score-review" }, "roborumble/ary.Crisis_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ary.Crisis 1.0", "division": "roborumble", @@ -6917,6 +7213,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ary.Crisis 1.0", + "division": "roborumble", + "jar": "ary.Crisis_1.0.jar", + "jar_sha256": "ff0f375c270611bb30a788d6ea8d53c4237f0aef7e59138bdce5da97749b160e", + "key": "roborumble/ary.Crisis_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -6936,11 +7240,7 @@ "status": "PASS" }, "roborumble/ary.FourWD_1.3d.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ary.FourWD 1.3d", "division": "roborumble", @@ -7072,6 +7372,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ary.FourWD 1.3d", + "division": "roborumble", + "jar": "ary.FourWD_1.3d.jar", + "jar_sha256": "bfe8768af3401df35cf4d4ec8e3e1d47d779cc5dfc284b212fda3153dbd21537", + "key": "roborumble/ary.FourWD_1.3d.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 22.0, @@ -7091,11 +7399,7 @@ "status": "score-review" }, "roborumble/ary.Help_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ary.Help 1.0", "division": "roborumble", @@ -7159,6 +7463,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ary.Help 1.0", + "division": "roborumble", + "jar": "ary.Help_1.0.jar", + "jar_sha256": "53b6ea8218bd5d68255505bee581a741a88511e58840a395b855ec8f69c2355d", + "key": "roborumble/ary.Help_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 26.0, @@ -7178,11 +7490,7 @@ "status": "score-review" }, "roborumble/ary.SMG_1.01.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ary.SMG 1.01", "division": "roborumble", @@ -7246,6 +7554,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ary.SMG 1.01", + "division": "roborumble", + "jar": "ary.SMG_1.01.jar", + "jar_sha256": "036caac2e9d5aefaec139d97b677ac1ffc9e41af7f0f19c09431a781d3bd00f7", + "key": "roborumble/ary.SMG_1.01.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 22.0, @@ -7265,11 +7581,7 @@ "status": "score-review" }, "roborumble/ary.micro.Weak_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ary.micro.Weak 1.2", "division": "roborumble", @@ -7333,6 +7645,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ary.micro.Weak 1.2", + "division": "roborumble", + "jar": "ary.micro.Weak_1.2.jar", + "jar_sha256": "0544bc89b923a2ff7c63dc5781c07703dc8c0053a78d5f4a058d3c49e0a03f33", + "key": "roborumble/ary.micro.Weak_1.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 34.0, @@ -7352,11 +7672,7 @@ "status": "PASS" }, "roborumble/ary.mini.Nimi_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ary.mini.Nimi 1.0", "division": "roborumble", @@ -7420,6 +7736,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ary.mini.Nimi 1.0", + "division": "roborumble", + "jar": "ary.mini.Nimi_1.0.jar", + "jar_sha256": "36bee330a80f2f3914bf93c24b5a0df11ad64530f588b05c06a68fff920c1ed0", + "key": "roborumble/ary.mini.Nimi_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 28.0, @@ -7439,11 +7763,7 @@ "status": "score-review" }, "roborumble/ary.nano.AceSurf_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ary.nano.AceSurf 1.2", "division": "roborumble", @@ -7507,6 +7827,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ary.nano.AceSurf 1.2", + "division": "roborumble", + "jar": "ary.nano.AceSurf_1.2.jar", + "jar_sha256": "2d693c09246861c6b044d534aa1b5b463f5eb869f00a88afd9f30a21472e7a1d", + "key": "roborumble/ary.nano.AceSurf_1.2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 18.0, @@ -7526,11 +7854,7 @@ "status": "score-review" }, "roborumble/ary.nano.ColorNanoP_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ary.nano.ColorNanoP 1.1", "division": "roborumble", @@ -7594,6 +7918,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ary.nano.ColorNanoP 1.1", + "division": "roborumble", + "jar": "ary.nano.ColorNanoP_1.1.jar", + "jar_sha256": "f1b339cda45f96f9c73a4a2ef286d7e6d6d837dcc92d140f5615b9b57421a3e8", + "key": "roborumble/ary.nano.ColorNanoP_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -7613,11 +7945,7 @@ "status": "PASS" }, "roborumble/as.xbots_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "as.xbots 1.0", "division": "roborumble", @@ -7681,6 +8009,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "as.xbots 1.0", + "division": "roborumble", + "jar": "as.xbots_1.0.jar", + "jar_sha256": "6adf1183af7ed3e4cccbaf35249fede5ffb8dc2101e49458106909cea95120cf", + "key": "roborumble/as.xbots_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 10.0, @@ -7700,11 +8036,7 @@ "status": "score-review" }, "roborumble/asd.Cthulhu_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "asd.Cthulhu 1.2", "division": "roborumble", @@ -7768,6 +8100,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "asd.Cthulhu 1.2", + "division": "roborumble", + "jar": "asd.Cthulhu_1.2.jar", + "jar_sha256": "63459d2c15c8c2227ad40c9fe6f89b51e934abffcc10d49837874199767c060e", + "key": "roborumble/asd.Cthulhu_1.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 28.0, @@ -7787,11 +8127,7 @@ "status": "PASS" }, "roborumble/asm.Statistas_0.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "asm.Statistas 0.1", "division": "roborumble", @@ -7855,6 +8191,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "asm.Statistas 0.1", + "division": "roborumble", + "jar": "asm.Statistas_0.1.jar", + "jar_sha256": "35553b2c09fcebec047f79582cc5a274d6bcd6d0034c1e5175d545281c76d0e4", + "key": "roborumble/asm.Statistas_0.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -7874,11 +8218,7 @@ "status": "PASS" }, "roborumble/awl.Locutus_1.5.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "awl.Locutus 1.5", "division": "roborumble", @@ -7942,6 +8282,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "awl.Locutus 1.5", + "division": "roborumble", + "jar": "awl.Locutus_1.5.jar", + "jar_sha256": "c7f5c5cca58627f58db3c1590036255788fbaf333da16641ff0633c709ad0c2b", + "key": "roborumble/awl.Locutus_1.5.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 24.1, @@ -7961,11 +8309,7 @@ "status": "PASS" }, "roborumble/axeBots.HataMoto_3.09.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "axeBots.HataMoto 3.09", "division": "roborumble", @@ -8029,6 +8373,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "axeBots.HataMoto 3.09", + "division": "roborumble", + "jar": "axeBots.HataMoto_3.09.jar", + "jar_sha256": "293a92846b40195a5de25c7379f72e0dcb08297f79d2b6fffd7d3a95b50afb2c", + "key": "roborumble/axeBots.HataMoto_3.09.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 32.3, @@ -8048,11 +8400,7 @@ "status": "PASS" }, "roborumble/axeBots.Musashi_2.18.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "axeBots.Musashi 2.18", "division": "roborumble", @@ -8119,6 +8467,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "axeBots.Musashi 2.18", + "division": "roborumble", + "jar": "axeBots.Musashi_2.18.jar", + "jar_sha256": "f7890ddc132b5ae0595e1faa65464e79628bb5dda7a64f5e20e74cb3ee9d8707", + "key": "roborumble/axeBots.Musashi_2.18.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 28.0, @@ -8141,11 +8497,7 @@ "status": "PASS" }, "roborumble/axeBots.Okami_1.04.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "axeBots.Okami 1.04", "division": "roborumble", @@ -8212,6 +8564,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "axeBots.Okami 1.04", + "division": "roborumble", + "jar": "axeBots.Okami_1.04.jar", + "jar_sha256": "608f42ae73765a352e9034e41f36af721cd745835a19a20f8fe7e8bbe3be30fa", + "key": "roborumble/axeBots.Okami_1.04.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 28.2, @@ -8231,11 +8591,7 @@ "status": "PASS" }, "roborumble/axeBots.SilverSurfer_2.53.33fix.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "axeBots.SilverSurfer 2.53.33fix", "division": "roborumble", @@ -8302,6 +8658,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "axeBots.SilverSurfer 2.53.33fix", + "division": "roborumble", + "jar": "axeBots.SilverSurfer_2.53.33fix.jar", + "jar_sha256": "d0b3667a0a9c38bc0cfdb5c47d7b68a8b73194fd88be12d6bee64fcfddb86add", + "key": "roborumble/axeBots.SilverSurfer_2.53.33fix.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 24.0, @@ -8324,11 +8688,7 @@ "status": "PASS" }, "roborumble/ayk.WallHugger_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ayk.WallHugger 1.0", "division": "roborumble", @@ -8392,6 +8752,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ayk.WallHugger 1.0", + "division": "roborumble", + "jar": "ayk.WallHugger_1.0.jar", + "jar_sha256": "6a5eb97de641d4c81e3456da75997dbe50aa072eacf0cc79db2d212899979470", + "key": "roborumble/ayk.WallHugger_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -8411,11 +8779,7 @@ "status": "PASS" }, "roborumble/az.Ololobot_0.2.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "az.Ololobot 0.2.4", "division": "roborumble", @@ -8479,6 +8843,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "az.Ololobot 0.2.4", + "division": "roborumble", + "jar": "az.Ololobot_0.2.4.jar", + "jar_sha256": "b6938411c048bde80bf0186892f03342e0c60dff05127052ed21932825765eb9", + "key": "roborumble/az.Ololobot_0.2.4.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -8596,11 +8968,7 @@ "status": "FAIL (TR)" }, "roborumble/banshee.micro.Nexus6_0.3.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "banshee.micro.Nexus6 0.3.0", "division": "roborumble", @@ -8664,6 +9032,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "banshee.micro.Nexus6 0.3.0", + "division": "roborumble", + "jar": "banshee.micro.Nexus6_0.3.0.jar", + "jar_sha256": "e4cb9d96e7487b927a54b89221c2ee262ce514759f3960670b9aa95ff6dbaecc", + "key": "roborumble/banshee.micro.Nexus6_0.3.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -8683,11 +9059,7 @@ "status": "PASS" }, "roborumble/banshee.mini.Nexus6_0.2.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "banshee.mini.Nexus6 0.2.0", "division": "roborumble", @@ -8751,6 +9123,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "banshee.mini.Nexus6 0.2.0", + "division": "roborumble", + "jar": "banshee.mini.Nexus6_0.2.0.jar", + "jar_sha256": "2bb08e1c59e732361dcdee3df148534bc0dabd9d8f14147c4a583c04f1dc7a42", + "key": "roborumble/banshee.mini.Nexus6_0.2.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -8770,11 +9150,7 @@ "status": "PASS" }, "roborumble/barontrozo.BaronTrozo_1.7.6.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "barontrozo.BaronTrozo 1.7.6", "division": "roborumble", @@ -8838,6 +9214,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "barontrozo.BaronTrozo 1.7.6", + "division": "roborumble", + "jar": "barontrozo.BaronTrozo_1.7.6.jar", + "jar_sha256": "0031d364bd6cc01f74c537d9c88be09c53d7fd11999aa586480d010a77a37f3c", + "key": "roborumble/barontrozo.BaronTrozo_1.7.6.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -8857,11 +9241,7 @@ "status": "PASS" }, "roborumble/bayen.UbaMicro_1.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bayen.UbaMicro 1.4", "division": "roborumble", @@ -8925,6 +9305,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bayen.UbaMicro 1.4", + "division": "roborumble", + "jar": "bayen.UbaMicro_1.4.jar", + "jar_sha256": "7691bd56732d5813079f65319f62a7bda392937bfe458528383fd2b89b1a7d11", + "key": "roborumble/bayen.UbaMicro_1.4.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -8944,11 +9332,7 @@ "status": "PASS" }, "roborumble/bayen.UbaRamLT_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bayen.UbaRamLT 1.0", "division": "roborumble", @@ -9012,6 +9396,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bayen.UbaRamLT 1.0", + "division": "roborumble", + "jar": "bayen.UbaRamLT_1.0.jar", + "jar_sha256": "604d19bdcfa6caa05964df927bb24e237e8f7aaa1fcbd7d13aea4e4d9b5e028b", + "key": "roborumble/bayen.UbaRamLT_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 10.0, @@ -9031,11 +9423,7 @@ "status": "score-review" }, "roborumble/bayen.nano.Squirrel_0.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bayen.nano.Squirrel 0.2", "division": "roborumble", @@ -9099,6 +9487,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bayen.nano.Squirrel 0.2", + "division": "roborumble", + "jar": "bayen.nano.Squirrel_0.2.jar", + "jar_sha256": "5207b14349401cf529947785f203d80e0bd5d21c2e42672ef6585686caa74e7f", + "key": "roborumble/bayen.nano.Squirrel_0.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -9118,11 +9514,7 @@ "status": "PASS" }, "roborumble/bayen.nut.Squirrel_1.621.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bayen.nut.Squirrel 1.621", "division": "roborumble", @@ -9186,6 +9578,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bayen.nut.Squirrel 1.621", + "division": "roborumble", + "jar": "bayen.nut.Squirrel_1.621.jar", + "jar_sha256": "a5a1b82535752ee271c91cdec18f433e21dcfe1efc46ed4001bed116eeca1f76", + "key": "roborumble/bayen.nut.Squirrel_1.621.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 36.0, @@ -9205,11 +9605,7 @@ "status": "score-review" }, "roborumble/bbo.RamboT_0.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bbo.RamboT 0.3", "division": "roborumble", @@ -9273,6 +9669,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bbo.RamboT 0.3", + "division": "roborumble", + "jar": "bbo.RamboT_0.3.jar", + "jar_sha256": "3c933f89750dfd882f03844f5fc83ae4bf36d5a6baca855251417b4a1457e6ed", + "key": "roborumble/bbo.RamboT_0.3.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -9292,11 +9696,7 @@ "status": "PASS" }, "roborumble/bbo.TheRoof_1.4.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bbo.TheRoof 1.4.3", "division": "roborumble", @@ -9360,6 +9760,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bbo.TheRoof 1.4.3", + "division": "roborumble", + "jar": "bbo.TheRoof_1.4.3.jar", + "jar_sha256": "0d3aac41de0b798e76e684b60756f8fb8318c5c5dcf890f26ecfb8bea6d01076", + "key": "roborumble/bbo.TheRoof_1.4.3.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -9379,11 +9787,7 @@ "status": "PASS" }, "roborumble/benhorner.PureAggression_0.2.6.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "benhorner.PureAggression 0.2.6", "division": "roborumble", @@ -9447,6 +9851,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "benhorner.PureAggression 0.2.6", + "division": "roborumble", + "jar": "benhorner.PureAggression_0.2.6.jar", + "jar_sha256": "ff9129cad35f13a68dc008ab29e71e073ea28ff77fae33dba73846e4da0e041e", + "key": "roborumble/benhorner.PureAggression_0.2.6.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 8.0, @@ -9466,11 +9878,7 @@ "status": "PASS" }, "roborumble/bigpete.Stewie_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bigpete.Stewie 1.0", "division": "roborumble", @@ -9534,6 +9942,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bigpete.Stewie 1.0", + "division": "roborumble", + "jar": "bigpete.Stewie_1.0.jar", + "jar_sha256": "743ecaf04844e35915d24a80533652a29adaaf9539955f2178df0ef6148c481d", + "key": "roborumble/bigpete.Stewie_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -9553,11 +9969,7 @@ "status": "PASS" }, "roborumble/bing2.Melody_1.3.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bing2.Melody 1.3.1", "division": "roborumble", @@ -9621,6 +10033,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bing2.Melody 1.3.1", + "division": "roborumble", + "jar": "bing2.Melody_1.3.1.jar", + "jar_sha256": "3a63316b12e61f4810fdb73e18bb068fb5bc0a78f82a2c9865be1aa22611137a", + "key": "roborumble/bing2.Melody_1.3.1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 16.0, @@ -9640,11 +10060,7 @@ "status": "score-review" }, "roborumble/bjl.LoneDragon_0.5.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bjl.LoneDragon 0.5", "division": "roborumble", @@ -9708,6 +10124,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bjl.LoneDragon 0.5", + "division": "roborumble", + "jar": "bjl.LoneDragon_0.5.jar", + "jar_sha256": "016175c3d3f7c0522eebac3154f93c65abe35cc57bbdaee04e606f8d023e1efe", + "key": "roborumble/bjl.LoneDragon_0.5.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 80.1, @@ -9727,11 +10151,7 @@ "status": "PASS" }, "roborumble/bk.Shooter_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bk.Shooter 1.0", "division": "roborumble", @@ -9795,6 +10215,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bk.Shooter 1.0", + "division": "roborumble", + "jar": "bk.Shooter_1.0.jar", + "jar_sha256": "0dfe57a84edd868ba0517b270c817bfdc9765139b6517fe4c7868110cf9c0e16", + "key": "roborumble/bk.Shooter_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 28.0, @@ -9814,11 +10242,7 @@ "status": "score-review" }, "roborumble/blir.micro.blixi.Blixi_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "blir.micro.blixi.Blixi 1.2", "division": "roborumble", @@ -9882,6 +10306,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "blir.micro.blixi.Blixi 1.2", + "division": "roborumble", + "jar": "blir.micro.blixi.Blixi_1.2.jar", + "jar_sha256": "939340a6e589c7bd36ea58fb12018f4f4ee512bbaf8264c0fee5d706e2d6325b", + "key": "roborumble/blir.micro.blixi.Blixi_1.2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 36.0, @@ -9901,11 +10333,7 @@ "status": "score-review" }, "roborumble/blir.mini.oops.Splooshlu_2.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "blir.mini.oops.Splooshlu 2.0", "division": "roborumble", @@ -9969,6 +10397,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "blir.mini.oops.Splooshlu 2.0", + "division": "roborumble", + "jar": "blir.mini.oops.Splooshlu_2.0.jar", + "jar_sha256": "43d728428624085e09e6bd3fa34ae9ed864b4d056959c207b3daa20c0ad6e42b", + "key": "roborumble/blir.mini.oops.Splooshlu_2.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 56.1, @@ -9988,11 +10424,7 @@ "status": "PASS" }, "roborumble/blir.nano.Bruce_R1.0.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "blir.nano.Bruce R1.0.0", "division": "roborumble", @@ -10056,6 +10488,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "blir.nano.Bruce R1.0.0", + "division": "roborumble", + "jar": "blir.nano.Bruce_R1.0.0.jar", + "jar_sha256": "380d1895fca7181874921c6b8735c9659ea3cb6e5d35d42799bab523dfdd1bae", + "key": "roborumble/blir.nano.Bruce_R1.0.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 12.0, @@ -10075,11 +10515,7 @@ "status": "PASS" }, "roborumble/blir.nano.Cabbage_R1.0.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "blir.nano.Cabbage R1.0.1", "division": "roborumble", @@ -10143,6 +10579,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "blir.nano.Cabbage R1.0.1", + "division": "roborumble", + "jar": "blir.nano.Cabbage_R1.0.1.jar", + "jar_sha256": "6048d93ca6c18440d2442930806a4edb783d6bc3e7b019f324fad7aebaccb222", + "key": "roborumble/blir.nano.Cabbage_R1.0.1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.0, @@ -10162,11 +10606,7 @@ "status": "score-review" }, "roborumble/blir.nano.inch.Inchworm_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "blir.nano.inch.Inchworm 1.0", "division": "roborumble", @@ -10230,6 +10670,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "blir.nano.inch.Inchworm 1.0", + "division": "roborumble", + "jar": "blir.nano.inch.Inchworm_1.0.jar", + "jar_sha256": "168c6b33a9c90cd70b268369ed7aedb8773e1f04c3b99382fcd2cf98d5b49bd4", + "key": "roborumble/blir.nano.inch.Inchworm_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -10249,11 +10697,7 @@ "status": "PASS" }, "roborumble/blr.Chicken001_0.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "blr.Chicken001 0.1", "division": "roborumble", @@ -10317,6 +10761,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "blr.Chicken001 0.1", + "division": "roborumble", + "jar": "blr.Chicken001_0.1.jar", + "jar_sha256": "b60dc3905b4861b427dae9e16d964f3978947773e5f9c3e5ae32f7c4182f976e", + "key": "roborumble/blr.Chicken001_0.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.1, @@ -10336,11 +10788,7 @@ "status": "PASS" }, "roborumble/bndl.LostLion_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bndl.LostLion 1.2", "division": "roborumble", @@ -10404,6 +10852,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bndl.LostLion 1.2", + "division": "roborumble", + "jar": "bndl.LostLion_1.2.jar", + "jar_sha256": "991c707bd0af71a46d5fc34e4a34b0df2267f0ffc06567cdfaebfbea87f80cc2", + "key": "roborumble/bndl.LostLion_1.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 28.0, @@ -10423,11 +10879,7 @@ "status": "PASS" }, "roborumble/boe.Minerva_0.80.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "boe.Minerva 0.80", "division": "roborumble", @@ -10491,6 +10943,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "boe.Minerva 0.80", + "division": "roborumble", + "jar": "boe.Minerva_0.80.jar", + "jar_sha256": "79dd5b1ad699fe82fc423f2a35d3264fd460c787fef7c528a9f897d88365a5d6", + "key": "roborumble/boe.Minerva_0.80.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 24.2, @@ -10510,11 +10970,7 @@ "status": "PASS" }, "roborumble/bons.NanoStalker_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bons.NanoStalker 1.2", "division": "roborumble", @@ -10578,6 +11034,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bons.NanoStalker 1.2", + "division": "roborumble", + "jar": "bons.NanoStalker_1.2.jar", + "jar_sha256": "25169213aa301260dbe320aab5011618b95dd7283102fc6272cdd2e5afdc0936", + "key": "roborumble/bons.NanoStalker_1.2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 10.0, @@ -10597,11 +11061,7 @@ "status": "score-review" }, "roborumble/bots.UberBot_1.2c.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bots.UberBot 1.2c", "division": "roborumble", @@ -10665,6 +11125,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bots.UberBot 1.2c", + "division": "roborumble", + "jar": "bots.UberBot_1.2c.jar", + "jar_sha256": "5406ba168c88b8e114b607bddd2959d76d4601740fe12236d5066d8a6bfcb556", + "key": "roborumble/bots.UberBot_1.2c.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -10684,11 +11152,7 @@ "status": "PASS" }, "roborumble/bots.UnterBot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bots.UnterBot 1.0", "division": "roborumble", @@ -10752,6 +11216,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bots.UnterBot 1.0", + "division": "roborumble", + "jar": "bots.UnterBot_1.0.jar", + "jar_sha256": "7c24869acf14c596bca3c7eeb85b0dbab99b99e470f5df1bb886c4d101f1e66d", + "key": "roborumble/bots.UnterBot_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 22.0, @@ -10771,11 +11243,7 @@ "status": "score-review" }, "roborumble/bots.UnterExBot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bots.UnterExBot 1.0", "division": "roborumble", @@ -10839,6 +11307,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bots.UnterExBot 1.0", + "division": "roborumble", + "jar": "bots.UnterExBot_1.0.jar", + "jar_sha256": "773aa3a9953e440b5e5464c54b5efbd269a15b17ab05f301d3401d16c263d25b", + "key": "roborumble/bots.UnterExBot_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.0, @@ -10858,11 +11334,7 @@ "status": "score-review" }, "roborumble/bp.Kuma_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bp.Kuma 1.0", "division": "roborumble", @@ -10926,6 +11398,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bp.Kuma 1.0", + "division": "roborumble", + "jar": "bp.Kuma_1.0.jar", + "jar_sha256": "2646c78e817ac3701fbd23306259844fdea377b82ac7748f8d3cf6ea36b4825e", + "key": "roborumble/bp.Kuma_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 18.0, @@ -10945,11 +11425,7 @@ "status": "score-review" }, "roborumble/braaropolis.Abot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "braaropolis.Abot 1.0", "division": "roborumble", @@ -11013,6 +11489,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "braaropolis.Abot 1.0", + "division": "roborumble", + "jar": "braaropolis.Abot_1.0.jar", + "jar_sha256": "d8e61877edd6f98d13b8c78bce6fb1fa8930834ce8414b95f2f0c46f7dd9a8be", + "key": "roborumble/braaropolis.Abot_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 22.0, @@ -11032,11 +11516,7 @@ "status": "score-review" }, "roborumble/brainfade.Fallen_0.63.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "brainfade.Fallen 0.63", "division": "roborumble", @@ -11100,6 +11580,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "brainfade.Fallen 0.63", + "division": "roborumble", + "jar": "brainfade.Fallen_0.63.jar", + "jar_sha256": "7affe8566b9200ec51bc97f81bd7e3a98d5e9f2c011c70bd3331754bfc832373", + "key": "roborumble/brainfade.Fallen_0.63.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -11119,11 +11607,7 @@ "status": "PASS" }, "roborumble/brainfade.melee.Dusk_0.44.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "brainfade.melee.Dusk 0.44", "division": "roborumble", @@ -11187,6 +11671,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "brainfade.melee.Dusk 0.44", + "division": "roborumble", + "jar": "brainfade.melee.Dusk_0.44.jar", + "jar_sha256": "a9ebabb60c05453723be3680d718a93a6b212ecf13d3fc408b4e2ab88f5d853b", + "key": "roborumble/brainfade.melee.Dusk_0.44.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 30.0, @@ -11206,11 +11698,7 @@ "status": "PASS" }, "roborumble/bts.mega.Gnarly_1.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bts.mega.Gnarly 1.4", "division": "roborumble", @@ -11274,6 +11762,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bts.mega.Gnarly 1.4", + "division": "roborumble", + "jar": "bts.mega.Gnarly_1.4.jar", + "jar_sha256": "77d1f463511e268b1a020f8571fe932a03760447e30067846a3c1d6090368f81", + "key": "roborumble/bts.mega.Gnarly_1.4.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -11293,11 +11789,7 @@ "status": "PASS" }, "roborumble/bts.wiki.RipCurl_0.9b.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bts.wiki.RipCurl 0.9b", "division": "roborumble", @@ -11361,6 +11853,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bts.wiki.RipCurl 0.9b", + "division": "roborumble", + "jar": "bts.wiki.RipCurl_0.9b.jar", + "jar_sha256": "1f9a52c3ea49c22e5755defaaf43f355801169537f7a9636d1708bd00064e4c9", + "key": "roborumble/bts.wiki.RipCurl_0.9b.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 6.2, @@ -11380,11 +11880,7 @@ "status": "FAIL (TR)" }, "roborumble/buba.Archivist_0.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "buba.Archivist 0.1", "division": "roborumble", @@ -11448,6 +11944,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "buba.Archivist 0.1", + "division": "roborumble", + "jar": "buba.Archivist_0.1.jar", + "jar_sha256": "16a0212d06836af24b9b7d351de52406e456804ede7c302e4cb85c75d2b08acc", + "key": "roborumble/buba.Archivist_0.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -11467,11 +11971,7 @@ "status": "PASS" }, "roborumble/buba.Buba_0.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "buba.Buba 0.3", "division": "roborumble", @@ -11535,6 +12035,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "buba.Buba 0.3", + "division": "roborumble", + "jar": "buba.Buba_0.3.jar", + "jar_sha256": "ba2320e401f43470e16fa1253315b29b36047b22bac99ad62bed59bb014e1716", + "key": "roborumble/buba.Buba_0.3.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -11554,11 +12062,7 @@ "status": "PASS" }, "roborumble/bumblebee.Bumblebee_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bumblebee.Bumblebee 1.0", "division": "roborumble", @@ -11622,6 +12126,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bumblebee.Bumblebee 1.0", + "division": "roborumble", + "jar": "bumblebee.Bumblebee_1.0.jar", + "jar_sha256": "13752cd9d2f4ffe2a675074b50ecca99b982f57bea36c1bac5e4f254cf0af9c5", + "key": "roborumble/bumblebee.Bumblebee_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 12.0, @@ -11641,11 +12153,7 @@ "status": "PASS" }, "roborumble/bvh.fnr.Fenrir_0.36l.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.fnr.Fenrir 0.36l", "division": "roborumble", @@ -11709,6 +12217,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.fnr.Fenrir 0.36l", + "division": "roborumble", + "jar": "bvh.fnr.Fenrir_0.36l.jar", + "jar_sha256": "986ed898d1fa2556d204321e33139543a61c6ddda15b419b877cc7009e91b5d9", + "key": "roborumble/bvh.fnr.Fenrir_0.36l.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -11728,11 +12244,7 @@ "status": "PASS" }, "roborumble/bvh.frg.Friga_0.112dev.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.frg.Friga 0.112dev", "division": "roborumble", @@ -11796,6 +12308,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.frg.Friga 0.112dev", + "division": "roborumble", + "jar": "bvh.frg.Friga_0.112dev.jar", + "jar_sha256": "a7bda40ea78e411a38c3d99bf52466b26ae5efe3df9dc432b48f6df388346d9f", + "key": "roborumble/bvh.frg.Friga_0.112dev.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -11815,11 +12335,7 @@ "status": "PASS" }, "roborumble/bvh.fry.Freya_0.82.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.fry.Freya 0.82", "division": "roborumble", @@ -11883,6 +12399,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.fry.Freya 0.82", + "division": "roborumble", + "jar": "bvh.fry.Freya_0.82.jar", + "jar_sha256": "2618ef3fb7cd8cb814b33be2531dc1e81661554362f93b29a80d1cce31f12fe5", + "key": "roborumble/bvh.fry.Freya_0.82.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -11903,11 +12427,7 @@ "status": "FAIL (TR)" }, "roborumble/bvh.hdr.Hodur_0.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.hdr.Hodur 0.4", "division": "roborumble", @@ -11971,6 +12491,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.hdr.Hodur 0.4", + "division": "roborumble", + "jar": "bvh.hdr.Hodur_0.4.jar", + "jar_sha256": "2bd6a9804697badcfad118f8c84db756b33cd9154144da4b19166f9f7caea94e", + "key": "roborumble/bvh.hdr.Hodur_0.4.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 34.0, @@ -11990,11 +12518,7 @@ "status": "score-review" }, "roborumble/bvh.loki.Loki_0.5.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.loki.Loki 0.5", "division": "roborumble", @@ -12058,6 +12582,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.loki.Loki 0.5", + "division": "roborumble", + "jar": "bvh.loki.Loki_0.5.jar", + "jar_sha256": "46f15811b1cbdfa571eca677320bd0efca497cfb6ed6b672e82f8c27dfb3f0c6", + "key": "roborumble/bvh.loki.Loki_0.5.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.2, @@ -12077,11 +12609,7 @@ "status": "score-review" }, "roborumble/bvh.micro.Freya_0.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.micro.Freya 0.3", "division": "roborumble", @@ -12145,6 +12673,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.micro.Freya 0.3", + "division": "roborumble", + "jar": "bvh.micro.Freya_0.3.jar", + "jar_sha256": "97868a0fa8ea022df4e19ae810f3a098da8c0d897ebd4564c1afe2b9f9002890", + "key": "roborumble/bvh.micro.Freya_0.3.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -12164,11 +12700,7 @@ "status": "PASS" }, "roborumble/bvh.micro.Svadilfari_0.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.micro.Svadilfari 0.2", "division": "roborumble", @@ -12232,6 +12764,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.micro.Svadilfari 0.2", + "division": "roborumble", + "jar": "bvh.micro.Svadilfari_0.2.jar", + "jar_sha256": "29e9fea32030a66e7c1be3582f3e06fb461d760fb0d4457b420d30ed0cb2b12a", + "key": "roborumble/bvh.micro.Svadilfari_0.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -12251,11 +12791,7 @@ "status": "PASS" }, "roborumble/bvh.mini.Fenrir_0.39.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.mini.Fenrir 0.39", "division": "roborumble", @@ -12319,6 +12855,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.mini.Fenrir 0.39", + "division": "roborumble", + "jar": "bvh.mini.Fenrir_0.39.jar", + "jar_sha256": "3d63cdf11e5846c7e295db9c27965b84e7d1944b923d09979819f188700220a1", + "key": "roborumble/bvh.mini.Fenrir_0.39.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -12338,11 +12882,7 @@ "status": "PASS" }, "roborumble/bvh.mini.Freya_0.55.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.mini.Freya 0.55", "division": "roborumble", @@ -12406,6 +12946,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.mini.Freya 0.55", + "division": "roborumble", + "jar": "bvh.mini.Freya_0.55.jar", + "jar_sha256": "4a3e45054c437df7ac073756d18ff8b6cf67ab4f9f686484a325afdd455c4452", + "key": "roborumble/bvh.mini.Freya_0.55.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -12425,11 +12973,7 @@ "status": "PASS" }, "roborumble/bvh.mini.Mjolnir_0.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.mini.Mjolnir 0.3", "division": "roborumble", @@ -12493,6 +13037,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.mini.Mjolnir 0.3", + "division": "roborumble", + "jar": "bvh.mini.Mjolnir_0.3.jar", + "jar_sha256": "00db20570e2aebaf5d4ead68f922b93bf07d4b6620524ea9655f8e24a51e8641", + "key": "roborumble/bvh.mini.Mjolnir_0.3.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 12.0, @@ -12512,11 +13064,7 @@ "status": "score-review" }, "roborumble/bvh.mini.Wodan_0.50.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.mini.Wodan 0.50", "division": "roborumble", @@ -12580,6 +13128,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.mini.Wodan 0.50", + "division": "roborumble", + "jar": "bvh.mini.Wodan_0.50.jar", + "jar_sha256": "ee38f593b18a05e2a8864301c15e9106be792d1ab51f6f7cb6df64eb1eb8b435", + "key": "roborumble/bvh.mini.Wodan_0.50.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -12599,11 +13155,7 @@ "status": "PASS" }, "roborumble/bvh.tyr.Tyr_1.74.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bvh.tyr.Tyr 1.74", "division": "roborumble", @@ -12667,6 +13219,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bvh.tyr.Tyr 1.74", + "division": "roborumble", + "jar": "bvh.tyr.Tyr_1.74.jar", + "jar_sha256": "9a05860b706454676778504df31631db93837f284afb17359b9ddec691bce34a", + "key": "roborumble/bvh.tyr.Tyr_1.74.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -12686,11 +13246,7 @@ "status": "PASS" }, "roborumble/bwbaugh.nano.Tirunculus_0.0.0a.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bwbaugh.nano.Tirunculus 0.0.0a", "division": "roborumble", @@ -12754,6 +13310,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bwbaugh.nano.Tirunculus 0.0.0a", + "division": "roborumble", + "jar": "bwbaugh.nano.Tirunculus_0.0.0a.jar", + "jar_sha256": "d1fcb6072a0110947df39ad0db284f0fa4f229e7ef0f0d2502553ca0b2acb7d4", + "key": "roborumble/bwbaugh.nano.Tirunculus_0.0.0a.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 10.0, @@ -12773,11 +13337,7 @@ "status": "score-review" }, "roborumble/bzdp.BoxCar_2.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bzdp.BoxCar 2.0", "division": "roborumble", @@ -12841,6 +13401,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bzdp.BoxCar 2.0", + "division": "roborumble", + "jar": "bzdp.BoxCar_2.0.jar", + "jar_sha256": "22e13c11b29fb3ed958288b38d67ab6ae02bd899f16ddcf96295f621e795ecb6", + "key": "roborumble/bzdp.BoxCar_2.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -12860,11 +13428,7 @@ "status": "PASS" }, "roborumble/bzdp.Pansy_2.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "bzdp.Pansy 2.1", "division": "roborumble", @@ -12928,6 +13492,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "bzdp.Pansy 2.1", + "division": "roborumble", + "jar": "bzdp.Pansy_2.1.jar", + "jar_sha256": "71057e19022678ba19a873854afb4bd32a986ae77c5105c79cb549ab664ff939", + "key": "roborumble/bzdp.Pansy_2.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -12947,11 +13519,7 @@ "status": "PASS" }, "roborumble/caimano.Furia_Ceca_0.22.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "caimano.Furia_Ceca 0.22", "division": "roborumble", @@ -13015,6 +13583,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "caimano.Furia_Ceca 0.22", + "division": "roborumble", + "jar": "caimano.Furia_Ceca_0.22.jar", + "jar_sha256": "c1ce5bbf430fe9edc12da1768284be6f3d5bc35a9f48c84819f21edd32241616", + "key": "roborumble/caimano.Furia_Ceca_0.22.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 12.0, @@ -13034,11 +13610,7 @@ "status": "score-review" }, "roborumble/casey.Flee_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "casey.Flee 1.0", "division": "roborumble", @@ -13102,6 +13674,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "casey.Flee 1.0", + "division": "roborumble", + "jar": "casey.Flee_1.0.jar", + "jar_sha256": "5edafd751bd0f81632eecb11ea74c9bfbf3eb3b2c8e4aead9eaf7ec7cd41aecc", + "key": "roborumble/casey.Flee_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -13121,11 +13701,7 @@ "status": "PASS" }, "roborumble/cb.Domogled_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cb.Domogled 1.2", "division": "roborumble", @@ -13191,6 +13767,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cb.Domogled 1.2", + "division": "roborumble", + "jar": "cb.Domogled_1.2.jar", + "jar_sha256": "75c374c61a80c5606d1ecd1220d80d663497eef1618b9a80f112c41e5b81e70a", + "key": "roborumble/cb.Domogled_1.2.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.1, @@ -13211,11 +13795,7 @@ "status": "FAIL (TR)" }, "roborumble/cb.fire.Firestarter_2.0f.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cb.fire.Firestarter 2.0f", "division": "roborumble", @@ -13279,6 +13859,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cb.fire.Firestarter 2.0f", + "division": "roborumble", + "jar": "cb.fire.Firestarter_2.0f.jar", + "jar_sha256": "de45410b59fea6b8fad9463ece161e1e1656960129f1b9bc84791137d788325f", + "key": "roborumble/cb.fire.Firestarter_2.0f.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -13299,11 +13887,7 @@ "status": "FAIL (TR)" }, "roborumble/cb.mega.RandomBot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cb.mega.RandomBot 1.0", "division": "roborumble", @@ -13367,6 +13951,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cb.mega.RandomBot 1.0", + "division": "roborumble", + "jar": "cb.mega.RandomBot_1.0.jar", + "jar_sha256": "34a1049d295fe3ae436785ef0ba1e74824f059c4b2478b9975522c1698816285", + "key": "roborumble/cb.mega.RandomBot_1.0.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -13387,11 +13979,7 @@ "status": "FAIL (TR)" }, "roborumble/cb.nano.Insomnia_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cb.nano.Insomnia 1.0", "division": "roborumble", @@ -13455,6 +14043,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cb.nano.Insomnia 1.0", + "division": "roborumble", + "jar": "cb.nano.Insomnia_1.0.jar", + "jar_sha256": "dfaa0b7522185985faaaad2c8c8761b56ed6b2e31f9d256de0abbcf466863d30", + "key": "roborumble/cb.nano.Insomnia_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -13474,11 +14070,7 @@ "status": "PASS" }, "roborumble/cbot.agile.Nibbler_0.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cbot.agile.Nibbler 0.2", "division": "roborumble", @@ -13546,6 +14138,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cbot.agile.Nibbler 0.2", + "division": "roborumble", + "jar": "cbot.agile.Nibbler_0.2.jar", + "jar_sha256": "b1b79c3c45f03c2098bee75bd1c379e51b8e45f66418b0ac15a9e9747fef1689", + "key": "roborumble/cbot.agile.Nibbler_0.2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 14.0, @@ -13565,11 +14165,7 @@ "status": "score-review" }, "roborumble/cbot.cbot.CBot_0.8.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cbot.cbot.CBot 0.8", "division": "roborumble", @@ -13633,6 +14229,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cbot.cbot.CBot 0.8", + "division": "roborumble", + "jar": "cbot.cbot.CBot_0.8.jar", + "jar_sha256": "96f2840bf8bb3ecd5dcd7c8079cf0bc0d2a9a6ddfd4da5cb2e7a520b7c6a2ffc", + "key": "roborumble/cbot.cbot.CBot_0.8.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 6.1, @@ -13652,11 +14256,7 @@ "status": "FAIL (TR)" }, "roborumble/cf.OldMan.OldManXP_0.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cf.OldMan.OldManXP 0.1", "division": "roborumble", @@ -13720,6 +14320,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cf.OldMan.OldManXP 0.1", + "division": "roborumble", + "jar": "cf.OldMan.OldManXP_0.1.jar", + "jar_sha256": "463822efc7f7fec009495fb2395ad09b36b081119df3e18d3b5044d58a562ce5", + "key": "roborumble/cf.OldMan.OldManXP_0.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 12.0, @@ -13739,11 +14347,7 @@ "status": "PASS" }, "roborumble/cf.mini.Chiva_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cf.mini.Chiva 1.0", "division": "roborumble", @@ -13807,6 +14411,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cf.mini.Chiva 1.0", + "division": "roborumble", + "jar": "cf.mini.Chiva_1.0.jar", + "jar_sha256": "a0aef88f5c5fa4d6542a4e56c1576efb911d6bebb70da9676582c51bcef3c688", + "key": "roborumble/cf.mini.Chiva_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -13826,11 +14438,7 @@ "status": "PASS" }, "roborumble/cf.proto.Shiva_2.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cf.proto.Shiva 2.2", "division": "roborumble", @@ -13897,6 +14505,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cf.proto.Shiva 2.2", + "division": "roborumble", + "jar": "cf.proto.Shiva_2.2.jar", + "jar_sha256": "b56a27faf5dcfcd10fa25ea0b3d1dd9bedb48eea0bf5e38e8ecb89b339827f61", + "key": "roborumble/cf.proto.Shiva_2.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -13919,11 +14535,7 @@ "status": "PASS" }, "roborumble/cf.star.Star2_1.23.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cf.star.Star2 1.23", "division": "roborumble", @@ -13987,6 +14599,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cf.star.Star2 1.23", + "division": "roborumble", + "jar": "cf.star.Star2_1.23.jar", + "jar_sha256": "d1d945c1450132a1a072cb08465db641b83af579d8339115641632aa6e670a4e", + "key": "roborumble/cf.star.Star2_1.23.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -14006,11 +14626,7 @@ "status": "PASS" }, "roborumble/ch.rhj.rbc.RHJ1_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "ch.rhj.rbc.RHJ1 1.0", "division": "roborumble", @@ -14074,6 +14690,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "ch.rhj.rbc.RHJ1 1.0", + "division": "roborumble", + "jar": "ch.rhj.rbc.RHJ1_1.0.jar", + "jar_sha256": "f45cba75cecd9459729641dab9cfc9830853d855888acbf42b612f74234e566d", + "key": "roborumble/ch.rhj.rbc.RHJ1_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 32.0, @@ -14093,11 +14717,7 @@ "status": "PASS" }, "roborumble/chase.pm.Pytko_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "chase.pm.Pytko 1.0", "division": "roborumble", @@ -14161,6 +14781,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "chase.pm.Pytko 1.0", + "division": "roborumble", + "jar": "chase.pm.Pytko_1.0.jar", + "jar_sha256": "0bf2f81bd9c5ff44bcb27f2ce214eb769f1c7d2b91ad83a3880e8a17d0f193f3", + "key": "roborumble/chase.pm.Pytko_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -14180,11 +14808,7 @@ "status": "PASS" }, "roborumble/chickenfuego.UrChicken2_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "chickenfuego.UrChicken2 1.0", "division": "roborumble", @@ -14248,6 +14872,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "chickenfuego.UrChicken2 1.0", + "division": "roborumble", + "jar": "chickenfuego.UrChicken2_1.0.jar", + "jar_sha256": "a56a6d6bbeae72501cb86c35621436e91b31686db0785cd3151512452bdf818f", + "key": "roborumble/chickenfuego.UrChicken2_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 46.0, @@ -14267,11 +14899,7 @@ "status": "PASS" }, "roborumble/cjk.Merkava_0.1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cjk.Merkava 0.1.1", "division": "roborumble", @@ -14335,6 +14963,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cjk.Merkava 0.1.1", + "division": "roborumble", + "jar": "cjk.Merkava_0.1.1.jar", + "jar_sha256": "5a16d1a4eaa4437b1552185a75d121a8153985febc5d3d215f94fc93dbd3f094", + "key": "roborumble/cjk.Merkava_0.1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -14354,11 +14990,7 @@ "status": "PASS" }, "roborumble/cjm.Che_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cjm.Che 1.2", "division": "roborumble", @@ -14422,6 +15054,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cjm.Che 1.2", + "division": "roborumble", + "jar": "cjm.Che_1.2.jar", + "jar_sha256": "490b1e9e8d36ca42f225dd9cd2bd2033c9dee27ef24d71e2396e5eec5ae4565b", + "key": "roborumble/cjm.Che_1.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -14441,11 +15081,7 @@ "status": "PASS" }, "roborumble/cli.Dancer_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cli.Dancer 1.1", "division": "roborumble", @@ -14509,6 +15145,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cli.Dancer 1.1", + "division": "roborumble", + "jar": "cli.Dancer_1.1.jar", + "jar_sha256": "6126e668dd994c5d3b47f50cad7e28313ad0b67ef1d5def7746846a35de8e07b", + "key": "roborumble/cli.Dancer_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -14528,11 +15172,7 @@ "status": "PASS" }, "roborumble/cli.WasteOfAmmo_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cli.WasteOfAmmo 1.0", "division": "roborumble", @@ -14596,6 +15236,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cli.WasteOfAmmo 1.0", + "division": "roborumble", + "jar": "cli.WasteOfAmmo_1.0.jar", + "jar_sha256": "c899395217eb5b9a8c9bdcd3e8869616ec23576e787e4ce3e2c7c3263695b36f", + "key": "roborumble/cli.WasteOfAmmo_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (no score)", "tank_royale": { "elapsed": 20.0, @@ -14615,11 +15263,7 @@ "status": "DISCREPANCY (no score)" }, "roborumble/codemojo.nano.Woot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "codemojo.nano.Woot 1.0", "division": "roborumble", @@ -14683,6 +15327,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "codemojo.nano.Woot 1.0", + "division": "roborumble", + "jar": "codemojo.nano.Woot_1.0.jar", + "jar_sha256": "7f635dc2e4809d680d0bef2e71454a61c03051e0385ec3e11af10105b694c3d6", + "key": "roborumble/codemojo.nano.Woot_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -14702,11 +15354,7 @@ "status": "PASS" }, "roborumble/com.arsenic.NewTest_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "com.arsenic.NewTest 1.0", "division": "roborumble", @@ -14781,6 +15429,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "com.arsenic.NewTest 1.0", + "division": "roborumble", + "jar": "com.arsenic.NewTest_1.0.jar", + "jar_sha256": "0a5a9d382489ace685399cf9c5d709daa70f7e545ac85d54a1b0e81bf7d3a412", + "key": "roborumble/com.arsenic.NewTest_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -14800,11 +15456,7 @@ "status": "PASS" }, "roborumble/com.blogspot.malinkody.DestrobotMalin_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "com.blogspot.malinkody.DestrobotMalin 1.0", "division": "roborumble", @@ -14868,6 +15520,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "com.blogspot.malinkody.DestrobotMalin 1.0", + "division": "roborumble", + "jar": "com.blogspot.malinkody.DestrobotMalin_1.0.jar", + "jar_sha256": "d3205656d01007c800f5fa5549d247aa7030a40380277752ecd590e091339c27", + "key": "roborumble/com.blogspot.malinkody.DestrobotMalin_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 28.0, @@ -14887,11 +15547,7 @@ "status": "score-review" }, "roborumble/com.cohesiva.robocode.ManOwaR_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "com.cohesiva.robocode.ManOwaR 1.0", "division": "roborumble", @@ -14960,6 +15616,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "com.cohesiva.robocode.ManOwaR 1.0", + "division": "roborumble", + "jar": "com.cohesiva.robocode.ManOwaR_1.0.jar", + "jar_sha256": "46519fab7d639e4d0a64afdd133618e92b7dcd923b8f252325098cc4a0e9031e", + "key": "roborumble/com.cohesiva.robocode.ManOwaR_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 32.0, @@ -14981,11 +15645,7 @@ "status": "PASS" }, "roborumble/com.sociesc.T1000_1.0.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "com.sociesc.T1000 1.0.0", "division": "roborumble", @@ -15049,6 +15709,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "com.sociesc.T1000 1.0.0", + "division": "roborumble", + "jar": "com.sociesc.T1000_1.0.0.jar", + "jar_sha256": "4398cb800fc016f19b0a9841c795e5bdf33ab65beaff628759abf81ce711732f", + "key": "roborumble/com.sociesc.T1000_1.0.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (no score)", "tank_royale": { "elapsed": 32.1, @@ -15068,11 +15736,7 @@ "status": "DISCREPANCY (no score)" }, "roborumble/com.spp.robocode.MostlyHarmless_010.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "com.spp.robocode.MostlyHarmless 010", "division": "roborumble", @@ -15136,6 +15800,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "com.spp.robocode.MostlyHarmless 010", + "division": "roborumble", + "jar": "com.spp.robocode.MostlyHarmless_010.jar", + "jar_sha256": "79e3073e986fc6cdf59da91bb4f2b4c271770c7b31600fd2eafebb20bfca2710", + "key": "roborumble/com.spp.robocode.MostlyHarmless_010.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.1, @@ -15155,11 +15827,7 @@ "status": "PASS" }, "roborumble/com.syncleus.robocode.Dreadnaught_0.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "com.syncleus.robocode.Dreadnaught 0.1", "division": "roborumble", @@ -15223,6 +15891,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "com.syncleus.robocode.Dreadnaught 0.1", + "division": "roborumble", + "jar": "com.syncleus.robocode.Dreadnaught_0.1.jar", + "jar_sha256": "4a2a9926375fca4cf32ea72bdc8ab43930223f2090bae428474eafb9a6dd823c", + "key": "roborumble/com.syncleus.robocode.Dreadnaught_0.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -15242,11 +15918,7 @@ "status": "PASS" }, "roborumble/com.timothyveletta.FuzzyBot_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "com.timothyveletta.FuzzyBot 1.1", "division": "roborumble", @@ -15310,6 +15982,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "com.timothyveletta.FuzzyBot 1.1", + "division": "roborumble", + "jar": "com.timothyveletta.FuzzyBot_1.1.jar", + "jar_sha256": "4d2003ddcb53060505ae0c6c32b74ed389da21f047faba64f6fe03bb9488fa37", + "key": "roborumble/com.timothyveletta.FuzzyBot_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -15329,11 +16009,7 @@ "status": "PASS" }, "roborumble/conscience.Bulldozer_1.0a.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "conscience.Bulldozer 1.0a", "division": "roborumble", @@ -15397,6 +16073,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "conscience.Bulldozer 1.0a", + "division": "roborumble", + "jar": "conscience.Bulldozer_1.0a.jar", + "jar_sha256": "f822506ece11632ca21436cfede847408f696140c474ae3b35e25187fbe27875", + "key": "roborumble/conscience.Bulldozer_1.0a.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 10.0, @@ -15416,11 +16100,7 @@ "status": "score-review" }, "roborumble/conscience.Electron_1.3g.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "conscience.Electron 1.3g", "division": "roborumble", @@ -15484,6 +16164,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "conscience.Electron 1.3g", + "division": "roborumble", + "jar": "conscience.Electron_1.3g.jar", + "jar_sha256": "a8d12ab9530cd0f748593ac3d04cd2cf0b563713905457257c3395b7ab7aaf9b", + "key": "roborumble/conscience.Electron_1.3g.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -15503,11 +16191,7 @@ "status": "PASS" }, "roborumble/conscience.Idem_1.0a.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "conscience.Idem 1.0a", "division": "roborumble", @@ -15571,6 +16255,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "conscience.Idem 1.0a", + "division": "roborumble", + "jar": "conscience.Idem_1.0a.jar", + "jar_sha256": "1635ea6692d7c89d41d0e089fced55ac334f24f429380fb686590ca58cecfb2d", + "key": "roborumble/conscience.Idem_1.0a.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 152.2, @@ -15590,11 +16282,7 @@ "status": "PASS" }, "roborumble/conscience.Suicidal_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "conscience.Suicidal 1.1", "division": "roborumble", @@ -15658,6 +16346,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "conscience.Suicidal 1.1", + "division": "roborumble", + "jar": "conscience.Suicidal_1.1.jar", + "jar_sha256": "4650b8e8b5705e0fafb87fb4ffdcda77597f168c7c1c9272abae80691ad4f3d6", + "key": "roborumble/conscience.Suicidal_1.1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (no score)", "tank_royale": { "elapsed": 12.0, @@ -15677,11 +16373,7 @@ "status": "DISCREPANCY (no score)" }, "roborumble/cre.Karolos_0.32.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cre.Karolos 0.32", "division": "roborumble", @@ -15745,6 +16437,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cre.Karolos 0.32", + "division": "roborumble", + "jar": "cre.Karolos_0.32.jar", + "jar_sha256": "9d35fbbe7c3c3a2d325d49028ea3c4be40906f0f5e919a49dd46f66ca734e7ca", + "key": "roborumble/cre.Karolos_0.32.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -15862,11 +16562,7 @@ "status": "FAIL (TR)" }, "roborumble/cs.Nene_1.0.5.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cs.Nene 1.0.5", "division": "roborumble", @@ -15930,6 +16626,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cs.Nene 1.0.5", + "division": "roborumble", + "jar": "cs.Nene_1.0.5.jar", + "jar_sha256": "9615be8f8f2bdf4f42a38f74b4b81d0944e86f06311582915a78af06d529e856", + "key": "roborumble/cs.Nene_1.0.5.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 32.1, @@ -15949,11 +16653,7 @@ "status": "score-review" }, "roborumble/cs.PumpkinPie_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cs.PumpkinPie 1.0", "division": "roborumble", @@ -16017,6 +16717,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cs.PumpkinPie 1.0", + "division": "roborumble", + "jar": "cs.PumpkinPie_1.0.jar", + "jar_sha256": "d395a080e3bfff0c30871bb5f5b255b824f5da4a72f4b0f77bab84cd8a9278fa", + "key": "roborumble/cs.PumpkinPie_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 30.0, @@ -16036,11 +16744,7 @@ "status": "PASS" }, "roborumble/cs.Wren_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cs.Wren 1.0", "division": "roborumble", @@ -16104,6 +16808,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cs.Wren 1.0", + "division": "roborumble", + "jar": "cs.Wren_1.0.jar", + "jar_sha256": "89f30ea0d295bbc4516e9dad72426663fdf68707b2c733555e408c35679770ea", + "key": "roborumble/cs.Wren_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -16123,11 +16835,7 @@ "status": "PASS" }, "roborumble/cs.s2.Seraphim_2.3.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cs.s2.Seraphim 2.3.1", "division": "roborumble", @@ -16191,6 +16899,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cs.s2.Seraphim 2.3.1", + "division": "roborumble", + "jar": "cs.s2.Seraphim_2.3.1.jar", + "jar_sha256": "d5bc11f229b5e2727bae6f8065251ed72bb0cc51ce900684183832c9e45a9845", + "key": "roborumble/cs.s2.Seraphim_2.3.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -16210,11 +16926,7 @@ "status": "PASS" }, "roborumble/csm.NthGeneration_0.04.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "csm.NthGeneration 0.04", "division": "roborumble", @@ -16278,6 +16990,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "csm.NthGeneration 0.04", + "division": "roborumble", + "jar": "csm.NthGeneration_0.04.jar", + "jar_sha256": "e7b92a77f2fe7f2c8c1cd2d4a90529f8c66551770a6f2d176b628217593226a4", + "key": "roborumble/csm.NthGeneration_0.04.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 38.0, @@ -16297,11 +17017,7 @@ "status": "PASS" }, "roborumble/csp.Eagle_3.30.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "csp.Eagle 3.30", "division": "roborumble", @@ -16365,6 +17081,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "csp.Eagle 3.30", + "division": "roborumble", + "jar": "csp.Eagle_3.30.jar", + "jar_sha256": "8a09a1ad3e1e4eb01f84d98868d26db8c0e58b4900ca41ddc93ddf13a56fbcce", + "key": "roborumble/csp.Eagle_3.30.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 16.0, @@ -16384,11 +17108,7 @@ "status": "score-review" }, "roborumble/css.Delitioner_0.11.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "css.Delitioner 0.11", "division": "roborumble", @@ -16452,6 +17172,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "css.Delitioner 0.11", + "division": "roborumble", + "jar": "css.Delitioner_0.11.jar", + "jar_sha256": "6c718a72f59cec4464649d650469adfcccaf0de0744d7fd3e3ef7a2c5ce28c0b", + "key": "roborumble/css.Delitioner_0.11.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -16471,11 +17199,7 @@ "status": "PASS" }, "roborumble/cuoq.Kakera_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cuoq.Kakera 1.0", "division": "roborumble", @@ -16539,6 +17263,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cuoq.Kakera 1.0", + "division": "roborumble", + "jar": "cuoq.Kakera_1.0.jar", + "jar_sha256": "8e7d78ebb335e16e126036e8f66bc9a751c3059f0a310ebd5bf9b930a517b60b", + "key": "roborumble/cuoq.Kakera_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 26.0, @@ -16558,11 +17290,7 @@ "status": "PASS" }, "roborumble/cw.megas.Blade_0.8.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cw.megas.Blade 0.8", "division": "roborumble", @@ -16626,6 +17354,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cw.megas.Blade 0.8", + "division": "roborumble", + "jar": "cw.megas.Blade_0.8.jar", + "jar_sha256": "4a50333c16fd0bdc02aca8c152e7017ede5c8e763ceaba42319867a5b256f830", + "key": "roborumble/cw.megas.Blade_0.8.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -16673,11 +17409,7 @@ "status": "FAIL (TR)" }, "roborumble/cw.megas.GhostShell_GT.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cw.megas.GhostShell GT", "division": "roborumble", @@ -16842,6 +17574,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cw.megas.GhostShell GT", + "division": "roborumble", + "jar": "cw.megas.GhostShell_GT.jar", + "jar_sha256": "f75b19028ba3d181ae70d87a380370cf53e535b49e87f9060069a8591bc5888a", + "key": "roborumble/cw.megas.GhostShell_GT.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.2, @@ -16962,11 +17702,7 @@ "status": "PASS" }, "roborumble/cw.megas.Gridd_0.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cw.megas.Gridd 0.4", "division": "roborumble", @@ -17030,6 +17766,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cw.megas.Gridd 0.4", + "division": "roborumble", + "jar": "cw.megas.Gridd_0.4.jar", + "jar_sha256": "bfafc04f4fe6011bfa749f6895c02e6518cc2acb878f133200cd4a2778653edf", + "key": "roborumble/cw.megas.Gridd_0.4.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -17049,11 +17793,7 @@ "status": "PASS" }, "roborumble/cw.megas.Polar_3.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cw.megas.Polar 3.2", "division": "roborumble", @@ -17117,6 +17857,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cw.megas.Polar 3.2", + "division": "roborumble", + "jar": "cw.megas.Polar_3.2.jar", + "jar_sha256": "5a65f71be6ed605815763385ebd3ed9db00f248a4e7f65ecc75a566fd317665e", + "key": "roborumble/cw.megas.Polar_3.2.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 28.2, @@ -17136,11 +17884,7 @@ "status": "PASS" }, "roborumble/cw.megas.Silhouette_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cw.megas.Silhouette 1.1", "division": "roborumble", @@ -17204,6 +17948,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cw.megas.Silhouette 1.1", + "division": "roborumble", + "jar": "cw.megas.Silhouette_1.1.jar", + "jar_sha256": "e6971a7232c957673e1db12aeb969835a5f33928ed6ed30d6f0a33144002b2c6", + "key": "roborumble/cw.megas.Silhouette_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -17223,11 +17975,7 @@ "status": "PASS" }, "roborumble/cx.BlestPain_1.41.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.BlestPain 1.41", "division": "roborumble", @@ -17291,6 +18039,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.BlestPain 1.41", + "division": "roborumble", + "jar": "cx.BlestPain_1.41.jar", + "jar_sha256": "6f6b974d5aa3cb4db450ab43a2c0425d55d654cb9b577171fd99c9fe094b08ba", + "key": "roborumble/cx.BlestPain_1.41.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -17310,11 +18066,7 @@ "status": "PASS" }, "roborumble/cx.CigaretBH_1.03.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.CigaretBH 1.03", "division": "roborumble", @@ -17378,6 +18130,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.CigaretBH 1.03", + "division": "roborumble", + "jar": "cx.CigaretBH_1.03.jar", + "jar_sha256": "8c107a759b229f8570dcce96ccedd8404545e7d3c6441a206c64d54a4209d678", + "key": "roborumble/cx.CigaretBH_1.03.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 28.0, @@ -17397,11 +18157,7 @@ "status": "PASS" }, "roborumble/cx.Lacrimas_1.36.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.Lacrimas 1.36", "division": "roborumble", @@ -17465,6 +18221,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.Lacrimas 1.36", + "division": "roborumble", + "jar": "cx.Lacrimas_1.36.jar", + "jar_sha256": "3f188597207790c81255c5b78a09002cc87527166c22b75915d63f1f25111dae", + "key": "roborumble/cx.Lacrimas_1.36.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -17484,11 +18248,7 @@ "status": "PASS" }, "roborumble/cx.Princess_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.Princess 1.0", "division": "roborumble", @@ -17555,6 +18315,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.Princess 1.0", + "division": "roborumble", + "jar": "cx.Princess_1.0.jar", + "jar_sha256": "8a5137dcb2d3075bf8b4aa5ec609d499a981f1ed6650641a10e3c95cfe2e7cec", + "key": "roborumble/cx.Princess_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -17577,11 +18345,7 @@ "status": "PASS" }, "roborumble/cx.micro.Blur_0.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.micro.Blur 0.2", "division": "roborumble", @@ -17645,6 +18409,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.micro.Blur 0.2", + "division": "roborumble", + "jar": "cx.micro.Blur_0.2.jar", + "jar_sha256": "a1d62b084d88196ff938d3f189e0f7a84f89e7f034bd21f83a8afb0bc20ba979", + "key": "roborumble/cx.micro.Blur_0.2.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -17664,11 +18436,7 @@ "status": "FAIL (TR)" }, "roborumble/cx.micro.Smoke_0.96.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.micro.Smoke 0.96", "division": "roborumble", @@ -17732,6 +18500,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.micro.Smoke 0.96", + "division": "roborumble", + "jar": "cx.micro.Smoke_0.96.jar", + "jar_sha256": "b18be3e111d1cfd9ed54c431d010e60368d9bffcbb06e38ac2c9bbf6c8243814", + "key": "roborumble/cx.micro.Smoke_0.96.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -17751,11 +18527,7 @@ "status": "PASS" }, "roborumble/cx.micro.Spark_0.6.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.micro.Spark 0.6", "division": "roborumble", @@ -17819,6 +18591,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.micro.Spark 0.6", + "division": "roborumble", + "jar": "cx.micro.Spark_0.6.jar", + "jar_sha256": "dfcbbb2bb08ae6028e68178c3d9f80c0b1d0058ced7ab90bab2cade92f615d18", + "key": "roborumble/cx.micro.Spark_0.6.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 16.0, @@ -17838,11 +18618,7 @@ "status": "score-review" }, "roborumble/cx.mini.BlackSwans_0.60.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.mini.BlackSwans 0.60", "division": "roborumble", @@ -17906,6 +18682,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.mini.BlackSwans 0.60", + "division": "roborumble", + "jar": "cx.mini.BlackSwans_0.60.jar", + "jar_sha256": "6b80464c7c11ce945f726455d0d9d91190460d7a8f8687115651daff9784159b", + "key": "roborumble/cx.mini.BlackSwans_0.60.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -17925,11 +18709,7 @@ "status": "PASS" }, "roborumble/cx.mini.Cigaret_1.31.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.mini.Cigaret 1.31", "division": "roborumble", @@ -17993,6 +18773,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.mini.Cigaret 1.31", + "division": "roborumble", + "jar": "cx.mini.Cigaret_1.31.jar", + "jar_sha256": "273c4194d1b9f0687173158276802ff3456ec8343de62e80d2674e0960715612", + "key": "roborumble/cx.mini.Cigaret_1.31.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 24.0, @@ -18012,11 +18800,7 @@ "status": "PASS" }, "roborumble/cx.mini.Nimrod_0.55.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.mini.Nimrod 0.55", "division": "roborumble", @@ -18080,6 +18864,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.mini.Nimrod 0.55", + "division": "roborumble", + "jar": "cx.mini.Nimrod_0.55.jar", + "jar_sha256": "9ccc75f18f1ea296fefe441150fd552e546989e1e42af4abdc578f297564a321", + "key": "roborumble/cx.mini.Nimrod_0.55.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 16.0, @@ -18099,11 +18891,7 @@ "status": "score-review" }, "roborumble/cx.nano.Smog_2.6.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cx.nano.Smog 2.6", "division": "roborumble", @@ -18167,6 +18955,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cx.nano.Smog 2.6", + "division": "roborumble", + "jar": "cx.nano.Smog_2.6.jar", + "jar_sha256": "1bdea7a9d116c385e6d7dcd12014dc80270f619cf2b20046c5d85640aeda4bbf", + "key": "roborumble/cx.nano.Smog_2.6.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 12.0, @@ -18186,11 +18982,7 @@ "status": "score-review" }, "roborumble/cyragia.Bot_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "cyragia.Bot 1.1", "division": "roborumble", @@ -18254,6 +19046,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "cyragia.Bot 1.1", + "division": "roborumble", + "jar": "cyragia.Bot_1.1.jar", + "jar_sha256": "a361becd83345726307c816da2247744cc4e94ddc2ce03b21ebee6d2957f93dc", + "key": "roborumble/cyragia.Bot_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -18273,11 +19073,7 @@ "status": "PASS" }, "roborumble/da.NewBGank_1.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "da.NewBGank 1.4", "division": "roborumble", @@ -18341,6 +19137,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "da.NewBGank 1.4", + "division": "roborumble", + "jar": "da.NewBGank_1.4.jar", + "jar_sha256": "e47b2ea746b5bd9680b8dd884b82b822857acbd31071bbec0d7b1647c461b194", + "key": "roborumble/da.NewBGank_1.4.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.0, @@ -18360,11 +19164,7 @@ "status": "score-review" }, "roborumble/daemons.DizzyA_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "daemons.DizzyA 1.0", "division": "roborumble", @@ -18428,6 +19228,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "daemons.DizzyA 1.0", + "division": "roborumble", + "jar": "daemons.DizzyA_1.0.jar", + "jar_sha256": "aeba11ca1cd50603c4b74166f04dea30238c77faead6f6830874571bea4091ad", + "key": "roborumble/daemons.DizzyA_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 32.0, @@ -18447,11 +19255,7 @@ "status": "score-review" }, "roborumble/dam.MogBot_2.9.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "dam.MogBot 2.9", "division": "roborumble", @@ -18540,6 +19344,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "dam.MogBot 2.9", + "division": "roborumble", + "jar": "dam.MogBot_2.9.jar", + "jar_sha256": "7afc716ca13e8918c6f19d5d04fb4119a1f8ce825cc44f873e48329233edc646", + "key": "roborumble/dam.MogBot_2.9.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 6.2, @@ -18560,11 +19372,7 @@ "status": "FAIL (TR)" }, "roborumble/dans.Cinnamon_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "dans.Cinnamon 1.2", "division": "roborumble", @@ -18628,6 +19436,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "dans.Cinnamon 1.2", + "division": "roborumble", + "jar": "dans.Cinnamon_1.2.jar", + "jar_sha256": "cb352fa2412994d4160c5161124036464a48cc73b1725178a7ee048609c8b7da", + "key": "roborumble/dans.Cinnamon_1.2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 10.0, @@ -18647,11 +19463,7 @@ "status": "score-review" }, "roborumble/darkcanuck.Gaff_1.50.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "darkcanuck.Gaff 1.50", "division": "roborumble", @@ -18715,6 +19527,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "darkcanuck.Gaff 1.50", + "division": "roborumble", + "jar": "darkcanuck.Gaff_1.50.jar", + "jar_sha256": "64aeb84310e8951dfd7d3cd0bac948d5276e5da63f1fee4cb33419beca244ba8", + "key": "roborumble/darkcanuck.Gaff_1.50.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -18735,11 +19555,7 @@ "status": "FAIL (TR)" }, "roborumble/darkcanuck.Holden_1.13a.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "darkcanuck.Holden 1.13a", "division": "roborumble", @@ -18803,6 +19619,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "darkcanuck.Holden 1.13a", + "division": "roborumble", + "jar": "darkcanuck.Holden_1.13a.jar", + "jar_sha256": "45996fda61b8ca3d0b807d791c79d2bd4dbff3043083bc99041d43ec01c40625", + "key": "roborumble/darkcanuck.Holden_1.13a.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -18823,11 +19647,7 @@ "status": "FAIL (TR)" }, "roborumble/darkcanuck.Pris_0.92.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "darkcanuck.Pris 0.92", "division": "roborumble", @@ -18891,6 +19711,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "darkcanuck.Pris 0.92", + "division": "roborumble", + "jar": "darkcanuck.Pris_0.92.jar", + "jar_sha256": "d545a4a58eff55fc4c24ea47ed12143c7208104ff223940017632c2b8742fdb9", + "key": "roborumble/darkcanuck.Pris_0.92.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -18911,11 +19739,7 @@ "status": "FAIL (TR)" }, "roborumble/davidalves.Firebird_0.25.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davidalves.Firebird 0.25", "division": "roborumble", @@ -18979,6 +19803,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davidalves.Firebird 0.25", + "division": "roborumble", + "jar": "davidalves.Firebird_0.25.jar", + "jar_sha256": "ecf5e584ad4d70023baacc9bd4b2ce6c65520675c91f542e21951e20be1243c9", + "key": "roborumble/davidalves.Firebird_0.25.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.1, @@ -18998,11 +19830,7 @@ "status": "PASS" }, "roborumble/davidalves.PhoenixOS_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davidalves.PhoenixOS 1.1", "division": "roborumble", @@ -19066,6 +19894,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davidalves.PhoenixOS 1.1", + "division": "roborumble", + "jar": "davidalves.PhoenixOS_1.1.jar", + "jar_sha256": "fb4b5b7b628d818780a81818b30de9ae2cf10f54e66f6fbe6111dbb62b38a4c8", + "key": "roborumble/davidalves.PhoenixOS_1.1.jar", + "kind": "robot" + }, "status": "FAIL (TR)", "tank_royale": { "elapsed": 4.2, @@ -19086,11 +19922,7 @@ "status": "FAIL (TR)" }, "roborumble/davidalves.Phoenix_1.02.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davidalves.Phoenix 1.02", "division": "roborumble", @@ -19154,6 +19986,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davidalves.Phoenix 1.02", + "division": "roborumble", + "jar": "davidalves.Phoenix_1.02.jar", + "jar_sha256": "89b46a3c5cd14c05e6ec5f59ab189852178cd2d774313ac2e0a2b3971ec0fb37", + "key": "roborumble/davidalves.Phoenix_1.02.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -19173,11 +20013,7 @@ "status": "PASS" }, "roborumble/davidalves.net.DuelistMicroMkII_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davidalves.net.DuelistMicroMkII 1.1", "division": "roborumble", @@ -19241,6 +20077,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davidalves.net.DuelistMicroMkII 1.1", + "division": "roborumble", + "jar": "davidalves.net.DuelistMicroMkII_1.1.jar", + "jar_sha256": "0d3e784acde7d8156090280241668a002f890ee6d5d7fe6dadc971787f67b15e", + "key": "roborumble/davidalves.net.DuelistMicroMkII_1.1.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 14.0, @@ -19260,11 +20104,7 @@ "status": "score-review" }, "roborumble/davidalves.net.DuelistMicro_1.22.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davidalves.net.DuelistMicro 1.22", "division": "roborumble", @@ -19328,6 +20168,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davidalves.net.DuelistMicro 1.22", + "division": "roborumble", + "jar": "davidalves.net.DuelistMicro_1.22.jar", + "jar_sha256": "e51b32ab504ef17c0bcd47bb7953ccdd07f7e050b0fa1a3478e63281eaa0fe2a", + "key": "roborumble/davidalves.net.DuelistMicro_1.22.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 12.0, @@ -19347,11 +20195,7 @@ "status": "score-review" }, "roborumble/davidalves.net.DuelistMini_1.1.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davidalves.net.DuelistMini 1.1", "division": "roborumble", @@ -19415,6 +20259,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davidalves.net.DuelistMini 1.1", + "division": "roborumble", + "jar": "davidalves.net.DuelistMini_1.1.jar", + "jar_sha256": "9b2ccfee8ff26f622417b82fbe3634e7ff0b3c6693e5fcdd0f534f9a071d86b5", + "key": "roborumble/davidalves.net.DuelistMini_1.1.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -19434,11 +20286,7 @@ "status": "PASS" }, "roborumble/davidalves.net.DuelistNano_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davidalves.net.DuelistNano 1.0", "division": "roborumble", @@ -19502,6 +20350,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davidalves.net.DuelistNano 1.0", + "division": "roborumble", + "jar": "davidalves.net.DuelistNano_1.0.jar", + "jar_sha256": "024b50bf85f17fa136ca87ba615701dd46473d8ef299c49794001271a9aa848e", + "key": "roborumble/davidalves.net.DuelistNano_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 18.0, @@ -19521,11 +20377,7 @@ "status": "PASS" }, "roborumble/davidalves.net.Duelist_0.1.6src.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davidalves.net.Duelist 0.1.6src", "division": "roborumble", @@ -19589,6 +20441,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davidalves.net.Duelist 0.1.6src", + "division": "roborumble", + "jar": "davidalves.net.Duelist_0.1.6src.jar", + "jar_sha256": "85c0efdc1a1c9e91b1d35ab906e794c255165f961ce6ad5271a564686ae623ae", + "key": "roborumble/davidalves.net.Duelist_0.1.6src.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 20.0, @@ -19608,11 +20468,7 @@ "status": "PASS" }, "roborumble/davv.DOne_b002.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "davv.DOne b002", "division": "roborumble", @@ -19676,6 +20532,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "davv.DOne b002", + "division": "roborumble", + "jar": "davv.DOne_b002.jar", + "jar_sha256": "c4247ac7dade8278e7bdcb028af8c14d4850654318798c694a558df07d8b6a2e", + "key": "roborumble/davv.DOne_b002.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 30.0, @@ -19695,11 +20559,7 @@ "status": "score-review" }, "roborumble/dcs.Eater_of_Worlds_1.1.3-A.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "dcs.Eater_of_Worlds 1.1.3-A", "division": "roborumble", @@ -19763,6 +20623,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "dcs.Eater_of_Worlds 1.1.3-A", + "division": "roborumble", + "jar": "dcs.Eater_of_Worlds_1.1.3-A.jar", + "jar_sha256": "b674714bdd8a9a3f2a422c44789ce0328e3c97db328d486b5a08e57c622bd1b8", + "key": "roborumble/dcs.Eater_of_Worlds_1.1.3-A.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -19782,11 +20650,7 @@ "status": "PASS" }, "roborumble/dcs.Eater_of_Worlds_Mini_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "dcs.Eater_of_Worlds_Mini 1.0", "division": "roborumble", @@ -19850,6 +20714,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "dcs.Eater_of_Worlds_Mini 1.0", + "division": "roborumble", + "jar": "dcs.Eater_of_Worlds_Mini_1.0.jar", + "jar_sha256": "424d954d97913eb026baa23b0a387bec3723e090b8c2619f83be76905a006b3d", + "key": "roborumble/dcs.Eater_of_Worlds_Mini_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -19869,11 +20741,7 @@ "status": "PASS" }, "roborumble/dcs.PM.Eater_of_Worlds_PM_1.2.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "dcs.PM.Eater_of_Worlds_PM 1.2", "division": "roborumble", @@ -19937,6 +20805,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "dcs.PM.Eater_of_Worlds_PM 1.2", + "division": "roborumble", + "jar": "dcs.PM.Eater_of_Worlds_PM_1.2.jar", + "jar_sha256": "103d8b2e0e831171d8bc2ad4d2272f17765dfc9ecc7075ee4cdbba2a1a7b3e85", + "key": "roborumble/dcs.PM.Eater_of_Worlds_PM_1.2.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 12.0, @@ -19956,11 +20832,7 @@ "status": "score-review" }, "roborumble/de.erdega.robocode.Polyphemos_0.4.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "de.erdega.robocode.Polyphemos 0.4", "division": "roborumble", @@ -20024,6 +20896,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "de.erdega.robocode.Polyphemos 0.4", + "division": "roborumble", + "jar": "de.erdega.robocode.Polyphemos_0.4.jar", + "jar_sha256": "64765b6e60690f6889f1ef44ef0e8a566871eee38b280784e68900dff5d0e7be", + "key": "roborumble/de.erdega.robocode.Polyphemos_0.4.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 22.0, @@ -20043,11 +20923,7 @@ "status": "score-review" }, "roborumble/de.simpleworks.robocode.bots.swiBot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "de.simpleworks.robocode.bots.swiBot 1.0", "division": "roborumble", @@ -20111,6 +20987,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "de.simpleworks.robocode.bots.swiBot 1.0", + "division": "roborumble", + "jar": "de.simpleworks.robocode.bots.swiBot_1.0.jar", + "jar_sha256": "0f8ba834279b54d3494be8aeb57f35d557e8d05bb4075a832a76206b1fa89eef", + "key": "roborumble/de.simpleworks.robocode.bots.swiBot_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 22.0, @@ -20130,11 +21014,7 @@ "status": "PASS" }, "roborumble/deith.Czolgzilla_0.11.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "deith.Czolgzilla 0.11", "division": "roborumble", @@ -20198,6 +21078,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "deith.Czolgzilla 0.11", + "division": "roborumble", + "jar": "deith.Czolgzilla_0.11.jar", + "jar_sha256": "62fcf900acce6f57575b9f550455c49c70238555233b37a6687f979f9af91779", + "key": "roborumble/deith.Czolgzilla_0.11.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 40.0, @@ -20217,11 +21105,7 @@ "status": "PASS" }, "roborumble/demetrix.ForceMajeure_0.75.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "demetrix.ForceMajeure 0.75", "division": "roborumble", @@ -20285,6 +21169,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "demetrix.ForceMajeure 0.75", + "division": "roborumble", + "jar": "demetrix.ForceMajeure_0.75.jar", + "jar_sha256": "015c4cf71816f9b7ec45ca58c680054eada7157ea54b8eb29c33ec4a82be5011", + "key": "roborumble/demetrix.ForceMajeure_0.75.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 24.0, @@ -20304,11 +21196,7 @@ "status": "PASS" }, "roborumble/demetrix.nano.Neutrino_0.27.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "demetrix.nano.Neutrino 0.27", "division": "roborumble", @@ -20372,6 +21260,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "demetrix.nano.Neutrino 0.27", + "division": "roborumble", + "jar": "demetrix.nano.Neutrino_0.27.jar", + "jar_sha256": "3ba40e81b6908456aad702dd6e8481f33d07898ac773a1307a20563157942a23", + "key": "roborumble/demetrix.nano.Neutrino_0.27.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 14.0, @@ -20391,11 +21287,7 @@ "status": "PASS" }, "roborumble/demetrix.nano.SledgeHammer_0.22.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "demetrix.nano.SledgeHammer 0.22", "division": "roborumble", @@ -20459,6 +21351,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "demetrix.nano.SledgeHammer 0.22", + "division": "roborumble", + "jar": "demetrix.nano.SledgeHammer_0.22.jar", + "jar_sha256": "8ca91c5c9cbe37fbd67f136a38ac4be45c2f8b9eb470367957c3fe20e0edd3cd", + "key": "roborumble/demetrix.nano.SledgeHammer_0.22.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 10.0, @@ -20478,11 +21378,7 @@ "status": "score-review" }, "roborumble/deo.CloudBot_1.3.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "deo.CloudBot 1.3", "division": "roborumble", @@ -20546,6 +21442,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "deo.CloudBot 1.3", + "division": "roborumble", + "jar": "deo.CloudBot_1.3.jar", + "jar_sha256": "d62f0561529c81e5da65ad44c4c6db8b31dceca043ec2d9fcc4646aa15ed28f3", + "key": "roborumble/deo.CloudBot_1.3.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.0, @@ -20565,11 +21469,7 @@ "status": "score-review" }, "roborumble/deo.FlowerBot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "deo.FlowerBot 1.0", "division": "roborumble", @@ -20633,6 +21533,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "deo.FlowerBot 1.0", + "division": "roborumble", + "jar": "deo.FlowerBot_1.0.jar", + "jar_sha256": "b5546fad91b493970149f74a827f7080df7ada99a958deaeebbfcfc0c211a5e5", + "key": "roborumble/deo.FlowerBot_1.0.jar", + "kind": "robot" + }, "status": "PASS", "tank_royale": { "elapsed": 16.0, @@ -20652,11 +21560,7 @@ "status": "PASS" }, "roborumble/deo.virtual.RainbowBot_1.0.jar": { - "diagnosis": { - "cause": null, - "owner": null, - "state": "untriaged" - }, + "diagnosis_events": [], "identity": { "classic_selected": "deo.virtual.RainbowBot 1.0", "division": "roborumble", @@ -20720,6 +21624,14 @@ "rounds": 35, "width": 800 }, + "source_identity": { + "classic_selected": "deo.virtual.RainbowBot 1.0", + "division": "roborumble", + "jar": "deo.virtual.RainbowBot_1.0.jar", + "jar_sha256": "3854b1a74b34f26b4fccfc997b5faadb4db60177cd48857d8bdba79e63f5bba4", + "key": "roborumble/deo.virtual.RainbowBot_1.0.jar", + "kind": "robot" + }, "status": "DISCREPANCY (score)", "tank_royale": { "elapsed": 20.0, diff --git a/compat-test/parity_registry.py b/compat-test/parity_registry.py index 45b7ee4..ec4065d 100644 --- a/compat-test/parity_registry.py +++ b/compat-test/parity_registry.py @@ -9,7 +9,7 @@ from pathlib import Path -SCHEMA_VERSION = 1 +SCHEMA_VERSION = 2 EXCEPTION_RE = re.compile(r"\b((?:[a-zA-Z_$][\w$]*\.)+[A-Z][\w$]*(?:Exception|Error))\b") FRAME_RE = re.compile(r"^\s*at\s+([\w.$]+)\([^)]*\)", re.MULTILINE) FRAME_NOISE_PREFIXES = ("java.", "javax.", "jdk.", "sun.", "robocode.", "dev.robocode.") @@ -84,8 +84,10 @@ def load_registry(path: Path) -> dict: return {"schema_version": SCHEMA_VERSION, "subjects": {}} -def observation_id(key: str, entry: dict, manifest: dict) -> str: - payload = json.dumps({"key": key, "entry": entry, "manifest": manifest}, sort_keys=True) +def observation_id(key: str, entry: dict, manifest: dict, source_identity: dict) -> str: + payload = json.dumps({ + "key": key, "entry": entry, "manifest": manifest, "source_identity": source_identity, + }, sort_keys=True) return hashlib.sha256(payload.encode("utf-8")).hexdigest()[:16] @@ -102,18 +104,72 @@ def subject_identity(key: str, entry: dict, collection_dir: Path) -> dict: } +def add_diagnosis(subject: dict, cause: str, owner: str, recorded_at: str) -> dict: + """Append an immutable diagnosis event; prior triage remains reviewable.""" + events = subject.setdefault("diagnosis_events", []) + event = { + "id": f"diagnosis-{len(events) + 1}", + "cause": cause, + "owner": owner, + "recorded_at": recorded_at, + } + events.append(event) + return event + + +def diagnosis_for_cause(subject: dict, cause: str) -> dict | None: + for event in reversed(subject.get("diagnosis_events", [])): + if event.get("cause") == cause: + return event + return None + + +def latest_diagnosis(subject: dict) -> dict: + events = subject.get("diagnosis_events", []) + return events[-1] if events else {} + + +def _migrate_subject(subject: dict) -> None: + """Make pre-event registry entries readable without losing their former triage.""" + subject.setdefault("diagnosis_events", []) + legacy = subject.pop("diagnosis", None) + if legacy and legacy.get("cause"): + add_diagnosis(subject, legacy["cause"], legacy.get("owner"), "migrated") + + +def _same_observation(observation: dict, entry: dict, manifest: dict) -> bool: + """Recognize schema-1 observations whose ID predates per-observation identity.""" + return ( + observation.get("completed_at") == entry.get("completed_at") + and observation.get("status") == entry.get("status") + and observation.get("delta_pct") == entry.get("delta_pct") + and observation.get("setup") == entry.get("setup") + and observation.get("classic") == entry.get("rc", {}) + and observation.get("tank_royale") == entry.get("tr", {}) + and observation.get("confirmation") == entry.get("confirmation") + and observation.get("retest") == entry.get("retest") + and observation.get("manifest") == manifest + ) + + def sync_state(registry: dict, state: dict, collection_dir: Path, manifest: dict) -> int: """Append state observations without replacing earlier evidence.""" added = 0 + registry["schema_version"] = SCHEMA_VERSION subjects = registry.setdefault("subjects", {}) for key, entry in sorted(state.get("robots", {}).items()): + identity = subject_identity(key, entry, collection_dir) subject = subjects.setdefault(key, { - "identity": subject_identity(key, entry, collection_dir), - "diagnosis": {"state": "untriaged", "cause": None, "owner": None}, + "identity": identity, + "diagnosis_events": [], "observations": [], }) - oid = observation_id(key, entry, manifest) - if any(observation["id"] == oid for observation in subject["observations"]): + _migrate_subject(subject) + for observation in subject["observations"]: + observation.setdefault("source_identity", subject["identity"]) + oid = observation_id(key, entry, manifest, identity) + if any(observation["id"] == oid or _same_observation(observation, entry, manifest) + for observation in subject["observations"]): continue subject["observations"].append({ "id": oid, @@ -124,12 +180,15 @@ def sync_state(registry: dict, state: dict, collection_dir: Path, manifest: dict "classic": entry.get("rc", {}), "tank_royale": entry.get("tr", {}), "confirmation": entry.get("confirmation"), + "retest": entry.get("retest"), + "source_identity": identity, "manifest": manifest, }) subject["latest_observation"] = oid subject["status"] = registry_status(entry.get("status", "unknown")) added += 1 for subject in subjects.values(): + _migrate_subject(subject) observations = subject.get("observations", []) if observations: subject["status"] = registry_status(observations[-1].get("status", "unknown")) @@ -159,7 +218,7 @@ def render_markdown(registry: dict) -> str: ]) for key, subject in sorted(subjects.items()): identity = subject["identity"] - diagnosis = subject.get("diagnosis", {}) + diagnosis = latest_diagnosis(subject) lines.append( f"| {key} | {identity['division']} | {identity['kind']} | {subject.get('status', 'unknown')} | " f"{subject.get('latest_observation', '-')} | {diagnosis.get('cause') or '-'} | {diagnosis.get('owner') or '-'} |" diff --git a/compat-test/test_parity_registry.py b/compat-test/test_parity_registry.py index 3ea01ee..34d3d87 100644 --- a/compat-test/test_parity_registry.py +++ b/compat-test/test_parity_registry.py @@ -1,4 +1,5 @@ import importlib.util +import sys import tempfile import unittest from pathlib import Path @@ -8,6 +9,10 @@ SPEC = importlib.util.spec_from_file_location("parity_registry", MODULE) registry = importlib.util.module_from_spec(SPEC) SPEC.loader.exec_module(registry) +sys.path.insert(0, str(MODULE.parent)) +HARNESS_SPEC = importlib.util.spec_from_file_location("compat_test", MODULE.with_name("compat_test.py")) +harness = importlib.util.module_from_spec(HARNESS_SPEC) +HARNESS_SPEC.loader.exec_module(harness) class ParityRegistryTest(unittest.TestCase): @@ -79,6 +84,55 @@ def testHARN001_UnitPositive_NewObservationRetainsPriorRun(self): self.assertEqual(2, len(subject["observations"])) self.assertEqual("PASS", subject["status"]) + def testHARN001_UnitPositive_ObservationKeepsJarIdentityWhenSameKeyChanges(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + jar = root / "roborumble" / "a.Bot_1.0.jar" + jar.parent.mkdir() + jar.write_bytes(b"first") + state = {"robots": {"roborumble/a.Bot_1.0.jar": { + "status": "PASS", "completed_at": "2026-09-09T00:00:00Z", + "setup": {}, "rc": {}, "tr": {}, + }}} + data = {"schema_version": 1, "subjects": {}} + registry.sync_state(data, state, root, {"bridge_commit": "one"}) + jar.write_bytes(b"replacement") + state["robots"]["roborumble/a.Bot_1.0.jar"]["completed_at"] = "2026-09-10T00:00:00Z" + registry.sync_state(data, state, root, {"bridge_commit": "two"}) + observations = data["subjects"]["roborumble/a.Bot_1.0.jar"]["observations"] + self.assertEqual(2, len(observations)) + self.assertNotEqual(observations[0]["source_identity"]["jar_sha256"], + observations[1]["source_identity"]["jar_sha256"]) + + def testHARN001_UnitPositive_DiagnosisAndRepairRemainLinkedToRetest(self): + subject = {"diagnosis_events": [], "observations": []} + diagnosis = registry.add_diagnosis(subject, "lifecycle", "bridge", "2026-09-09T00:00:00Z") + registry.add_diagnosis(subject, "runner", "tank-royale", "2026-09-10T00:00:00Z") + self.assertEqual(diagnosis, registry.diagnosis_for_cause(subject, "lifecycle")) + self.assertEqual("runner", registry.latest_diagnosis(subject)["cause"]) + state = {"robots": {"roborumble/a.Bot_1.0.jar": { + "status": "PASS", "completed_at": "2026-09-11T00:00:00Z", "setup": {}, "rc": {}, "tr": {}, + "retest": {"cause": "lifecycle", "diagnosis_id": diagnosis["id"], "repair": "abc123"}, + }}} + subject["identity"] = registry.subject_identity("roborumble/a.Bot_1.0.jar", state["robots"]["roborumble/a.Bot_1.0.jar"], Path("missing")) + data = {"schema_version": 1, "subjects": {"roborumble/a.Bot_1.0.jar": subject}} + registry.sync_state(data, state, Path("missing"), {"bridge_commit": "abc"}) + self.assertEqual("abc123", subject["observations"][0]["retest"]["repair"]) + + def testC004_UnitPositive_LiveWorkerExceptionTriggersBridgeOnlyWatcher(self): + watcher = harness.BridgeOnlyErrorWatcher([], []) + self.assertTrue(watcher( + "java.lang.IllegalStateException: bridge failure\n" + " at legacy.Bot.run(Bot.java:12)")) + self.assertIn(("java.lang.IllegalStateException", "legacy.Bot.run"), watcher.found) + + def testC004_UnitNegative_ClassicWorkerExceptionDoesNotTriggerWatcher(self): + signature = {"exception": "java.lang.IllegalStateException", "origin": "legacy.Bot.run"} + watcher = harness.BridgeOnlyErrorWatcher([], [signature]) + self.assertFalse(watcher( + "java.lang.IllegalStateException: classic equivalent\n" + " at legacy.Bot.run(Bot.java:12)")) + if __name__ == "__main__": unittest.main() diff --git a/docs/decisions/PDR-003-versioned-parity-registry.md b/docs/decisions/PDR-003-versioned-parity-registry.md index 1eb8925..1512bae 100644 --- a/docs/decisions/PDR-003-versioned-parity-registry.md +++ b/docs/decisions/PDR-003-versioned-parity-registry.md @@ -12,7 +12,7 @@ title: Treat every rumble subject as a versioned parity case against classic Rob ## Decision -The compatibility harness keeps an append-only, tracked parity registry for every robot jar and team. Classic Robocode is the behavioural reference. Each observation records the source identity, official setup, engine artifacts, outcomes, normalized errors, and the later diagnosis or repair that changed its status. +The compatibility harness keeps an append-only, tracked parity registry for every robot jar and team. Classic Robocode is the behavioural reference. Each observation records the source identity, official setup, engine artifacts, outcomes, normalized errors, and any focused retest's immutable diagnosis and repair reference. Diagnosis is an append-only event history, so later triage cannot alter earlier evidence. Errors compare by exception class and first legacy callback or application frame. Tank-Royale-only errors stop score collection immediately because classic has already established the reference. Completion and error mismatches in either direction remain unresolved cases. @@ -20,4 +20,4 @@ First-pass work uses bounded batches. A repair retests only unresolved cases tag ## Consequences -The registry, rather than an ignored local report, is the evidence carrier for the population-level M-006 judgment. A repair can show which observed failures it fixed without rerunning healthy jars. The collection stays read-only, and an upstream Tank Royale repair is rebuilt as a compatible Bot API and runner pair before its cases are retested. +The registry, rather than an ignored local report, is the evidence carrier for the population-level M-006 judgment. The checked-in roborumble checkpoint is an initial partial population result; teams and the other rumble divisions enter through later bounded batches. A repair can show which observed failures it fixed without rerunning healthy jars. The collection stays read-only, and an upstream Tank Royale repair is rebuilt as a compatible Bot API and runner pair before its cases are retested. From e6d7af845a4cecb5b57e5b716f0347306060e415 Mon Sep 17 00:00:00 2001 From: "Flemming N. Larsen" Date: Wed, 9 Sep 2026 20:12:31 +0200 Subject: [PATCH 5/5] Close parity review edge cases --- compat-test/compat_test.py | 27 ++++++++++++++++++++++++--- compat-test/parity_registry.py | 7 +++++-- compat-test/test_parity_registry.py | 20 ++++++++++++++++++-- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/compat-test/compat_test.py b/compat-test/compat_test.py index f914495..52e89b8 100644 --- a/compat-test/compat_test.py +++ b/compat-test/compat_test.py @@ -308,7 +308,12 @@ def collected(): kill_process_tree(proc) return -1, collected() + "\n", False time.sleep(poll_seconds) - return proc.returncode, collected(), False + output = collected() + # A short-lived worker can write its final exception and exit between polls. Its + # output is still a bridge-only failure and must not leave a score in the result. + if abort_when(output): + return -1, output + "\n", False + return proc.returncode, output, False def _drain(stream, sink): @@ -991,6 +996,17 @@ def should_run(entry, opts, registry=None, key=None): return False +def retest_option_error(opts, todo=None): + """Return an actionable invalid-retetest message, or None when selection is valid.""" + if opts.repair and not opts.retest_cause: + return "--repair requires --retest-cause so it can be linked to a diagnosis." + if opts.retest_cause and not opts.repair: + return "--retest-cause requires --repair to preserve repair evidence." + if todo is not None and opts.retest_cause and not todo: + return f"No unresolved registry subject is diagnosed with cause: {opts.retest_cause}" + return None + + def check_prerequisites(opts): problems = [] for label, path in [ @@ -1633,8 +1649,9 @@ def division_setup(collection, opts): def main(): opts = parse_args() - if opts.repair and not opts.retest_cause: - print("--repair requires --retest-cause so it can be linked to a diagnosis.", file=sys.stderr) + option_error = retest_option_error(opts) + if option_error: + print(option_error, file=sys.stderr) return 2 if opts.conformance: @@ -1677,6 +1694,10 @@ def main(): registry = load_registry(PARITY_REGISTRY_FILE) todo = [(c, j) for c, j in jars if should_run(state["robots"].get(f"{c}/{j.name}"), opts, registry, f"{c}/{j.name}")] + option_error = retest_option_error(opts, todo) + if option_error: + print(option_error, file=sys.stderr) + return 2 print(f"Found {len(jars)} jars; {len(jars) - len(todo)} already tested, " f"{len(todo)} to test.") diff --git a/compat-test/parity_registry.py b/compat-test/parity_registry.py index ec4065d..f1f0376 100644 --- a/compat-test/parity_registry.py +++ b/compat-test/parity_registry.py @@ -137,7 +137,8 @@ def _migrate_subject(subject: dict) -> None: add_diagnosis(subject, legacy["cause"], legacy.get("owner"), "migrated") -def _same_observation(observation: dict, entry: dict, manifest: dict) -> bool: +def _same_observation(observation: dict, entry: dict, manifest: dict, + source_identity: dict) -> bool: """Recognize schema-1 observations whose ID predates per-observation identity.""" return ( observation.get("completed_at") == entry.get("completed_at") @@ -149,6 +150,7 @@ def _same_observation(observation: dict, entry: dict, manifest: dict) -> bool: and observation.get("confirmation") == entry.get("confirmation") and observation.get("retest") == entry.get("retest") and observation.get("manifest") == manifest + and observation.get("source_identity") == source_identity ) @@ -168,7 +170,8 @@ def sync_state(registry: dict, state: dict, collection_dir: Path, manifest: dict for observation in subject["observations"]: observation.setdefault("source_identity", subject["identity"]) oid = observation_id(key, entry, manifest, identity) - if any(observation["id"] == oid or _same_observation(observation, entry, manifest) + if any(observation["id"] == oid or _same_observation( + observation, entry, manifest, identity) for observation in subject["observations"]): continue subject["observations"].append({ diff --git a/compat-test/test_parity_registry.py b/compat-test/test_parity_registry.py index 34d3d87..a6ace10 100644 --- a/compat-test/test_parity_registry.py +++ b/compat-test/test_parity_registry.py @@ -3,6 +3,7 @@ import tempfile import unittest from pathlib import Path +from types import SimpleNamespace MODULE = Path(__file__).with_name("parity_registry.py") @@ -97,8 +98,7 @@ def testHARN001_UnitPositive_ObservationKeepsJarIdentityWhenSameKeyChanges(self) data = {"schema_version": 1, "subjects": {}} registry.sync_state(data, state, root, {"bridge_commit": "one"}) jar.write_bytes(b"replacement") - state["robots"]["roborumble/a.Bot_1.0.jar"]["completed_at"] = "2026-09-10T00:00:00Z" - registry.sync_state(data, state, root, {"bridge_commit": "two"}) + registry.sync_state(data, state, root, {"bridge_commit": "one"}) observations = data["subjects"]["roborumble/a.Bot_1.0.jar"]["observations"] self.assertEqual(2, len(observations)) self.assertNotEqual(observations[0]["source_identity"]["jar_sha256"], @@ -133,6 +133,22 @@ def testC004_UnitNegative_ClassicWorkerExceptionDoesNotTriggerWatcher(self): "java.lang.IllegalStateException: classic equivalent\n" " at legacy.Bot.run(Bot.java:12)")) + def testC004_UnitPositive_ImmediateWorkerExitStillTriggersWatcher(self): + watcher = harness.BridgeOnlyErrorWatcher([], []) + returncode, output, timed_out = harness.run_java( + [sys.executable, "-c", "print('java.lang.IllegalStateException: failure\\n at legacy.Bot.run(Bot.java:12)')"], + Path.cwd(), timeout=5, abort_when=watcher, poll_seconds=0.1) + self.assertEqual(-1, returncode) + self.assertFalse(timed_out) + self.assertTrue(watcher.triggered) + self.assertIn("IllegalStateException", output) + + def testHARN001_UnitNegative_CauseRetestRequiresRepairAndKnownSelection(self): + missing_repair = SimpleNamespace(repair=None, retest_cause="lifecycle") + unknown_cause = SimpleNamespace(repair="abc123", retest_cause="lifecycle") + self.assertIn("requires --repair", harness.retest_option_error(missing_repair)) + self.assertIn("No unresolved", harness.retest_option_error(unknown_cause, [])) + if __name__ == "__main__": unittest.main()