Skip to content

docs: active harnesses auto-enqueue each round - #2

Merged
echobt merged 2 commits into
mainfrom
docs/auto-enqueue-rounds
Aug 12, 2026
Merged

docs: active harnesses auto-enqueue each round#2
echobt merged 2 commits into
mainfrom
docs/auto-enqueue-rounds

Conversation

@echobt

@echobt echobt commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Document that an accepted active harness is auto-queued every open round with the shared prompt (no re-POST required).
  • Clarify split manual vs scheduled daily quota and rolling 10-round scoring.

Pairs with BaseIntelligence/base PR for the control-plane auto-enqueue change.

Test plan

  • Read-through of rounds / submit / troubleshoot pages
  • Link check from README guide map

Summary by CodeRabbit

  • Documentation
    • Clarified automatic scheduling of accepted harnesses for future rounds.
    • Documented rolling 10-round win-point scoring and elimination cooldowns.
    • Explained the submission lifecycle, including separate manual and scheduled quotas.
    • Updated submission limits to cover 10 manual runs per UTC day.
    • Clarified quota troubleshooting and guidance for harnesses awaiting automatic scheduling.
    • Documented that viewer access provides screenshots only; HTML requests return 410 Gone.
    • Updated examples to distinguish manual runs from scheduled runs.

Reflect control-plane behavior so miners know they stay in the field
without re-POSTing, and clarify manual vs scheduled quota.
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@echobt, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 54 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 774f9b00-3ce3-4b8e-9b7d-6da1c022a6b8

📥 Commits

Reviewing files that changed from the base of the PR and between 325234d and a9c9826.

📒 Files selected for processing (4)
  • docs/rounds-and-scoring.md
  • docs/submit.md
  • docs/troubleshoot.md
  • examples/what-not-to-do/README.md
📝 Walkthrough

Walkthrough

The documentation now describes automatic enqueueing of accepted harnesses, rolling 10-round scoring, separate manual and scheduled quotas, submission lifecycle rules, elimination cooldowns, and screenshot-only viewer access.

Changes

Round Scheduling and Scoring

Layer / File(s) Summary
Round flow and rolling scoring
docs/README.md, docs/rounds-and-scoring.md
The challenge flow documents automatic harness enqueueing and rolling 10-round win-point distribution. The round rules define scheduling, submission, digest gating, and elimination cooldown behavior.
Access and quota guidance
docs/rounds-and-scoring.md, docs/submit.md, docs/troubleshoot.md, examples/what-not-to-do/README.md
The documentation distinguishes manual and scheduled quota buckets. It documents screenshot-only viewer access, 410 Gone responses for HTML requests, and troubleshooting for inactive round harnesses.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main documented change: active harnesses auto-enqueue for each round.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
⚔️ Resolve merge conflicts 💡
  • Resolve merge conflict in branch docs/auto-enqueue-rounds
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/auto-enqueue-rounds

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/rounds-and-scoring.md`:
- Line 12: Use one automatic-enqueue lifecycle contract across the
documentation: in docs/rounds-and-scoring.md lines 12-12, replace the
accepted-submit trigger with an accepted active harness trigger; in
docs/README.md lines 5-6, state that scheduling continues for every open round
after the harness becomes active; and in docs/README.md lines 32-34, add the
accepted-active state before the next open round in the process diagram.
- Around line 37-38: Update the viewer route documentation in
rounds-and-scoring.md to include the gateway prefix, documenting GET
{GATEWAY}/challenge/design/v1/view/{run_id}/index.png while preserving the
existing statement that .html requests return 410 Gone.
- Line 14: Update the “Split daily quota” entry to define the scheduled cap as
20 per hotkey per UTC day for the scheduled bucket only, derived from 10 rounds
× one prompt per round × a headroom factor of 2. Clarify that it neither
combines with the manual limit of 10 nor limits in-flight runs, that both
buckets reset at the UTC day boundary, and that quota responses expose separate
limit and remaining values.

In `@docs/troubleshoot.md`:
- Around line 6-7: Update the troubleshooting entries for “Quota exhausted” and
“Active harness, no run this round” to distinguish manual versus scheduled
bucket exhaustion and delayed enqueue versus elimination. In the quota guidance,
direct users to inspect both bucket states and wait for the next UTC day only
when the relevant bucket is exhausted; in the harness guidance, direct users to
check scheduled.remaining, round events, and elimination status before waiting
for auto-enqueue.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 8f6ecbdd-ae34-45ee-992a-e6f750d9de32

📥 Commits

Reviewing files that changed from the base of the PR and between 1dc23ba and 325234d.

📒 Files selected for processing (5)
  • docs/README.md
  • docs/rounds-and-scoring.md
  • docs/submit.md
  • docs/troubleshoot.md
  • examples/what-not-to-do/README.md

Comment thread docs/rounds-and-scoring.md Outdated
| **30 minute agent timeout** | Your `run` has at most 30 minutes in the sandbox. |
| **10 sandboxed runs / hotkey / UTC day** | Check remaining quota with `GET /v1/quota/{hotkey}`. |
| **3 prompts per round** | Same deterministic prompt set for every harness in that round. |
| **Auto-enqueue each round** | After your first accepted submit (next round), your **latest active harness** is queued automatically every open round — you do **not** need to re-POST to keep competing. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Use one lifecycle contract for automatic enqueueing. The documentation must require an accepted active harness and an open round before automatic scheduling.

  • docs/rounds-and-scoring.md#L12-L12: replace “accepted submit” with an accepted active harness trigger.
  • docs/README.md#L5-L6: state that scheduling applies to every open round after the harness becomes active.
  • docs/README.md#L32-L34: add the accepted-active state before the next open round in the process diagram.
📍 Affects 2 files
  • docs/rounds-and-scoring.md#L12-L12 (this comment)
  • docs/README.md#L5-L6
  • docs/README.md#L32-L34
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/rounds-and-scoring.md` at line 12, Use one automatic-enqueue lifecycle
contract across the documentation: in docs/rounds-and-scoring.md lines 12-12,
replace the accepted-submit trigger with an accepted active harness trigger; in
docs/README.md lines 5-6, state that scheduling continues for every open round
after the harness becomes active; and in docs/README.md lines 32-34, add the
accepted-active state before the next open round in the process diagram.

Comment thread docs/rounds-and-scoring.md Outdated
| **3 prompts per round** | Same deterministic prompt set for every harness in that round. |
| **Auto-enqueue each round** | After your first accepted submit (next round), your **latest active harness** is queued automatically every open round — you do **not** need to re-POST to keep competing. |
| **1 shared prompt / round** | Same deterministic prompt for every harness in that round. |
| **Split daily quota** | **Manual** (your `POST /v1/harness`, 10/day) vs **Scheduled** (organizer auto-enqueue, ~10/day, cap 20). Auto-queue does not spend manual quota. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -eu

rg -n -C 5 'manual|scheduled|cap.?20|quota|auto-enqueue' docs examples

Repository: BaseIntelligence/design-challenge

Length of output: 8425


🏁 Script executed:

#!/bin/bash
set -eu

printf '%s\n' '--- candidate files ---'
git ls-files | rg '(^|/)(docs/rounds-and-scoring\.md|.*quota.*|.*round.*|.*contract.*|.*api.*)$' | head -200

printf '%s\n' '--- quota and scheduled references ---'
rg -n -C 4 'runs_used|scheduled|manual|cap.?20|quota|auto.enqueue|auto-enqueue' --glob '!docs/rounds-and-scoring.md' . | head -400

Repository: BaseIntelligence/design-challenge

Length of output: 5155


🏁 Script executed:

#!/bin/bash
set -eu

printf '%s\n' '--- repository files ---'
git ls-files | head -300

printf '%s\n' '--- API and quota documentation ---'
cat -n docs/api.md | sed -n '1,100p'
cat -n docs/rounds-and-scoring.md | sed -n '1,70p'
cat -n docs/submit.md | sed -n '60,85p'

printf '%s\n' '--- exact quota-contract terms ---'
rg -n -i 'runs_used|remaining|limit|quota/\{hotkey\}|scheduled|manual|UTC day|cap' . --hidden --glob '!.git/**'

Repository: BaseIntelligence/design-challenge

Length of output: 8720


🌐 Web query:

BaseIntelligence BASE monorepo DESIGN_CHALLENGE.md scheduled quota cap 20 runs_used limit remaining

💡 Result:

The BASE monorepo (maintained by BaseIntelligence) handles task scheduling, worker operations, and validator/miner interactions for its decentralized AI agent challenges [1][2]. While the specific DESIGN_CHALLENGE.md file you mentioned is part of the repository structure, authoritative technical documentation regarding scheduled quota caps—specifically the variables runs_used and remaining—is defined by the platform's execution and worker schemas [3][1][4]. In the context of the BASE framework, quota management for tasks and execution runs generally adheres to the following principles: 1. Quota Definitions: Quota tracking, where implemented, typically uses runs_used (current consumption), runs_limit (total allowed), and a calculated remaining value (the difference between limit and used) [5][6][7]. 2. Enforcement: BASE utilizes an execution substrate (broker) to manage job deployments [8]. If a run exceeds a defined quota, the system architecture often supports postponing execution until a slot becomes available, rather than dropping the request entirely [6]. 3. Implementation: In the BASE repository, core constraints (such as execution proofs or VM configurations) are aligned with smart contract parameters [9]. Developers should consult the docs/monorepo.md or docs/miner/reference.md files within the BaseIntelligence/base repository for specific per-challenge quota configurations, as these may vary based on the specific subnet subnet requirements and miner activity [3][4]. If you are encountering a quota cap, ensure your environment is correctly passing authentication and identity headers required for the BaseIntelligence proxy to accurately attribute the runs_used against your specific miner or validator key [1][8].

Citations:


🏁 Script executed:

#!/bin/bash
set -eu

for repo in BaseIntelligence/base BaseIntelligence/agent-challenge; do
  printf '%s\n' "--- $repo tree matches ---"
  curl -fsSL "https://api.github.com/repos/$repo/git/trees/main?recursive=1" |
    jq -r '.tree[]?.path' |
    rg -i 'design.?challenge|quota|round' |
    head -100 || true

  printf '%s\n' "--- $repo DESIGN_CHALLENGE.md ---"
  curl -fsSL "https://raw.githubusercontent.com/$repo/main/docs/DESIGN_CHALLENGE.md" |
    rg -n -i -C 5 'quota|scheduled|manual|cap|runs_used|remaining|UTC day' |
    head -300 || true
done

Repository: BaseIntelligence/design-challenge

Length of output: 14320


🏁 Script executed:

#!/bin/bash
set -eu

python3 - <<'PY'
import json
import re
import urllib.request

base = "https://raw.githubusercontent.com/BaseIntelligence/base/main/"
tree_url = "https://api.github.com/repos/BaseIntelligence/base/git/trees/main?recursive=1"
tree = json.load(urllib.request.urlopen(tree_url))["tree"]

roots = (
    "crates/design-challenge-task/",
    "crates/design-challenge/",
    "bins/design-challenge/",
    "crates/db/migrations/",
)
terms = re.compile(r"runs_used|remaining|scheduled|manual|quota|SCHEDULED_DAILY_RUN_CAP|DAILY_RUN", re.I)

for entry in tree:
    path = entry.get("path", "")
    if not path.startswith(roots) or not path.endswith((".rs", ".sql")):
        continue
    try:
        text = urllib.request.urlopen(base + path).read().decode()
    except Exception:
        continue
    lines = text.splitlines()
    hits = [i for i, line in enumerate(lines) if terms.search(line)]
    if hits:
        print(f"\n--- {path} ---")
        shown = set()
        for i in hits:
            for j in range(max(0, i - 3), min(len(lines), i + 4)):
                if j not in shown:
                    print(f"{j + 1}:{lines[j]}")
                    shown.add(j)
PY

Repository: BaseIntelligence/design-challenge

Length of output: 2457


🏁 Script executed:

#!/bin/bash
set -eu

tree=$(curl -fsSL 'https://api.github.com/repos/BaseIntelligence/base/git/trees/main?recursive=1')

printf '%s\n' '--- quota-related source paths ---'
printf '%s' "$tree" |
  jq -r '.tree[]?.path' |
  rg '^(crates/design-challenge-task|crates/design-challenge|bins/design-challenge|crates/db/migrations)/.*\.(rs|sql)$' |
  while read -r path; do
    content=$(curl -fsSL "https://raw.githubusercontent.com/BaseIntelligence/base/main/$path")
    if printf '%s\n' "$content" | rg -qi 'runs_used|remaining|scheduled|manual|quota|SCHEDULED_DAILY_RUN_CAP|DAILY_RUN'; then
      printf '%s\n' "--- $path ---"
      printf '%s\n' "$content" |
        rg -n -C 4 'runs_used|remaining|scheduled|manual|quota|SCHEDULED_DAILY_RUN_CAP|DAILY_RUN'
    fi
  done

Repository: BaseIntelligence/design-challenge

Length of output: 10396


🏁 Script executed:

#!/bin/bash
set -eu

curl -fsSL 'https://api.github.com/repos/BaseIntelligence/base/git/trees/main?recursive=1' |
  jq -r '.tree[]?.path' |
  rg -i '(^|/)(design|.*quota.*|.*http.*|.*route.*|.*api.*|.*handler.*).*' |
  head -300

Repository: BaseIntelligence/design-challenge

Length of output: 4828


🏁 Script executed:

#!/bin/bash
set -eu

for path in \
  crates/design-http/src/api.rs \
  crates/design-http/src/lib.rs \
  crates/design-db/src/lib.rs \
  crates/design-store/src/store.rs \
  crates/design-store/src/lib.rs \
  crates/design-store-pg/src/lib.rs; do
  printf '%s\n' "--- $path ---"
  curl -fsSL "https://raw.githubusercontent.com/BaseIntelligence/base/main/$path" |
    rg -n -C 6 'quota|runs_used|manual_runs_used|scheduled|remaining|limit|UTC|day'
done

Repository: BaseIntelligence/design-challenge

Length of output: 15938


Define the scheduled quota cap.

State that cap 20 applies per hotkey per UTC day to the scheduled bucket only. It is the 10-round schedule multiplied by one prompt per round and a headroom factor of 2. It does not combine with the manual limit of 10 or limit in-flight runs. State that both buckets reset with the UTC day and that the quota response reports separate limit and remaining values.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/rounds-and-scoring.md` at line 14, Update the “Split daily quota” entry
to define the scheduled cap as 20 per hotkey per UTC day for the scheduled
bucket only, derived from 10 rounds × one prompt per round × a headroom factor
of 2. Clarify that it neither combines with the manual limit of 10 nor limits
in-flight runs, that both buckets reset at the UTC day boundary, and that quota
responses expose separate limit and remaining values.

Comment thread docs/rounds-and-scoring.md Outdated
Comment on lines +37 to +38
Screenshots only: `GET /v1/view/{run_id}/index.png`. Produced HTML is never
served (`.html` → `410 Gone`).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -eu

printf '%s\n' '--- target section ---'
sed -n '1,70p' docs/rounds-and-scoring.md

printf '%s\n' '--- gateway and viewer references ---'
rg -n -C 3 '/challenge/design|/v1/view|GATEWAY|index\.png|410 Gone' README.md docs

printf '%s\n' '--- changed-file summary ---'
git diff --stat -- docs/rounds-and-scoring.md

Repository: BaseIntelligence/design-challenge

Length of output: 11123


Add the gateway prefix to the viewer route.

For gateway access, document GET {GATEWAY}/challenge/design/v1/view/{run_id}/index.png. Keep the .html410 Gone behavior.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/rounds-and-scoring.md` around lines 37 - 38, Update the viewer route
documentation in rounds-and-scoring.md to include the gateway prefix,
documenting GET {GATEWAY}/challenge/design/v1/view/{run_id}/index.png while
preserving the existing statement that .html requests return 410 Gone.

Comment thread docs/troubleshoot.md
Comment on lines +6 to +7
| Quota exhausted | `GET .../quota/{hotkey}` — check `manual` vs `scheduled`; wait for next UTC day |
| Active harness, no run this round | Wait for round auto-enqueue; or you may be eliminated |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Distinguish quota exhaustion from delayed enqueue and elimination.

The manual and scheduled buckets have separate effects. If only one bucket is exhausted, “wait for next UTC day” is incomplete. For an active harness without a run, users should check scheduled.remaining, round events, and elimination status before waiting.

Proposed wording
- | Quota exhausted | `GET .../quota/{hotkey}` — check `manual` vs `scheduled`; wait for next UTC day |
- | Active harness, no run this round | Wait for round auto-enqueue; or you may be eliminated |
+ | Quota exhausted | Check which bucket is exhausted. Manual quota blocks `POST /v1/harness`; scheduled quota blocks auto-enqueue until reset |
+ | Active harness, no run this round | Check `scheduled.remaining`, round events, and elimination status before waiting for auto-enqueue |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| Quota exhausted | `GET .../quota/{hotkey}` — check `manual` vs `scheduled`; wait for next UTC day |
| Active harness, no run this round | Wait for round auto-enqueue; or you may be eliminated |
| Quota exhausted | Check which bucket is exhausted. Manual quota blocks `POST /v1/harness`; scheduled quota blocks auto-enqueue until reset |
| Active harness, no run this round | Check `scheduled.remaining`, round events, and elimination status before waiting for auto-enqueue |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/troubleshoot.md` around lines 6 - 7, Update the troubleshooting entries
for “Quota exhausted” and “Active harness, no run this round” to distinguish
manual versus scheduled bucket exhaustion and delayed enqueue versus
elimination. In the quota guidance, direct users to inspect both bucket states
and wait for the next UTC day only when the relevant bucket is exhausted; in the
harness guidance, direct users to check scheduled.remaining, round events, and
elimination status before waiting for auto-enqueue.

@echobt
echobt merged commit 7de2f54 into main Aug 12, 2026
1 check was pending
@echobt
echobt deleted the docs/auto-enqueue-rounds branch August 12, 2026 04:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant