Public knowledge base
doHockey documentation
Guides and practical help for coaches, teams, players and trainers.
How we test indoor and outdoor matches
Changes to doHockey must keep working during match preparation and coaching. We therefore use one fixed scenario for indoor and outdoor hockey to repeat the same checks before a larger update.
Automatic testing with AI
On request, an AI agent can run the scenario automatically through the user interface. The agent operates the browser like a user: opening screens, entering information, saving, reloading and checking what is actually visible.
The scenario starts on request. The agent then runs the checks and automatically updates the report and public summary with sanitised screenshots. Each report records test date and time, timezone, tested versions, visible builds and limitations. The public update is included when the support website is published. The test does not yet start automatically on every release. Steps that cannot be executed or need human help are recorded in the result. The developer retains the release decision.
One check for both kinds of hockey
The same match steps are run for indoor and outdoor hockey, using the match’s formation, player count, periods and duration. Indoor checks use the default of two 20-minute halves. Outdoor checks use the configured outdoor duration.
| Area | What do we check? |
|---|---|
| Players and positions | Preferences survive saving. Indoor and outdoor preferences stay separate for players who play both variants. |
| Attendance | Absent players are not automatically selected or scheduled. |
| Lineup | Manual and automatic selection work with the correct positions and no duplicate players. |
| Substitution schedule | Every playing block is filled and pitch and bench turns connect correctly. |
| Playing time | Minutes match the duration and position coverage. An incomplete plan must not appear complete. |
| Match clock | Starting, pausing, resuming and finishing produce the correct time and status. |
| Events | Goals, cards and other match moments are recorded correctly. |
| Later corrections | Editing a goal updates intermediate and final scores. A card does not change the score. |
| Reopening | The lineup, schedule and match information survive reloading. |
Smaller-screen layouts, Dutch and English wording and the match PDF are also part of the scenario.
Results with screenshots
For each step, the agent records whether the check passed, failed, was blocked or was not tested. Screenshots show what was on screen. A successful click alone is insufficient: the saved result is reviewed again.
The combined report distinguishes indoor and outdoor, earlier checks and the latest retest. Missing or unexecuted checks remain visible. The public summary below derives from the latest final report. Account details, player names, test codes and internal details have been omitted.
Latest report — 31 October 2026, new indoor and outdoor test
Result: NO-GO. New teams and players were used to check squad limits, indoor and outdoor preferences, lineups, substitution plans and several live actions. Two short test matches were completed and score corrections remained visible after reload. After converting a prepared outdoor match to indoor, the attendance step could not be loaded, including after retry. Further checks, including the contents of fresh PDFs and the public viewer, remain untested.
The check ran approximately 19:48 to 20:30 CET (UTC+01:00), in English, with Platform v0.127.0 #1857 and AI Engines v0.127.0 #3772. The displayed build date was 31 October 2026 at 19:46; its timezone is unknown. Full normal match duration was excluded on request and remains to be checked manually. This summary is prepared and has not been verified online.

During a continuation, the same loading message remained visible after waiting another 20 seconds and also appeared in a second match after the same variant change. Additional checks confirmed manual lineup entry and reload for both match types and the indoor limit with a stand-in goalkeeper. The cause of the loading message remains unconfirmed; parts of the scenario are still open.
Further checks confirmed mobile recovery of incomplete indoor and outdoor lineups and the outdoor limit with a stand-in goalkeeper. Fresh match PDFs were inspected: six indoor and five outdoor reserves are visible. The indoor PDF incorrectly labels the halves “Quarter”; other checks remain open.
An additional post-substitution check found that the PDFs retained the original starters. The cover of one indoor PDF showed only five of six starting reserves, while the schedule in that file showed all six.
An additional attendance check retained an absence after reload outdoors. Indoors, an absent player appeared selected again after saving and reloading. The reverse change from indoor to outdoor retained the outdoor settings and selection.
The mobile position controls remained reachable with a long stand-in name; the choices and a new substitution plan survived reload. The heading was truncated on the narrow screen.
Previous report — 31 October 2026, indoor and outdoor
Result: NO-GO. New teams and players were tested for indoor and outdoor hockey. Position preferences remained independent after editing and clearing each variant. Squad limits, including a stand-in goalkeeper, were checked; switching an outdoor match to indoor retained the oversized selection and blocked planning. Setup temporarily showed the old field-player count. Separate short indoor and outdoor matches were completed; corrections produced 4–3 in both and remained visible after reload. Indoor halves are incorrectly labelled as quarters and one untranslated key is visible. Some checks, including the contents of newly generated PDFs and the public viewer, remain untested.
The check ran approximately 18:25 to 19:31 CET (UTC+01:00), in English, with Platform v0.127.0 #1857 and AI Engines v0.127.0 #3772. The displayed build date was 31 October 2026 at 18:24; its timezone is unknown. Full match duration was excluded on request and remains to be checked manually. This summary is prepared and has not been verified online.

Previous report — 31 October 2026, new team check
Result: NO-GO. A new indoor team was created with formation 2-1-2 selected, but the team overview displayed 4-3-3 after saving. The remaining indoor and outdoor core checks were not performed. Whether the separate indoor setting was retained was not established.
The check ran approximately from 18:03 to 18:04 CET (UTC+01:00), in English, with visible Platform v0.127.0 #1857 and AI Engines v0.127.0 #3762. The displayed build date was 31 October 2026 at 16:50; its timezone is unknown. No screenshot file was retained. Full-duration endurance was excluded at the user’s request and remains pending manual verification. This summary is prepared and has not been verified online.
Previous report — 31 October 2026, continued retest
Result: NO-GO. Automatic filling worked again for an empty indoor lineup. An away goal, a card and a score correction were processed in a short test match, but the match-end description retained an old score. After live use, a stand-in’s match position was no longer recognised. Manual lineups were checked at both squad sizes; several other core checks remain incomplete.
The check ran approximately from 16:50 to 17:43 CET (UTC+01:00), in English, with visible Platform v0.127.0 #1857 and AI Engines v0.127.0 #3762. The displayed build date was 31 October 2026 at 16:50; its timezone is unknown. Match PDFs were retained internally; no screenshot files were retained for this check. This summary has not been verified online.
Previous report — 31 October 2026, retest
Result: NO-GO. After clearing an indoor lineup, automatic filling remained blocked by a message about non-selected players. The remaining core checks were not run.
The check ran approximately from 16:45 to 16:47 CET (UTC+01:00), in English, with visible Platform v0.127.0 #1857 and AI Engines v0.127.0 #3762. The displayed build date was 31 October 2026 at 16:45; its timezone is unknown. No screenshot file was retained for this check.
Previous report — 31 October 2026
Result: NO-GO. A spectator’s match position survived reload for indoor and outdoor. Automatic filling of an empty indoor lineup then failed twice; the remaining core checks were not completed.
The check ran approximately from 16:25 to 16:31 CET (UTC+01:00), in English, with visible Platform v0.127.0 #1857 and AI Engines v0.127.0 #3762. The displayed build date was 31 October 2026 at 16:25; its timezone is unknown. No screenshot file was retained for this check.
Previous report — 31 October 2026, focused retest
Result: NO-GO. Saving a stand-in’s match position at the outdoor squad limit failed again. The deployed revision of the underlying correction could not be confirmed, so the full regression was not resumed.
| Report metadata | Observed value |
|---|---|
| Test time | Approximately 16:18 CET, 31 October 2026 (UTC+01:00); exact seconds unknown |
| Interface / report language | English |
| Portal / API | 0.127.0 build 1857 / 0.127.0 build 3754 in the retained session; current API revision unconfirmed |
| Displayed build time | 31 October 2026, 16:12; display timezone unknown |
| Screen | Desktop Chrome; mobile not reached |
| Summary prepared | Approximately 16:19 CET |

The crop was reviewed for privacy. A new check is needed after the tested revision is confirmed. This summary has not been verified online.
Previous report — 31 October 2026, outdoor retest
Result: NO-GO. With sixteen selected outdoor players, a stand-in’s match position could not be saved. The full regression stopped at this finding; remaining indoor/outdoor, mobile, live-match and fresh PDF checks are incomplete.
| Report metadata | Observed value |
|---|---|
| Test time | Approximately 16:14–16:15 CET, 31 October 2026 (UTC+01:00); exact seconds unknown |
| Interface / report language | English |
| Portal / API | 0.127.0 build 1857 / 0.127.0 build 3754 |
| Displayed build time | 31 October 2026, 16:12; display timezone unknown |
| Screen | Desktop Chrome; mobile not reached |
| Summary prepared | Approximately 16:16 CET |

The crop was reviewed for privacy. A local correction is prepared and requires a new deployed UI test. This summary has not been verified online.
Previous report — 31 October 2026, outdoor check
Result: NO-GO. The focused indoor playing-time retest passes. In the outdoor check, a stand-in counted towards a full squad but the newly chosen match position disappeared. The full regression stopped; remaining indoor/outdoor, mobile, live-match and fresh PDF checks are incomplete.
| Report metadata | Observed value |
|---|---|
| Test time | Approximately 16:08–16:09 CET, 31 October 2026 (UTC+01:00); exact seconds unknown |
| Interface / report language | English |
| Portal / API | 0.127.0 build 1857 / 0.127.0 build 3754 |
| Displayed build time | 31 October 2026, 16:07; display timezone unknown |
| Screen | Desktop Chrome; mobile not reached |
| Summary prepared | Approximately 16:11 CET |

The privacy-reviewed crop shows the limit, not the lost position. A local correction is prepared; a new deployed UI check remains necessary. This summary has not been verified online.
Previous report — 31 October 2026, continued check
Result: NO-GO. The previous stand-in error passed the focused indoor boundary retest. The playing-time table then showed eight reserve rounds each for six players outside the selected squad. The full run stopped at this finding; outdoor, mobile, live match and fresh PDF checks are incomplete.
| Report metadata | Observed value |
|---|---|
| Test time | Approximately 16:00–16:02 CET, 31 October 2026 (UTC+01:00); exact seconds unknown |
| Interface / report language | English |
| Portal / API | 0.127.0 build 1857 / 0.127.0 build 3754 |
| Displayed build time | 31 October 2026, 15:59; display timezone unknown |
| Screen | Desktop Chrome; mobile not reached |
| Summary prepared | Approximately 16:03 CET |

The crop was reviewed for privacy. A local correction is prepared and requires a new deployed UI test. This summary has not been verified online; earlier reports retain their scope.
Previous report — 31 October 2026, post-update retest
Result: NO-GO. The previous prepared-screen count label passed the focused indoor retest. The full regression then stopped: adding a stand-in to a full indoor squad produced a generic error. The same stand-in could be added after freeing one place. Outdoor, mobile, live match and fresh PDF checks remain incomplete.
| Report metadata | Observed value |
|---|---|
| Test time | 15:53:23–approximately 15:55 CET, 31 October 2026 (UTC+01:00) |
| Interface / report language | English |
| Portal / API | 0.127.0 build 1857 / 0.127.0 build 3754 |
| Displayed build time | 31 October 2026, 15:52; display timezone unknown |
| Screen | Desktop Chrome; mobile not reached |
| Summary prepared | Approximately 15:56 CET |

The crop was reviewed for privacy. A local correction is prepared and requires a new deployed UI test. This summary has not been verified online; earlier reports retain their original scope.
Previous report — 31 October 2026, afternoon check
Result: NO-GO. In the indoor check, the prepared match overview labelled the selected squad count as the number present. Attendance and selection must remain distinguishable. The run stopped at this finding; the full indoor/outdoor regression, mobile, live match and fresh PDF checks are incomplete.
| Report metadata | Observed value |
|---|---|
| Test time | Approximately 15:34–15:37 CET, 31 October 2026 (UTC+01:00); exact start second unknown |
| Interface / report language | English |
| Portal / API | 0.127.0 build 1857 / 0.127.0 build 3754 |
| Displayed build time | 31 October 2026, 15:25; display timezone unknown |
| Screen | Desktop Chrome; mobile not reached |
| Summary prepared | 31 October 2026, approximately 15:38 CET |

The screenshot is an inspected crop of the actual interface. A local correction is prepared and requires a new deployed UI test. This summary has not been verified online. Earlier reports retain their original scope.
Previous report — 31 October 2026, post-update retest
Result: NO-GO — reserve-list visibility remains incomplete. The clearer missing-position warning and six-reserve count now pass the focused desktop observation. The actual list still shows five reserves and a lower green completion banner says five will become reserves. The complete indoor/outdoor regression stopped here; remaining checks have no new acceptance.
| Report metadata | Observed value |
|---|---|
| Test start / last screenshot | 14:36:14 CET / 2026-10-31T14:37:19+01:00, 31 October 2026 (UTC+01:00) |
| Report/interface language | English |
| Portal / API | 0.127.0 build 1857 / 0.127.0 build 3715 |
| Displayed build time | 31 October 2026, 14:35; display timezone unknown |
| Screen | Desktop Chrome; mobile not reached |
| Summary prepared | 2026-10-31T14:39:40+01:00 |

The screenshot is a privacy-reviewed crop of the actual interface; values are unchanged. A local follow-up makes every selected reserve visible and removes the conflicting completion advice while positions are missing. This follow-up has no deployed UI acceptance yet. Outdoor, mobile, live-match and fresh PDF checks remain outstanding. Summary prepared for a future support-site publication; not newly verified online. Earlier reports below retain their original scope.
Previous report — 31 October 2026, early afternoon
Result: NO-GO — indoor substitution planning is blocked. The new full regression stopped at this finding. Outdoor and remaining checks have not been accepted in this run. The earlier targeted results below keep their original scope.
| Report metadata | Observed value |
|---|---|
| First recorded clock / last evidence | 14:13:21–14:18:31 CET (UTC+01:00); preparation began earlier, exact start unrecorded |
| Report and interface language | English |
| Portal / API | 0.127.0 build 1857 / 0.127.0 build 3715 |
| Displayed build time | 31 October 2026, 12:25; displayed timezone unknown |
| Screen | Desktop Chrome; mobile not reached |
| Summary prepared | 2026-10-31T14:25:18+01:00 |
With twelve selected indoor players, the manually completed lineup reports six starters but only five reserves. A selected player without indoor positions remains counted at Attendance. Continuing produces the error below and prevents saving a substitution plan. Missing positions need a clear explanation naming the affected player and a way to set match positions or change selection. Preferences from another variant must remain separate.

This is a privacy-reviewed crop of the actual error banner. A local correction is prepared; it has no new deployed UI acceptance. Complete indoor/outdoor, mobile, live-match and PDF checks remain outstanding. This summary is prepared for a future support-site publication; it has not been verified online.
Previous targeted report — 31 October 2026, morning
Result: PASS for the listed indoor/outdoor repair checks. No known blocking finding remains within this tested scope. This is a targeted close-out, not a claim that every optional scenario or physical device was tested.
| Report metadata | Observed value |
|---|---|
| Final check date | 31 October 2026 |
| Recorded final check window | 08:47:08–08:48:16 CET (UTC+01:00) |
| Report and interface language | English |
| Portal version | 0.126.0, build 1857 |
| API version | 0.126.0, build 3700 |
| Final Portal build timestamp shown in the UI | 31 October 2026, 08:45 CET |
| Execution | AI-operated browser checks, started on request |
| Screens | Desktop Chrome and a mobile browser preview |
| Reporting | Public summary and privacy-reviewed screenshots updated as part of the requested run |
Accepted results
| Check | Result | Verification |
|---|---|---|
| Separate indoor/outdoor preferences | PASS | An empty outdoor preference set stays empty; indoor preferences are not reused. UI and the downloaded match PDF agree. Checked again after the final update. |
| Mobile plan recovery | PASS | Create a new substitution plan after preparation changes, then save, finish and reload. Accepted in the preceding repair round. |
| Stand-in selection | PASS | A present but unselected stand-in stays outside the plan, bench, playing-time totals and newly generated match PDF. Accepted in the preceding repair round. |
| Public match labels | PASS | Indoor/outdoor names and green, yellow and red card headings are readable in English. Accepted in the preceding repair round. |
| Reload and completed result | PASS | The final preference result survives reload; planned playing time and the completed 4–3 result remain unchanged. |
Actual screenshots
These are crops of the real browser observations from 31 October. Only the crop boundaries changed; the displayed values were not reconstructed or retouched. Names, accounts and browser addresses are outside the published crops.
Preference comparison. The player has no outdoor preferences. The display correctly shows P1/P2/P3 at 0%, Unknown at 58% and Bench at 42%, matching the match PDF. Playing time remains 40:50 and bench time 29:10 out of 70:00. “Unknown” here means no preference was entered for this variant; it does not mean playing time is missing.

Mobile plan recovery. The mobile screen exposes the action to create a substitution plan, alongside the existing review and export controls.

Completed result. The final check retains the completed 4–3 score.

Scope and limitations
The final targeted check confirmed the empty-variant correction and agreement with the actual PDF downloaded in the preceding repair round. It did not create another PDF or repeat all earlier checks. The preceding round covered mobile plan recovery, stand-in exclusion and public labels. Earlier profile, lineup, squad-limit, timing and historical-score checks retain their original scope.
Mobile checks used a browser preview, not a physical phone. Optional media upload/deletion, every device and every administrator/error/install state were not included. Automatic browser execution and report preparation happen after a request; this is not an unattended test on every release. A human still decides whether to release a change.