First candidate
footballworld
Tag v0.1.0 line (branch hw)
68e0caaf8d736608f4717fd9fdd6d7241fe592f6
- Licence
- Apache-2.0
- Timing
- 80 Hz physics · 10 Hz decisions
- Players
- Body + gaze orientation; composite shape
Type at least two characters. Use the down arrow to move into the results, Enter to jump, Escape to clear.
AI Football, Interactive Engineering Blueprint
AI Football is an idea conceived by its two promoters: 22 autonomous virtual players in one shared 11 v 11 simulation, a sealed and verifiable match record, and, later, professional 3D production. This blueprint is the technical feasibility assessment prepared for them: what exists, what must be built, what is still unproven, and how every step would be checked.
Executive explanation keeps each chapter short and visual. Engineering deep dive opens every technical block. Each chapter also has its own expandable deep dive.
Method. No data in this blueprint comes from an execution: nothing has been run. Source code and documentation were read through a tool that summarises pages; details must be confirmed on the original text before an irreversible decision rests on them.
01 Foundations
The goal is a system that produces 11 v 11 football matches played by 22 autonomous agents, with no human control and no predetermined result, a verifiable record of what happened and, later, professional-quality audiovisual presentation.
The system is split into three parts that only talk through two project-owned data contracts: the Brain (the players), the simulation engine (the match) and the visual engine (the pictures). Parts of the idea can be built with technology that exists today. Two parts have not been publicly demonstrated, as far as the research found, and they are the real risk.
| Part | Status |
|---|---|
| 11 v 11 simulation with rules and a record | Open technology declares it does this Verified from sources; none executed by us Pending experiment |
| Autonomous agents playing complete matches | Demonstrated for decades in RoboCup 2D with rule-based agents Verified from sources |
| Football that a fan finds believable | Not demonstrated by anyone in a measured way Pending experiment First decisive risk |
| A short, autonomous 2D match | Achievable with existing technology Engineering hypothesis First visible product |
| Animated human bodies faithful to the simulation | Not publicly demonstrated for 22 players Pending experiment Second decisive risk |
| Real broadcast quality | Final aspiration; insufficient demonstration today |
Build in stages that each end in something demonstrable and measurable. Stages 1–3 need no 3D graphics and no equipment purchases; they give the first evidence, at a five-minute scale, on the first decisive question. Believability over a whole match is then checked in simulation only (stage 4b). Visual production starts at stage 4a and is gated by three engineering decision points: A after the 2D match, B after the animation study and simulation consolidation, C after a small visual test.
It is not an authorisation. No stage is authorised, and describing a stage does not authorise it. Accepting this blueprint authorises no execution or commitment. Photorealistic broadcast quality is the long-term aspiration and is not promised.
footballworld engine lineThe MESSI engine line that was proposed for execution was read at a pinned commit. It fits the project better than the line analysed in G0: the player has body orientation and gaze as states of its own, a composite collision shape, and actions are intents (move, control, pass, shoot, clear, challenge) with continuous parameters Verified from sources. That matches the agent interface this blueprint proposes.
It still has serious gaps: fouls, cards and the winner of each duel are drawn by chance; in the foul file read, advantage is never applied and handball is never emitted; there is no jump; and its authors state that realism is not established Verified from sources.
This assessment was reviewed by engineering direction and cross-checked by two AI research assistants. No independent human review has taken place yet; one can be added before any commitment to third parties.
02 Foundations
ADR-001 · approved
A precomputed match is acceptable. A scripted match is not.
This is not a generated video of football. A generated video shows events somebody chose. Here the events come from the players' own decisions inside a simulation, and the video is made afterwards from the record of what happened. Editing may choose cameras and replays; it may not change what happened.
Brain, simulation engine and visual engine are distinct systems.
Project directionThe Brain is developed and evaluated without 3D graphics.
Project directionThe simulation does not depend on the graphics engine.
Project directionAutonomous simulation first, authoritative record second, offline visual production third.
ADR-001, approvedSeparation does not ignore the body: actions must be physically plausible and animatable.
Project directionProgress is by verified results, not by calendar.
Project directionExperimental simulations can be repeated freely; official matches follow an integrity protocol.
Project directionEvery reference to third-party code uses an exact commit and line of development.
G0.1Progressive visual target; photorealism is an aspiration, not a promised capability.
Project directionRule-based agents are acceptable if they meet the definition of autonomy.
Project directionFinal aspiration: 90 minutes at a quality comparable to a professional broadcast. Not required in the first version.
Binding design rules: the three systems stay separated by project-owned data contracts; body architectures A, D-lite and D/E stay open until evidence selects one; third-party code is always referenced by full commit SHA and line of development.
03 Foundations
Three systems, two contracts, two supporting components. Select any block in the diagram to see what it does.
Select a block in the diagram.
04 Foundations
No system reads anything from another except through a contract.
Only the adapters change. The Brain, both contracts and every consumer stay the same.
| Contract | Between | Content | Belongs to |
|---|---|---|---|
| 1 · Agent interface | Brain ↔ engine | What each player observes, what it can request, how often, and the simultaneity rules | The project |
| 2 · Match record | Engine → visual, audit and statistics | Per-instant state, events, decisions, manifest, hashes (specified in G0 annex 02 §14) | The project |
Illustrative example, not output from any run. Field names are proposals of this project, not taken from any engine.
Egocentric, normalised by attack direction. Only what is observable: opponents' internal data (such as exact fatigue) is filtered out.
{
"illustrative": "not output from any run",
"decision_tick": 14720,
"player_id": "home-07",
"frame": "egocentric, normalised to attack direction",
"self": { "pos_m": [-6.0, 7.5], "vel_mps": [0.4, -0.2],
"body_forward": [0.94, -0.34], "gaze_yaw_rad": 0.30,
"stamina": 0.81, "has_ball": true },
"teammates": [ { "id": "home-09", "pos_m": [8.4, 2.6],
"vel_mps": [1.8, -0.1], "body_forward": [0.99, -0.12] } ],
"opponents": [ { "id": "away-04", "pos_m": [-1.8, 5.4],
"vel_mps": [-2.6, 0.9], "body_forward": [-0.95, 0.31] } ],
"ball": { "pos_m": [-5.6, 7.3, 0.11], "vel_mps": [0.3, -0.2, 0.0],
"spin_radps": [0, 0, 0] },
"phase": "open_play", "score": [0, 0],
"match_clock_ms": 184000, "period": 1,
"team_instructions": { "block_height": "mid", "press": "high" },
"memory_hash": "a91c…7e02"
}
One intent out of six (MOVE, CONTROL, PASS, SHOT, CLEAR, CHALLENGE) plus eight continuous values. There is no jump action; catching the ball is an outcome, not a command.
{
"illustrative": "not output from any run",
"decision_tick": 14720,
"player_id": "home-07",
"intent": "PASS",
"continuous": {
"move": [0.20, -0.05],
"force_to_ball": 0.58,
"ball_direction": [0.94, -0.34],
"elevation_rad": 0.00,
"spin": 0.00,
"gaze_yaw_rad": 0.30
}
}
One line from each of the record's line-oriented files. The full layout is in Match record.
// events.jsonl (illustrative, not output from any run)
{ "event_id": 4120, "type": "ball_contact", "tick": 14723,
"t_contact_us": 184037500, "match_clock_ms": 184000, "period": 1,
"player_id": "home-07", "contact_kind": "pass_foot",
"caused_by_decision": { "player_id": "home-07", "decision_tick": 14720 },
"authoritative": true }
// ball_segments.jsonl
{ "segment_id": 212, "start_tick": 14723,
"p0_m": [-5.60, 7.30, 0.11], "v0_mps": [14.2, -5.1, 0.0],
"spin_radps": [0, 0, 0], "model": "rolling+drag", "end": "contact:4121" }
// referee.jsonl
{ "ref_id": 902, "tick": 14807, "rule": "offside: position at the pass",
"values": { "receiver_x_m": 8.6, "second_last_defender_x_m": 9.1 },
"decision": "no_offence" }
tick is the source of truth, plus sim_time_us. The match clock is a separate field that stops and runs according to the rules. Ball contacts carry their own sub-tick t_contact_us.05 The players
Each player looks at the pitch and decides what to do. The Brain has three layers; only the bottom one knows which engine it is talking to.
Formation, block height, pressing, substitutions.
Intent: offer for a pass, mark, press, whom to pass to, shoot.
Translates the intent into the engine's concrete action.
See the interactive 2D concept lab
The 22 players may run the same decision program, the way 22 people can follow the same training while each makes their own choices. There is no need for 22 large AI chat models: that would be slower and less reliable. Players that follow well-designed football rules count as autonomous, as long as each one decides for itself from what it sees.
| Aspect | Proposal | Status |
|---|---|---|
| Frame | Egocentric, normalised by attack direction | The candidate does this Verified from sources |
| Content | Position, velocity and orientation of everyone; ball with height and spin; phase; score; clock; own instructions | Proposal |
| Opponent information | Only what is observable; internal data such as exact fatigue is filtered | Engineering hypothesis In soccerworld the observation included opponent internal data Verified from sources; not verified for footballworld |
| Limited vision | Optional. The candidate offers a 160° cone tied to body and gaze Verified from sources | Later decision |
| Reaction latency | Deliver the observation with a delay that depends on an attribute | Engineering hypothesis |
At the level of an intent with parameters. The candidate engine already works this way Verified from sources: one intent out of six (MOVE, CONTROL, PASS, SHOT, CLEAR, CHALLENGE) plus eight continuous values (movement, force and direction on the ball, elevation, spin, gaze). There is no jump action; catching the ball is an outcome, not a command.
The 22 actions of one instant are computed on the same state and applied together.
| Order | Method | Purpose | External data |
|---|---|---|---|
| 1 | Rules and utility, with hierarchy | Basis of the first product | None |
| 2 | Value models fitted on matches from our own simulator | Choose better passes and positions | None |
| 3 | Imitation of positioning from real tracking data | Human style | 27 matches with a clear licence Verified from sources: little to learn from, enough to calibrate |
| 4 | Multi-agent reinforcement learning on top | Improvement | Compute; risk of exploiting engine bugs Verified from sources |
No model of real trajectories with published weights was found: the three reviewed were trained on private data Verified from sources. Published agent weights exist for Google Research Football, tied to that engine and not checked. The strongest learned 11 v 11 result found controls the 10 outfield players with a rule-based goalkeeper, in 3,000-step matches, with industrial-scale compute Verified from sources; the search was not exhaustive.
Physical attributes as engine limits; technical ones as execution error; mental ones as explicit degradations of perception and selection, applied outside the decision program so that their effect is monotonic and auditable Engineering hypothesis. The candidate already has per-player profiles with top speed, accelerations and ball control Verified from sources.
Structural measures (players near the ball, compactness, line coherence, occupation by role, sequence diversity, abnormal dead time); statistics against real-football references; a response test, an attribute-sensitivity test, and blind review by people who know football.
06 The players
Operational definition · level L2 (ADR-002)
A player is autonomous if, at every decision instant, its action depends only on its observation of the public state, its own memory, its attributes, its own team's instructions and its own seeded randomness.
It cannot read future states, result targets, the opponent's internal data or instructions, or the engine's random generator. The 22 players may share the same decision program.
Autonomy does not depend on whether the agent is a neural network, nor on whether the 22 share weights. It depends on where the decision is taken and with what information. One set of weights evaluated 22 times with 22 different observations produces 22 different decisions; role, position and attributes enter as data. This is standard practice in cooperative multi-agent learning.
The record stores, per player and per decision tick, observation → action. An auditor can re-run the sealed policy on the recorded observation and check that the same action comes out. If it does, the action came from the agent and not from outside. Again, that alone does not exclude a central controller, hence tests 2–4.
07 The match
The engine is the match itself: physics, the ball, the rules and the referee, and the official state of the game. The contracts are ours; the engine is replaceable.
footballworld) shows. Nothing was executed.footballworld at the pinned commit. This is a proposal; project direction decides.footballworld and correcting its gaps, which is an intermediate route.| Condition | Effect |
|---|---|
| MESSI compatibility. Its CI uses Python 3.11; current JAX versions require Python 3.12 or later. A September 2026 environment would have to be reproduced | Days to weeks in stage 1 |
| MESSI performance on CPU. Time and memory per match unknown | May require 32 GB or smaller batches |
| Configuring a 5-minute match with two halves | Extra work if not possible without modifying the engine Pending experiment |
| Separating the Brain per player over an interface that moves everyone at once | Unknown performance or design effort |
| Chance-based referee and missing rules | More work if correction is decided before stage 4b |
| The upstream project changes or disappears | Our own fork from the pinned commit |
Do not install by name. Neither messi-env nor messi-football existed on PyPI at reading time, although the tag's documentation shows pip install messi-football. A package appearing under that name would not be verified. Code is fetched only by full commit SHA.
The safety procedure of runbook G1a v1.1 governs any first execution: isolated machine, no network for third-party code, separate user, memory and process limits.
08 The match
Nine options were compared from public sources. Filter by role, sort by column, and expand a row for the detail.
Principle P8. Only footballworld and soccerworld are pinned by commit. The others were read on their default branch on 2026-11-14 without a pinned revision; treat their findings as Pending experiment until a commit is fixed.
09 The match
The MESSI repository (github.com/UoS-CIDA-Lab/MESSI, University of Seoul) contains three unrelated lines of code under one name. A tag and a branch are not the same code. MESSI is a candidate, not tested by us.
First candidate
footballworldTag v0.1.0 line (branch hw)
68e0caaf8d736608f4717fd9fdd6d7241fe592f6
Not proposed
soccerworldBranch newenv
b04b15c59d36c1e4f44e02d0886b2d0d7261f689
Excluded
mainPackage messi 0.0.1
722bc62aebfdc0f75ab127de00ac7b7948ea871d
An earlier research round (G0) described the soccerworld line while believing it was the tagged release. The correction (G0.1) is why every reference to third-party code now uses a full commit SHA and line of development.
footballworldDocumentary reading of commit 68e0caaf8d736608f4717fd9fdd6d7241fe592f6 by a single reader, through a page-summarising tool. A second, independent pass re-checked ten claims (body, orientation, action, timing, observation, duels, advantage and handball, duration, interface, data and visualisation). Rows outside those ten are marked “not re-checked”.
| Aspect | Finding Verified from sources | Assessment | Second pass |
|---|---|---|---|
| Body | Position and velocity in the plane; height and reach as scalars; composite collision shape (torso, legs, head) | Enough for 2D and for architecture A | Re-checked |
| Orientation | Body and gaze are independent states; can move one way while facing another; moving backwards is slower | Key improvement over the other line | Re-checked |
| Orientation limit | Orientation is not commanded directly: it is derived from the kick direction or the movement direction | To be handled in the skill layer | Found by the second pass |
| Jump | Does not exist; there is vertical reach and an aerial-recovery lock | A gap for headers and saves | Re-checked |
| Ball | 3D, with drag, spin, bounce, posts and crossbar by sweep; goal when the whole ball crosses | Adequate | Not re-checked |
| Timing | Physics at 80 Hz, decisions at 10 Hz | Adequate | Re-checked |
| Duels | The winner is drawn among candidates weighted by distance, arrival time, height and control | Declared randomness; review its weight | Re-checked |
| Fatigue | Two stamina pools that reduce top speed | Adequate | Not re-checked |
| Fouls and cards | By chance. In the foul file: advantage is not applied and handball is not emitted; the obvious-goal-opportunity classifier has no caller in that file, and whether another module calls it was not checked | A gap for a product that claims integrity | Re-checked |
| Offside | Deterministic, per contact; vision obstruction not modelled | Acceptable to start | Not re-checked |
| Restarts | Kick-off, throw-in, goal kick, corner, free kick, penalty; no wall, no dropped ball | Acceptable to start | Not re-checked |
| Goalkeeper | 8-second limit with a corner to the opponent. Back-pass: hands barred; how it is sanctioned is not verified | 8-second rule present; back-pass to confirm | Not re-checked |
| Substitutions | 5 in 3 windows; rule-based manager included | Adequate | Not re-checked |
| Duration | 2 × 2,700 s plus dead-ball time, capped at 600 s per half: default cap of 66,000 decision steps. A pending penalty at the end of a half suspends it (hard cap 4,194,303). Whether half-time consumes steps is not verified | For a short match the duration must be configured Pending experiment | Re-checked |
| Agent interface | initialize and step over observations; a single call carries the action of every roster slot (sized by registered players, not by 22). That the goalkeeper is controlled the same way is an inference; the catch is automatic Pending experiment | Compatible with Contract 1; per-team and per-player separation is imposed by our adapter | Re-checked |
| Bundled teams | Rule-based, with five tactical plans declared as an “uncalibrated design prior”; no learned model | Useful as a reference opponent | Not re-checked |
| Bundled data | No data files distributed. Code comments cite an unnamed K-League aggregate and a seven-match DFL sample; no coefficient is marked as validated with data | The provenance doubt is reduced, not removed; the question to the author stands | Re-checked |
| Export | Tracking per decision step and typed events, with contacts per physics sub-step | Basis for Contract 2 | Not re-checked |
| Own visualisation | Video with a fixed oblique camera, top-down minimap, sphere markers, gaze fan; report with pass and shot maps | Useful for internal review | Re-checked |
| Authors' statements | “Not an official laws-conformance product”; realism not established; no roadmap | A candidate, not a guaranteed base | Not re-checked |
footballworld has a tests/ folder and a CI workflow; its deeper suites are private according to its documentation. Declared dependencies: jax, numpy, filelock; the render extra adds imageio, matplotlib and pillow.step call returns no observation; observations come from separate observe calls. Normal full time is reported as “truncated”, not “terminated”.10 The picture
The visual target is progressive. Photorealism is an aspiration, never a promise. Each level must be measured before the next is attempted.
Our own viewer reads only Contract 2: lightweight, independent of the engine and publishable. Reference viewers exist in the candidate engines Verified from sources.
The hard problem is not the stadium or the faces: it is making the foot meet the ball at the recorded instant, without sliding, for 22 bodies.
Licences (provisional)
No licence text hosted by Epic has been read. According to indirect sources: rendered video would not generate a royalty; above a group-revenue threshold, paid seats would be required (the threshold and what counts towards it must be confirmed); Epic's free animation sample is marked as not usable for AI training. All of this must be confirmed on the primary text before any decision (risk R10; decision 11: keep copies of the licence texts).
11 The picture
How do we make sure that what a simulated player does is something a human body could do, so that it can be animated convincingly? Three candidate designs stay open. None is selected.
Important. Stages 1–3 use an engine with abstract bodies. That is not a choice of architecture A. If stage 4a or 5 moves to D-lite or D/E, the engine's movement model changes, and the engine tests (1b), the stage-2 scenario ladder and the acceptance criteria must be repeated on the new engine. That effort will be estimated in stage 4a Planning assumption.
12 Record and integrity
The sealed record is the authoritative source of the match and of everything rendered from it. Step through a short synthetic sequence to see how one pass is written down.
Illustrative example, not output from any run. Synthetic values, shortened hashes.
| File | Content | Frequency |
|---|---|---|
manifest.json | Match identity; versions and hashes of engine, rules, policies, rosters, attributes, tactical plan; seed commitment; hardware and library versions; hash root | Once |
state/*.bin (columnar) | Per tick: players (position, velocity, orientation, stamina, status), ball (position, velocity, spin, status), phase, clock, score | Physics rate |
ball_segments.jsonl | Ball trajectory as segments between contacts: initial state plus model parameters. Gives the exact position at any render instant | Per contact |
events.jsonl | Typed events with cause: contact, pass, shot, goal, foul, offside, card, substitution, restart | Per event |
decisions/*.bin | Per player and decision tick: observation hash, intent, action, random stream used | Decision rate |
referee.jsonl | Every decision with the rule applied and the values that triggered it | Per decision |
integrity.json | Hash per block, hash chain, root, signature | Once |
body_part_hint is a hint for animation, not a sporting fact, except when a rule depends on the body part (handball). The position tolerance (how far the animated pelvis may drift from the simulated point) is a contract parameter, to be measured.
Checks 1–3 do not depend on numerical reproducibility across machines; check 4 does, so it is reported separately.
Assuming 100 simulated minutes, 22 players × 12 float32 values, 10 ball values and 64 bytes of other data: ≈ 1.2 kB per tick; ≈ 70 MB at 10 Hz, ≈ 700 MB at 100 Hz, uncompressed. Full per-player observations, if stored instead of their hashes, would be a few GB per match. Record storage is negligible; video and intermediate frames are not.
The record contains no cameras. Any number of renders (wide shot, tactical camera, replays, commentary languages) can be produced from the same sealed record, and each video publishes the root hash of the record it came from.
13 Record and integrity
Because matches are computed before they are shown, somebody could run a hundred and publish the most exciting one. The protocol is designed to show that an official match was run once, with a seed nobody chose.
| Experimental simulation | Official match | |
|---|---|---|
| Purpose | Develop, train, tune, validate | Produce a sporting result published as such |
| How many | Unlimited | One per match |
| Seed | Any | Derived by this protocol |
| Manifest mark | class: experimental | class: official |
| Publication | Only as labelled test material | As a competition result |
| Can become official | Never, not even afterwards | Not applicable |
Announce the match identifier at the single official publication place, fixed in advance. One identifier admits one manifest; a second commitment with the same identifier voids it. A replay after a foreseen cause of voiding gets a new identifier, publicly linked to the voided one.
Without this rule, many manifests could be sealed privately and only the favourable one revealed: a timestamp proves something existed, not that it was the only one.
Match ID; exact engine and runtime versions; dependency-file hash; rule-profile hash; hashes of policies, rosters, attributes and tactics; hardware declaration; beacon specification (source, chain and a future round); derivation function; failure-rule version; validator hash and a closed list of voiding causes. The manifest does not contain the seed.
C = SHA-256( canonical manifest )
Published with independent timestamps, a declared minimum time before the beacon round. Proposed: publication at a place announced in advance plus two independent timestamps (RFC 3161 and OpenTimestamps). A git commit date alone proves nothing: its author sets it.
When the beacon publishes value B for the agreed round:
seed = SHA-256( "AIFL-SEED-v1" ‖ C ‖ B ‖ match_id )
reduced to the engine's key type. Anyone can recompute it. Proposed beacon: drand, quicknet network (3-second rounds, cited by round number, not by time); optional second beacon: NIST Randomness Beacon 2.0 (if two are used, the NIST pulse must precede the drand round).
Execute once in the declared environment. Causes for a technical replay are written down beforehand.
Publish the record's hash root within a declared time after the beacon round.
Publish the video with C, the beacon round and the record root.
Open condition. The protocol only prevents run-and-pick if the simulation is reproducible with the same seed Pending experiment. Reproducibility in the pinned environment is therefore an integrity condition, not a technical detail. Possible reinforcements: a short sealing window; a third party that re-runs from manifest and seed and compares the root; or a third party that runs the match. The principle is recommended by both reviewers; its parameters are still to be decided.
| Situation | Rule (written before the first official match) |
|---|---|
| Technical crash before the end | Re-run with the same seed and the same manifest; logged as an incident |
| The re-run does not match the earlier partial record | Reproducibility incident: the match is voided and published as voided. Accepting “the first run that finishes” would turn a provoked crash into a way to redraw |
| The crash always happens at the same point | Engine defect: match voided and published; nothing in the manifest is changed to “make it pass” |
| The beacon does not emit the agreed round | Use the fallback declared in the manifest (next available round or second beacon) |
| An engine defect is found after sealing | The result stands unless a voiding cause from the manifest's closed list applies, checked with the validator whose hash is in it. If voided: new identifier, new commitment, new round; the voided record is kept and published |
| A committed match never gets published | It counts, and is declared publicly |
The scheme matches the recipe NIST publishes for using its beacon (NISTIR 8213, 2019 draft, §7.2): commit in public to the hash of the program and its inputs, then derive the seed by combining that commitment with the beacon value. The same document requires that everything about the use of the future random number be specified in advance, and that the program be entirely deterministic given the beacon pulse and the other inputs.
Not verified: drand's current node count and threshold; any precedent of a sports body using these beacons (not searched). drand publishes no service-level agreement.
14 The plan
Eleven stages, three engineering gates. No stage is authorised; describing a stage does not authorise it. Select a stage to open its nine questions.
Weeks counted from a future authorisation to develop. These are not committed dates; beyond stage 3 no durations are given, because they depend on measurements that do not exist yet. A milestone reached is a technical result, not proof that the football is convincing.
Milestone weeks follow the favourable plan Planning assumption. H3 shows that the whole system runs; H4 shows whether the result meets quality criteria set in advance. Neither says anything about 3D.
Each stage has a maximum effort fixed before it runs. If it is consumed without passing the criterion, the stage stops and project direction decides. The numeric thresholds of each stage are registered in the repository, dated, before the stage runs, and shared with the promoters and the cross-review. They are not changed after results are seen; a justified change is recorded as a deviation.
Contracts 1 and 2; the integrity protocol; inventory of licensed motion data; legal reading of the licence texts; search for the animation specialist.
MESSI compatibility and CPU performance; configuring a 5-minute two-half match; per-player Brain separation; the chance-based referee; the upstream project changing or disappearing; failing to achieve minimum isolation; behaviour quality (the most likely cause of delay in weeks 6–16); AI tool usage limits; availability of the single lead-engineer role; availability of a specific cloud plan.
15 The plan
Three engineering decision points stand between the first 2D match and any large visual production. Each opens only the next named step, on technical criteria. No gate renews automatically.
Two technical stop points sit inside the stages themselves: after stage 2, if the football is not organised and believable; and after stage 5, if bodies cannot follow the simulation convincingly. Stage 4a can also end in a decision to settle for a stylised look.
16 The plan
At real pace a football match has roughly 2.7 goals in 90 minutes; in 5 minutes that is about 0.15 expected goals. The most likely score is 0–0.
Two options: (a) five minutes of real time: honest football with few chances; (b) a compressed format: more action, less realism. Recommended: (a), while also showing a batch of matches, or lengthening the demonstration. Project direction decides.
Approximate: 2.7 × 5 / 90 ≈ 0.15
Numeric thresholds are registered, dated, in the repository before stage 1b and shared with the promoters. They are not changed after results are seen.
| # | Criterion | How it is checked |
|---|---|---|
| A1 | 11 v 11 for about 5 minutes, in two halves with a change of ends | Record |
| A2 | Every player, goalkeepers included, is moved by our Brain through Contract 1 | Manifest |
| A3 | Decentralised decision-making | The four autonomy tests |
| A4 | No human intervention after kick-off | Decision log |
| A5 | Result not predetermined | Seed derived after the manifest is committed; and a batch of 20 or more seeds with event sequences distinct from each other and the score distribution declared |
| A6 | Repeatable | Same manifest and same seed give the same canonical record hash |
| A7 | Legal and without freezes | Independent validator: zero illegal states, zero freezes |
| A8 | Organised football | Metrics inside pre-declared bands taken from real football; blind review by three people with a median ≥ 3 out of 5 |
| A9 | Attributes matter | A pre-declared continuous metric (shots, territory, possession) favours the team with better attributes, with a sample size calculated in advance |
| A10 | Visible | The 2D viewer replays the match reading only the record; score and clock match it |
2D demonstrations of agents playing football already exist. The value of stage 3 is not the picture: it is that the Brain, the contracts, the record and the integrity are our own and verifiable. It will look like dots or simple figures on a pitch seen from above, with score, clock and events. Not like television.
17 The plan
The Mac is for writing, reviewing and supervising code. Everything that runs third-party code or simulations runs on an isolated Linux machine with no credentials from any other project. Start on CPU, without GPUs; add capacity only when a measurement justifies it.
8 GB is little for JAX compilation with 22 agents through a whole match Engineering hypothesis, and the Mac holds credentials of other projects that third-party code must never be able to reach. CPU builds of JAX exist for Apple processors Verified from sources, so a minimal test would be technically possible; it is not planned, for those two reasons.
Start with 16 GB and 4 dedicated vCPUs. The runbook caps each run at 12 GB, leaving headroom for the system with one run at a time. Move to 32 GB only if measurements in weeks 1–2 show that memory or time per match require it, or to run two matches in parallel. A dedicated cloud machine (runbook option C) is the preferred option: the simplest to isolate and to destroy.
| Stages | Need |
|---|---|
| 2, only if training were decided | Cloud GPUs by the hour. Not planned for the first phase |
| 4b | The same machine; long matches on CPU; possible move to 32 GB |
| 5–6 | GPU workstation and graphics engine |
| 6–8 | Rendering and frame storage; production effort measured in render seconds per frame (PV13) |
18 The plan
Stages 1–3 are software only: simulation, players' decision-making, a match record and a 2D viewer. Small teams, often academic, have built software players that play complete matches for years in RoboCup Verified from sources. The visual stage is different: it needs specialists that no AI tool replaces.
| Role | Responsibility |
|---|---|
| Lead engineer (role) | Architecture, AI Brain, agents, integration with the simulator, contracts, testing, debugging, infrastructure, technical control |
| AI engineering tools ChatGPT, Claude, Claude Code | Design, code generation and review, research, analysis, cross-review of documents. Engineering tools, not team members; they do not replace verification |
| Football adviser (optional) | Blind review of behaviour in stages 2 and 3 |
What this model does not solve: it concentrates knowledge in one role (risk R13); it does not replace the visual specialists; and its speed depends on how much the AI tools really accelerate the work, which is an assumption Planning assumption.
| Profile | Stages | Comment |
|---|---|---|
| Lead Technical Animation specialist (Unreal Engine, Motion Matching, inverse kinematics, rigging, sports animation) | 4a–9 | Critical and scarce profile. Part-time for the 4a study |
| Graphics-engine engineer | 5–9 | Importer, rendering, verification. May coincide with the above if the profile covers it |
| 3D artist | 6–9 | Players, kits, stadium |
| Motion capture | 5–6 | Studio or own equipment; assessed in 4a |
| Editing and sound | 6–9 | Direction, commentary |
| Legal adviser | Before gate C and before stage 7 | Licences, data, platform |
| Machine-learning engineer | Optional | Only if the rule-based Brain hits a ceiling and training is decided |
None of these profiles alone solves the visual problem: an editor is not a technical animator, and a technical animator does not replace motion data.
19 Evidence
Two risks are critical and both are tested at the smallest possible scale first. The largest risk of all is not technical: whether audiences care.
20 Evidence
Possible with existing technology
11 v 11 simulation with rules; decentralised rule-based agents; recording and sealing; 2D visualisation; high-quality offline rendering.
Requires original development
The two contracts and their adapters; our own Brain; validator and metrics; 2D viewer; integrity protocol; referee corrections; feasibility audit; the skill layer for D-lite.
Requires research
Believable football through a whole match; animation constrained by imposed contacts for 22 bodies; automatic production without manual correction.
Not publicly demonstrated by anyone
Learned agents controlling all 22 with complete rules for 90 minutes; video of a full match faithful to a simulation at broadcast quality.
The search was not exhaustive.
soccerworld findings to the tagged release) are recorded and superseded, not rewritten.21 Evidence
Questions that cannot be answered without executing something. They are not resolved now; each has an experiment designed in advance, and its thresholds are fixed before the experiment runs.
| # | Question | Experiment | Metric and sample | Decision it changes | Stage |
|---|---|---|---|---|---|
| PV1 | Does the engine start, complete matches and repeat results? | Batch of short matches in an isolated environment | Completion, illegal states, freezes, hash on repetition; pre-declared batch | Keep this engine or change | 1b |
| PV2 | Can a 5-minute match with two halves be configured? | Configuration reading and one test | Yes or no | Format of the first product | 1b |
| PV3 | How long does a match take, and how much memory? | Stepped measurement over several durations, repeated | Time and memory per step; upper bound of the prediction | Batch size; CPU viability | 1b |
| PV4 | How much slower is separating the Brain per player than evaluating it as a block? | Measure both | Time per step | Adapter design | 2 |
| PV5 | Are rule-based agents enough for organised play? | Scenario ladder and blind review | Metrics against real bands; three reviewers | Stop, or open learning research | 2 |
| PV6 | How much does chance weigh in the result? | Batches with controlled seeds and attributes | Result variance attributable to draws | Urgency of fixing the referee | 2–3 |
| PV7 | What share of simulated contacts can a body execute? | Feasibility audit on records | Percentage inside the human envelope | A versus D-lite or D/E | 4a |
| PV8 | How many distinct movements are needed? | Inventory study, then prototype | Repertoire covered; perceived repetition | Volume of capture needed | 4a–5 |
| PV9 | Does the tactical layer survive a change of movement engine? | Connect the same Brain to two skill layers | Difference in plausibility metrics | Effort of moving to D-lite or D/E | 4a–5 |
| PV10 | Is it reproducible across machines? | Same seed in two environments | Canonical hash | Whether the official protocol needs an external witness | 1b (informative) and 4b |
| PV11 | Can the exact chosen clip be replayed without correction? | Minimal sequence in D-lite | Position correction needed per contact | Viability of D-lite | 5 |
| PV12 | Can Unreal act as a deterministic, render-free host? | Repeatability test of a scene with 22 characters | Equality between runs | Viability of D/E inside Unreal | 5 |
| PV13 | How many seconds does one frame take at level N0? | Measurement on the stage-5 sequence | Render seconds per frame | Production effort per match | 5–6 |
| PV14 | Does the audience care? | Not designed. Not an engineering experiment | None yet | Whether there is a viable product | 3 and 6 |
22 Evidence
Engineering decisions for project direction. Only one of them (decision 7) would open any execution, and only a first, isolated step.
Already set by project direction: Mac for coding only; isolated Linux on CPU; the visual stage kept separate and gated.
| # | Decision | Recommendation |
|---|---|---|
| 1 | Accept this blueprint as a basis, after cross-review | The cross-review is by an AI tool, not an independent human review; consider one before commitments to third parties |
| 2 | Definition and tests of autonomy | Approve |
| 3 | What “5 minutes” means in the first product | Real time, also showing a batch; accept that 0–0 is likely |
| 4 | Acceptance criteria of the first product | Approve or adjust |
| 5 | Candidate engine for stage 1 | footballworld at the pinned commit |
| 6 | Execution machine | Linux with 16 GB and 4 dedicated vCPUs, in a provider account exclusive to the project; 32 GB only after measuring |
| 7 | Authorise step 1a: create the machine and prove isolation, with no third-party code | A decision after the review; the only one on this list that opens execution. Step 1b requires a separate GO once 1a has passed |
| 8 | Chance-based referee | Accept it in the first product, declared; correct it in stage 4b |
| 9 | Three engineering gates, A, B and C | Approve |
| 10 | Quality level of the first short visual match (stage 6) | N0 |
| 11 | Keep copies of Epic's licence texts | Yes |
| 12 | Consult the MESSI author | Yes; non-blocking |
| 13 | Parallel work without execution | Authorise what involves no execution |
Numbering is local to this page. Non-engineering decisions are handled outside this document.
23 Evidence
24 Evidence
quicknet; NIST Randomness Beacon 2.0 (cited by name).This page is built on the v1.3 basis. Earlier versions (v1.1, v1.2) are superseded and kept unchanged as history; G0.1 document 08 is superseded by the open-decisions list. Architecture and research are unchanged from v1.2.