πŸ›°οΈ OPERATION ASTANA

// IOAI 2026 Β· ASTANA, KAZAKHSTAN Β· TEAM ZIMBABWE πŸ‡ΏπŸ‡Ό

Train the operator,
not the engineer.

One skill, drilled under contest rules until it's automatic: driving Gemma to a scoring submission. No theory. No lessons. Drills with a scoreboard.

–
:
–
:
–
:
–
until wheels-down Β· Aug 2, 2026
πŸ”’ LOCK IN: playbook re-validated Jul 22 vs the REAL bot (Gemma 4 E4B) β€” final run-in plan in plan/01_lock_in.md βœ… Drills #1–3 ALL validated vs gemma-4-31b-it πŸ€– Official chatbot live & verified β€” chat.ioai2026.kz 🧭 GALBOT practice window ended Jul 22 β€” may reopen, watch Discord πŸ“‹ Rules re-audited Jul 11 β€” see Intel

01 The Strategy

GAITE is designed for chatbot-driven solving: Gemma 4, 2000-token replies, generous chat access (exact quotas TBA β€” confirm at the Aug 3 practice round), hints allowed, its own scoreboard. Heavy chatbot use isn't a hack β€” it's the intended playstyle. So the prep trains exactly that.

S1

Validate the route

Viktor solves all 3 At-Home Tasks using only prompts to Gemma 4 β€” no expert knowledge injected. Output: paste-ready prompt scripts per task.

All 3 tasks βœ“ done
S2

One-page playbook

10 prompt templates + 5 recovery moves, validated live vs Gemma 4. Short enough to memorize. Lives at plan/playbook.md in the repo.

βœ“ done β€” plan/playbook.md
S3

Drills, 2–3Γ—/week

45 min: Colab + Gemma + drill card β†’ submit to the Kaggle leaderboard. Review after: max 3 corrections. The leaderboard is the honest signal.

Jul 14 β†’ Aug 1
S4

Dry runs

Yandex Contest example task (the real on-site platform), one timed mock contest day, and a GALBOT Team Challenge practice session.

late Jul

Ground rules β€” every drill runs under contest conditions

  • One chat = one job. Fresh chat per subtask; paste the briefing (P0) at the top each time.
  • Ask in chunks: "Code only, max 30 lines." Treat replies as capped at 2000 tokens.
  • Baseline Improvement Loop: run baseline β†’ diagnose β†’ ask for ONE targeted change β†’ verify β†’ measure β†’ keep or revert.
  • Anything looked up twice goes into plan/snippets.md.

02 The Three Home Tasks

Contest Day 1's three tasks will each connect to one of these. Master these, master the contest.

πŸ”Š

Task 1 β€” Operation Night Watch

Audio Β· continual learning Β· on Kaggle

A 16-class audio classifier (AST) must learn 13 new classes without forgetting the old 16. Score = Β½Β·old accuracy + Β½Β·new accuracy β€” forgetting costs as much as failing.

  • The whole game: replay mixing (new classes have only 24–60 clips each)
  • ⚠️ Label noise in classes 3/7 (cow vs sheep) & 11/15 (thunderstorm vs rain)
  • ⚠️ Kaggle data has no val split β€” predict on submission.csv paths
  • Community score to beat: ~87%
β–Έ Drill card ready β€” run end-to-end on Kaggle βœ… val 93.5% Β· public LB 0.808
πŸ€–

Task 2 β€” Robot Delivery Academy

Behavioral cloning Β· on Kaggle

A robot on an 8Γ—8 grid learns pick-up-and-deliver from expert demonstrations only (observation β†’ action). Officially supervised learning β€” not RL.

  • Baseline flattens the grid β€” their own hint: use a small CNN instead
  • Rare actions (pickup/dropoff) under-learned β†’ class weighting
  • 🚫 No search/planning, no extra expert trajectories, no frame stacking
  • Geometric augmentation (rotate/flip) = community-accepted
β–Έ Drill card ready β€” validated βœ…
🧩

Task 3 β€” Interactive

Local notebooks only Β· not on Kaggle

20 Questions vs an LLM oracle (1,472 animals, 559 questions, 15 queries). Run locally; a Yandex Contest hosting is "being worked on". Pretrained models (incl. LLMs & embeddings) are allowed.

  • πŸ”„ Notebook fixed Jul 9 (fp16 + batching) β€” re-download it; precompute is now minutes, not the old ~1.5 h
  • The intended trick: precompute the oracle's answers offline (costs no budget)
  • 20-minute limit = train + inference together (official ruling)
β–Έ Drill card ready β€” validated βœ…

03 Drill #1 β€” The Play βœ… VALIDATED 2026-07-11 vs gemma-4-31b-it

Home Task 1, start to Kaggle submission, in 6 prompts. Every prompt below was tested live against Gemma 4 and produced correct working code. Time box: 45 minutes.

⚠️ The one rule that saves your score: Gemma 4 "thinks out loud" β€” pages of bullet-point reasoning before the code. With the 2000-token reply cap, the rambling can cut off your code mid-line. Every prompt must end with:
Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no bullet points.
If a reply still truncates: "Continue the code from the last line."

Setup (once, ~1 min)

  1. Tab 1: aistudio.google.com β†’ model dropdown β†’ Gemma 4 (same family as the contest bot).
  2. Tab 2: the task notebook in Colab (from the Kaggle competition) β†’ Runtime β†’ T4 GPU.
  3. Run the baseline top to bottom. Write down the baseline score.
P0

Briefing β€” paste at the top of every new chat

I'm working in a Colab notebook. I have a Hugging Face `ASTForAudioClassification` checkpoint trained on 16 audio classes, loaded from a local folder. I must extend it to 29 classes (16 old + 13 new) and fine-tune on ~10 GPU minutes without forgetting the old classes. Data: `train.csv` (old classes) and `fine_tune.csv` (new classes), columns include filepath, target, split. Metric: mean of old-class accuracy and new-class accuracy.
P1

Grow the head (16 β†’ 29 outputs)

Write code that replaces the model's 16-output classifier head with a 29-output head, copying the original 16 rows of weights and bias into the first 16 outputs and randomly initializing the rest. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no bullet points.
P2

Combined dataset

Write a PyTorch Dataset that loads both CSVs' train splits into one dataframe, loads each audio file with librosa at 16 kHz, and returns the AST feature extractor's output plus the integer label. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no bullet points.
P3

Training loop with replay

Write a training loop (AdamW, lr 1e-5 for the encoder and 1e-3 for the head, ~3 epochs, batch size 8) over a mix of ALL new-class training clips and an equal number of randomly sampled old-class clips per epoch, so the model learns new classes without forgetting old ones. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no bullet points.
P4

Score it

Write evaluation code that predicts on the val splits of both CSVs and prints accuracy on old classes (targets 0-15), accuracy on new classes (targets 16-28), and their mean. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no bullet points.
P5

Kaggle submission (Kaggle has no val split β€” predict straight on submission.csv paths)

Write code that runs the model on every filepath listed in the Kaggle `submission.csv`, writes the predicted class index into its target column, and saves it. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no bullet points.

πŸ›  Recovery moves

  1. Any error β†’ new message: paste the FULL traceback + the failing cell. "Fix this. Code only."
  2. Shape mismatch β†’ add: "The model expects input shape X; my batch is shape Y" (print both first).
  3. CUDA out of memory β†’ "Rewrite with batch size 4 and gradient accumulation of 2. Code only."
  4. Too slow for 10 min β†’ "Freeze all encoder layers except the last 2 blocks. Code only."
  5. Score too low β†’ paste P4 numbers: "Old acc X, new acc Y. Give me ONE change to improve the weaker side. Code only."
  6. Undefined variable in a snippet β†’ "Define X too. Code only." (Gemma sometimes assumes processor/train_df exist.)

⚠️ Known traps β€” don't burn time here

  • Classes 3/7 & 11/15 have label noise β€” some errors there aren't your fault.
  • 20 submissions/day. Target: beat ~87%.
  • New classes: only 24–60 clips each β€” replay mixing (P3) is the whole game.
  • Free-tier API/chat sometimes 500s β€” just resend, it's not your prompt.

πŸ““ After the drill (2 min)

Log: baseline score β†’ your score β†’ Kaggle LB position β†’ what broke β†’ which prompt saved you. DM Viktor for review (max 3 corrections).

04 Drill #2 β€” Robot Delivery βœ… VALIDATED 2026-07-11 vs gemma-4-31b-it

Home Task 2, start to Kaggle submission, in 6 prompts. Behavioral cloning on an 8Γ—8 grid β€” the baseline flattens the grid into an MLP; you replace it with a small CNN + class weights + action masking. Time box: 45 minutes. Full card with all traps: drill_02_robot.md.

⚠️ New quirk on this task: Gemma sometimes writes a draft code block, critiques it, then writes the final one β€” if a reply has two code blocks, use the LAST one. Every prompt ends with:
Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no draft versions, no bullet points.
Hard rules (official): supervised only β€” no RL, no BFS/A*, no extra expert trajectories, no frame stacking.

Setup (once, ~2 min)

  1. Tab 1: aistudio.google.com β†’ Gemma 4. Tab 2: the task notebook in Colab (from the Kaggle competition) β†’ Runtime β†’ T4 GPU.
  2. Run ALL baseline cells; write down the MLP success_rate β€” that's your baseline to beat (community: plain BC β‰ˆ76%, with these fixes β‰ˆ91%).
P0

Briefing β€” paste at the top of every new chat

I'm working in the official IOAI 'Robot Delivery Academy' Colab notebook. A robot on an 8x8 grid must pick up a package at one depot and deliver it to another. I train by behavioral cloning on expert demonstrations only (pure supervised learning β€” no RL, no search or planning). Each observation is a dict: obs['grid'] is a numpy array of shape (6, 8, 8) (channels: walls, depots, robot, package, destination, carrying flag), obs['vector'] is 13 floats, obs['action_mask'] is 6 booleans marking valid actions. Actions 0-5 = south, north, east, west, pickup, dropoff. The notebook already defines: train_trajectories (list of dicts, each with 'observations' and 'actions' lists), valid_scenarios, test_scenarios, DEVICE, ACTION_NAMES, run_episode(scenario, action_fn), evaluate_action_model(scenarios, action_fn, limit) which returns a dict with success_rate/avg_steps/avg_invalid_pickup_or_dropoff/results, generate_predictions(scenarios, action_fn, limit), and save_predictions_zip(predictions, path). The baseline flattens the grid into an MLP; I am replacing it with a small CNN.
P1

Dataset that keeps the grid shape

Write a PyTorch Dataset class GridDemoDataset that collects every (observation, action) pair from all trajectories in train_trajectories and, for one index, returns four tensors: the grid as float32 of shape (6, 8, 8), the vector as float32 of shape (13,), the action_mask as bool of shape (6,), and the action as a long. Then create grid_dataset = GridDemoDataset(train_trajectories) and grid_loader = DataLoader(grid_dataset, batch_size=128, shuffle=True). Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no draft versions, no bullet points.
P2

Small CNN (the notebook's own hint)

Write a PyTorch nn.Module named CNNActionModel whose forward takes (grid, vector): two Conv2d layers on the (6, 8, 8) grid (6->32 then 32->64 channels, kernel 3, padding 1, ReLU after each), flatten, concatenate the 13-feature vector, then Linear to 128 with ReLU and Linear to 6 action logits. Then create cnn_model = CNNActionModel().to(DEVICE) and print the parameter count. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no draft versions, no bullet points.
P3

Train with class weights + masked logits (rare pickup/dropoff decide success β€” weight them)

My grid_loader yields four tensors per batch in this order: grid (B, 6, 8, 8) float, vector (B, 13) float, action_mask (B, 6) bool, action (B,) long β€” and cnn_model's forward is called as cnn_model(grid, vector). Write a training loop: 30 epochs, Adam lr 1e-3. First collect all action labels by iterating grid_dataset (the fourth element of each sample), use torch.bincount to count the 6 actions, and build class weights = 1/counts, normalized, for nn.CrossEntropyLoss so rare pickup/dropoff actions are not under-learned. In each batch compute logits = cnn_model(grid, vector), then set logits where action_mask is False to -1e9 before the loss. Print the average loss every 5 epochs. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no draft versions, no bullet points.
P4

Full-episode eval + failure split (action accuracy β‰  episode success β€” only success_rate counts)

Write, in one short script: a function cnn_action(obs) that makes float32 tensors from obs['grid'] and obs['vector'] on DEVICE each with unsqueeze(0), runs cnn_model(grid, vector) in eval mode under torch.no_grad, sets logits where obs['action_mask'] is False to -1e9, and returns int(logits.argmax()). Then cnn_eval = evaluate_action_model(valid_scenarios, cnn_action, limit=100); print success_rate, avg_steps, avg_invalid_pickup_or_dropoff. Then from the failed results in cnn_eval['results'] print how many have no action 4 in r['actions'] (failed before pickup) and how many do (failed after pickup). Code only, max 25 lines. Reply with ONLY a single python code block and nothing else β€” no explanation, no reasoning, no plan, no draft version, no self-check, no line counting. Write the final code directly.
P5

Kaggle submission (predictions.zip)

Write code that generates the Kaggle submission: test_predictions = generate_predictions(test_scenarios, cnn_action, limit=None), then save_predictions_zip(test_predictions, 'predictions.zip'), then open predictions.zip with zipfile, read predictions.jsonl and print its first line and the total line count to verify the format. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no draft versions, no bullet points.

πŸ›  Recovery moves

  1. Any error β†’ paste the FULL traceback + failing cell. "Fix this. Code only."
  2. Two code blocks in one reply β†’ use the LAST one (Gemma drafts, then finalizes).
  3. Undefined variable β†’ "Define X too. Code only."
  4. SR barely beats baseline β†’ paste P4 numbers: "success_rate X, Y failures before pickup, Z after. Give me ONE change to fix the bigger failure mode. Code only."
  5. Slow / near 20 min β†’ "Rewrite with 15 epochs and batch size 256. Code only."

⚠️ Known traps β€” don't burn time here

  • No BFS/A*, ever β€” even "just for data". Greedy walk-toward-target heuristics off the obs direction features = violation (some suspicious 99%+ LB scores likely do this β€” don't chase them).
  • #1 community failure mode: robot stuck in a loop. Loop-exit hacks (visit counters) are a grey zone, ruling pending β€” the clean fix is a better model.
  • Flip/rotate augmentation = community-consensus legal, no official ruling β€” only after P1–P5 work.
  • Kaggle "Submission File Not Found" = format issue β€” may need the baseline's two dataframe columns combined; re-read the data page.

05 Drill #3 β€” Wilkins 20 Questions βœ… VALIDATED 2026-07-11 vs gemma-4-31b-it

Home Task 3: a hidden animal (of 1,472) behind an LLM oracle; 15 queries, asks AND guesses both cost 1. The trick the notebook itself teaches: precompute the oracle's answers offline (free), then ask the question that best splits the remaining candidates. Local notebook only β€” the deliverable is a screenshot of the final summary table. Full card: drill_03_oracle.md.

🚨 NEW Gemma quirk found here: on algorithm-heavy asks, Gemma 4 can burn its whole 2000-token budget "thinking" and send you a completely empty reply. Fix that worked live: start the prompt with "Answer immediately with code β€” do not deliberate." (baked in below). If a reply is still empty, resend the same prompt β€” don't reword first. Also: re-download the notebook β€” it was fixed Jul 9 (fp16 + batching); on the old copy the precompute takes hours instead of ~20–45 min.

Setup (once, ~2 min)

  1. Tab 1: aistudio.google.com β†’ Gemma 4. Tab 2: Home-Task-3.ipynb in Colab β†’ Runtime β†’ T4 GPU.
  2. Run through Step 2 + the RandomBaseline cell (~0.00 = the floor). Confirm the cell that prints oracle model -> float16 ran.
P0

Briefing β€” paste at the top of every new chat

You are my code generator inside a Colab session. Standing rule for EVERY reply in this chat: output ONLY one python code block and absolutely nothing else β€” no reasoning, no bullet points, no checklists, no text before or after the block. Start your reply with ```python.

Context: I'm working in the IOAI Colab notebook "The Analytical Language of John Wilkins". A hidden animal sits behind an oracle object: `interactor.ask(question)` returns 'yes' or 'no' (the question must be a line from the question pool), `interactor.guess(animal)` returns 'correct' or 'wrong'; BOTH cost 1 query from a budget of 15; per-row score = max(0, (1 if solved else 0) - 0.02*queries_used). I have `animals_pool` (list of 1472 lowercase animal names) and `questions_pool` (list of 559 lowercase yes/no questions). The oracle is Qwen/Qwen2.5-3B-Instruct at temperature 0, already loaded in memory as `Interactor._model` (a Hugging Face CausalLM on cuda, float16) and `Interactor._tokenizer`. For each question it builds this exact user message: "You are answering a question about one specific animal.\nThe animal is: {animal}.\nAnswer with a single word, yes or no.\nQuestion: {question}", applies the chat template with add_generation_prompt=True, generates with max_new_tokens=5, do_sample=False, and checks whether the reply starts with "yes".
P1

Batched oracle predictor (your own free copy of the oracle)

Your reply must be nothing but one python code block. Write a function `predict_answers(animal, questions)` that predicts the oracle's answers using the already-loaded `Interactor._model` and `Interactor._tokenizer`: build the exact prompt described above for each question, apply the chat template per prompt (tokenize=False, add_generation_prompt=True), set tokenizer.padding_side='left', tokenize all prompts as one padded batch, run ONE batched `generate(max_new_tokens=5, do_sample=False, pad_token_id=tokenizer.eos_token_id)`, decode only the newly generated tokens, and return a list with 1 if a reply starts with "yes" (case-insensitive) else 0, one per question. Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no bullet points.
β†’

Then run this one-liner yourself (no prompt needed)

QUESTIONS = questions_pool[:120]
P2

Checkpointed precompute (start it, walk away β€” ~20–45 min on T4, saves to Drive every 25 animals)

I defined `QUESTIONS = questions_pool[:120]` and I have the `predict_answers(animal, questions)` function from before. Write code that builds a numpy int8 array `table` of shape (len(animals_pool), len(QUESTIONS)), one row per animal in animals_pool order, by calling `predict_answers(animal, QUESTIONS)`. It must mount Google Drive, use checkpoint path '/content/drive/MyDrive/wilkins_table.npz': if the file exists, load it and resume from the first unfinished row (store a `done` count in the file); save the checkpoint every 25 animals and at the end; print progress with elapsed time every 25 animals. Code only, max 30 lines. Your ENTIRE reply must be exactly one python code block starting with ```python β€” no text, no bullet points, no reasoning before or after it.
P3

The solver: greedy questions + soft weights (never hard-eliminate β€” the oracle is sometimes wrong)

Answer immediately with code β€” do not deliberate. I have two globals in memory: `QUESTIONS` (a 120-question subset of questions_pool) and `table` (numpy 0/1 array of shape (len(animals_pool), len(QUESTIONS)): rows = animals in `animals_pool` order, columns = QUESTIONS, values = the oracle's predicted answers). Write class `MySolution` with `__init__(self, animals_pool, questions_pool)` and `solve(self, interactor)` implementing exactly this:
1. weights w = numpy ones(len(animals_pool)).
2. While `interactor.remaining_budget()` > 4 and best weight < 0.9 * w.sum(): loop j over range(len(QUESTIONS)) (the global QUESTIONS, NOT questions_pool) and pick the unasked j minimizing abs(weighted yes-fraction of table[:, j] - 0.5); ans = 1 if interactor.ask(QUESTIONS[j]) == 'yes' else 0; w = w * where(table[:, j] == ans, 0.9, 0.1). Never zero out a weight β€” the oracle is sometimes wrong.
3. Then guess animals in descending weight order until `interactor.is_done()`.
Code only, max 30 lines. Reply with ONLY a single python code block β€” no explanation, no reasoning, no bullet points.
P4

Free sanity check β€” NOT a prompt, paste this cell as-is (Gemma reliably choked on this ask β€” 3 empty replies)

import numpy as np
rng = np.random.default_rng(0)
counts = []
for i in rng.integers(0, len(animals_pool), size=40):
    w = np.ones(len(animals_pool)); asked = set(); c = 0
    for _ in range(15):
        j = min((q for q in range(len(QUESTIONS)) if q not in asked),
                key=lambda q: abs((w * table[:, q]).sum() / w.sum() - 0.5))
        asked.add(j); c += 1
        w *= np.where(table[:, j] == table[i, j], 0.9, 0.1)
        if np.argmax(w) == i: break
    counts.append(c)
counts = np.array(counts)
print(f"mean {counts.mean():.1f}  max {counts.max()}  <=11 questions: {(counts <= 11).mean():.0%}")
P5

Score it β€” no prompt needed

Run the notebook's own Step 4 cell (evaluate on dev.csv β€” real oracle calls, ~15-30 min), then the Step 5 final-scoring cell unchanged. Screenshot the summary table with the FINAL row β€” that IS your submission.

πŸ›  Recovery moves

  1. Empty or cut-off reply β†’ resend the exact same prompt once. Still empty? Prepend "Answer immediately with code β€” do not deliberate." and add "max 20 lines".
  2. "... is not in questions_pool.txt" β†’ costs no budget; tell Gemma: "Only ask strings from the QUESTIONS list, exactly as they appear. Fix. Code only."
  3. CUDA OOM during P2 β†’ "Rewrite predict_answers to process the questions in chunks of 32 per generate call. Code only."
  4. Precompute crawling (hours) β†’ old notebook / bf16 β€” re-open from GitHub, run the fp16 cell, rerun P2 (it resumes from Drive).
  5. Dev score low but P4 fine β†’ "Change the weight update factors from 0.9/0.1 to 0.9/0.2. Code only." and re-run P5.

⚠️ Known traps β€” don't burn time here

  • Guesses cost budget too: 10 asks + 1 correct guess = 11 queries = 0.78.
  • Not on Kaggle β€” local only; organizers re-score your MySolution on a hidden test set, so don't hand-tune to dev animals.
  • Deterministic β‰  infallible β€” same question always gets the same answer, but the answer itself can be wrong. That's why P3 never hard-eliminates.
  • 20-min rule: keep MySolution.__init__ fast at eval time (load the .npz, don't recompute).

πŸ““ After the drill (2 min)

Log: P4 sim mean β†’ dev score β†’ FINAL score β†’ what broke β†’ which prompt saved you. DM Viktor for review (max 3 corrections).

06 Intel Board

🏟 On-site (official rules, re-audited Jul 11)

  • Provided chatbot is Gemma β€” and it's live now at chat.ioai2026.kz (verified Jul 22, one account per contestant). GAITE track: Gemma 4 E4B, ~2,000-token replies, 10-message memory, 2,000-char inputs, 60 msg/h. Individual contest limits are stricter. Anything from Gemma is legal, incl. skeleton code. See research/10.
  • Playbook re-validated against the real E4B bot (Jul 22, 3 live tests): everything carries over. Three amendments β€” add the third magic string "Do not create mock or placeholder objects; assume all named variables exist", run every T9 fix before trusting it (E4B pattern-matches error text), and read/clean imports (it adds junk and overshoots line caps). Full verdict + final day-by-day: plan/01_lock_in.md.
  • On-site resources: 1 GPU slot, 18 GB RAM total β€” stay memory-frugal. The Jupyter server ships pre-loaded models + docs; read the provided docs first.
  • Freeze/disconnect: raise hand β†’ replacement machine; lost β‰₯10 min β†’ file the extra-time form on the spot. If the round ends before approval: stay seated β€” leaving the hall forfeits the claim.
  • Official scores come from a hidden test set ("Scoreboard B") β€” the live board shows baseline + anonymous max; don't overfit it.
  • 20-min notebook runtime Β· max 60 submissions/task; 20-min limit = train + inference combined. Latest submission counts β€” treat it as final.
  • Clarification questions must be Yes/No. Contest days 09:00–15:00 (6 h). No device quarantine, but devices banned in the hall.
  • Obligatory practice round Aug 3, 07:30–09:30 + GAITE meeting 14:00. Own keyboard/mouse on request there. Chat quotas TBA β€” confirm then.

🧭 Team Challenge (GALBOT)

  • Two stages: Round 1 "Simulation" Aug 3 14:00–19:00; top-10 Final Aug 7 09:00–12:00 at Alem.ai.
  • Practice window ENDED Jul 22 (Almaty) with ~239 h of our time unused β€” organizers may reopen it ("we will update regular channels"). If it reopens, book a full team session immediately.
  • Platform decoded (first-hand, Jul 22): cloud GPU desktop β†’ ioailab on Isaac Sim with the Galbot G1 β€” collect expert demos (cuRobo) β†’ Mimic-expand β†’ train Diffusion Policy β†’ evaluate β†’ submit from the answer folder. Home Task 2 scaled up. Full walkthrough: research/09.
  • Timing counts from desktop entry; ending a session wipes it; submissions run server-side. Single shared login β†’ one driver + screen share.
  • IOAILab mirror repo: galbot-ioai/ioailab (stub so far; real docs on the platform).

🚨 Watch-outs

  • Correction (Jul 22): the earlier "ioai2026.kz is a scam" ruling does not apply to chat.ioai2026.kz β€” that subdomain is the real official chatbot (official credentials verified). Still ignore the bare domain's other pages.
  • Deadlines that were due Jul 22: team-leader language/support form + at-home appeals (form-only, one per contestant per task, emails ignored) β€” confirm with Daphne/Esau that both went in.
  • Dry-run platform: Yandex Contest example task (the real on-site platform).
  • Task 1 label noise (cow/sheep, thunderstorm/rain) escalated to organizers Jul 11 β€” no ruling yet; Kaggle LB unreliable (some 100% scores from extracted labels).
  • Re-scrape Discord late July for rulings & travel logistics. IOAI Slack is NOT for contestants.