-
Notifications
You must be signed in to change notification settings - Fork 16
chore(trust-root): set design/prism emission to 50/50 #79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,22 +1,20 @@ | ||
| # STAGING-ONLY trust root override (testnet 541): enables the design emission | ||
| # share so the staging e2e can prove design weights end-to-end. | ||
| # STAGING-ONLY trust root override (testnet 541): mirrors prod emission shares | ||
| # so the staging e2e can prove design + prism weights end-to-end. | ||
| # | ||
| # Production remains `emission_share_bps = 0` for design until the owner | ||
| # ceremony (see config/challenges.toml + CEREMONY.md) — this file is mounted | ||
| # over /etc/base/config/challenges.toml by deploy/compose/env-staging.yml only. | ||
| # Signed with the same throwaway owner key as config/challenges.toml | ||
| # Mounted over /etc/base/config/challenges.toml by deploy/compose/env-staging.yml | ||
| # only. Signed with the same throwaway owner key as config/challenges.toml | ||
| # (config/owner.pubkey); re-sign after any edit (docs/runbooks/trust-root-rotation.md). | ||
| version = 1 | ||
| introduced_epoch = 0 | ||
|
|
||
| [[challenges]] | ||
| id = "design" | ||
| public_key = "3e27f87d8330006a73174001120c3455f16b95fee098bb8c2bab9d5053840418" | ||
| emission_share_bps = 2000 | ||
| emission_share_bps = 5000 | ||
| policy = "all_metagraph_hotkeys" | ||
|
|
||
| [[challenges]] | ||
| id = "prism" | ||
| public_key = "bcd50bb830e050ed4b011dd8f1d2f126fdb42dc55b45ece30a7d5c8ceb3c5219" | ||
| emission_share_bps = 8000 | ||
| emission_share_bps = 5000 | ||
| policy = "all_metagraph_hotkeys" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1 @@ | ||
| 4e532b0c449ee744bbc8877dc677647003e21176a0dd074026458f62fd9b486379aeea8736bddb16b04834ae2ec422409d18f1eac757633354a12919df1ec98c | ||
| fae237ccecf24f35cc65fb0d56906db25f0909d016f36bc48bc9788ab6d3324f3c305dab54f0de76fa9700ec6a4cef1dfa5be02dde1a63a7e8260b1a1a440789 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,20 +1,20 @@ | ||
| # Owner-signed challenges trust root (D18/D23/D24). | ||
| # Signed with throwaway owner key (see owner.pubkey). Production rotation: CEREMONY.md. | ||
| # | ||
| # Emission: design = 2000 bps, prism = 8000 bps (activated 2026-08-06, same | ||
| # owner key + same challenge keys as the staging override; a future production | ||
| # owner/key ceremony per CEREMONY.md remains pending). | ||
| # Emission: design = 5000 bps, prism = 5000 bps (50/50; rebalanced 2026-08-07 from | ||
| # design 2000 / prism 8000 activated 2026-08-06). Same owner key + challenge keys; | ||
| # a future production owner/key ceremony per CEREMONY.md remains pending). | ||
| version = 1 | ||
| introduced_epoch = 0 | ||
|
|
||
| [[challenges]] | ||
| id = "design" | ||
| public_key = "3e27f87d8330006a73174001120c3455f16b95fee098bb8c2bab9d5053840418" | ||
| emission_share_bps = 2000 | ||
| emission_share_bps = 5000 | ||
| policy = "all_metagraph_hotkeys" | ||
|
|
||
| [[challenges]] | ||
| id = "prism" | ||
| public_key = "bcd50bb830e050ed4b011dd8f1d2f126fdb42dc55b45ece30a7d5c8ceb3c5219" | ||
| emission_share_bps = 8000 | ||
| emission_share_bps = 5000 | ||
| policy = "all_metagraph_hotkeys" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1 @@ | ||
| e68a49e313f41aa892898d50b99e94393424a5c173e6136b397e24c726f14d13f031f75f685213f3d84f791fc67836e4765e5a9c70f4f4c956022679fabac98f | ||
| c0c1be58a06daa6713c482ac3619649354ae3229fdc307f212f401dc5d2c17318f8ac9f8d3f9be6ab605a525907b77d9e083cb47c37f4df8231285a4fc104f80 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
for pair in \
"config/challenges.toml config/challenges.toml.sig" \
"config/challenges.staging.toml config/challenges.staging.toml.sig"
do
read -r config signature <<<"$pair"
test -f "$config"
test -f "$signature"
value="$(tr -d '[:space:]' <"$signature")"
[[ "$value" =~ ^[0-9a-fA-F]{128}$ ]]
done
rg -n -C 6 \
'load_config_dir|challenges(\.staging)?\.toml\.sig|verify|signature' \
config crates/trustrootRepository: BaseIntelligence/base Length of output: 34272 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== local lock/config files for trustroot =="
git ls-files | rg '(^|/)(Cargo\.lock|Cargo\.toml|trustroot|config/.*\.toml|config/.*\.sig|config/owner\.pubkey)$' || true
echo "== config ownership/signature files =="
for f in config/owner.pubkey config/challenges.toml config/challenges.toml.sig config/challenges.staging.toml config/challenges.staging.toml.sig; do
if [ -f "$f" ]; then
echo "--- $f"
wc -c "$f"
if [[ "$f" == *.toml ]]; then
sed -n '1,120p' "$f"
else
cat "$f"
fi
else
echo "MISSING $f"
fi
done
echo "== trustroot bin CLI candidate files =="
fd -i 'main\.rs|cli|bin' crates/trustroot 2>/dev/null || true
rg -n "struct .*Cli|clap|sign --|verify --|owner-pub|kind" crates/trustroot .cargo 2>/dev/null || true
echo "== local build tool availability =="
command -v cargo || true
command -v rustc || trueRepository: BaseIntelligence/base Length of output: 5060 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== trustroot CLI files =="
git ls-files | rg 'trustroot|bins/trustroot|xtask|cargo-hack|xtask|dev|ci' | rg -v '(^|/)(README\.md|LICENSE|\.md)$' || true
sed -n '1,260p' bins/trustroot/Cargo.toml
echo
rg -n "runbin|bin|trustroot|verify|sign|owner-pub|kind" bins/trustroot crates/trustroot xtask Cargo.toml Cargo.lock crates/crypto/src crates/crypto -g '*.rs' || trueRepository: BaseIntelligence/base Length of output: 34833 Verify both replacement signatures against their exact environment-specific configurations.
📍 Affects 2 files
🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -58,7 +58,7 @@ Removed (replaced by design + prism HTTP paths; no Phala/CVM miner). | |||||
| | Binary (`bins/design-egress-proxy`) | done | Open egress proxy (internal blocklist) + budgeted LLM path. | | ||||||
| | Spec + checklist | done | [`DESIGN_CHALLENGE.md`](DESIGN_CHALLENGE.md) + checklist; `xtask design-check`. | | ||||||
| | Compose / images | in progress | deploy-wiring todo (port `28093` local). | | ||||||
| | Emission | **0 bps** | Until owner ceremony; prism holds `10000` bps. | | ||||||
| | Emission | **5000 bps** | Equal split with prism (50/50; sum `10000`). | | ||||||
|
|
||||||
| ## prism-challenge | ||||||
|
|
||||||
|
|
@@ -69,7 +69,7 @@ Removed (replaced by design + prism HTTP paths; no Phala/CVM miner). | |||||
| | Compose service | done | Added to `docker-compose.yml` on `:8092`. | | ||||||
| | Dockerfile target | done | `deploy/Dockerfile` target `prism-challenge`. | | ||||||
| | GHCR image | done | Added to `images.yml` matrix and `ghcr-public.yml`. | | ||||||
| | Emission | **10000 bps** | Sole share until design enablement ceremony. | | ||||||
| | Emission | **5000 bps** | Equal split with design (50/50; sum `10000`). | | ||||||
|
|
||||||
| ## Infrastructure | ||||||
|
|
||||||
|
|
@@ -117,7 +117,7 @@ Agent/operator contracts: root [`AGENTS.md`](../AGENTS.md), [`deploy/AGENTS.md`] | |||||
| | DCAP verify holds the attest mutex | A cold Intel PCS fetch (up to 20 s) serialises attestation submissions. | | ||||||
| | DCAP error classification | Matches on `anyhow` message text; re-run `cargo test -p attest-policy --features dcap` after any `dcap-qvl` bump. | | ||||||
| | Design compose/images | deploy-wiring in progress; local port `28093` documented. | | ||||||
| | Design emission ceremony | Owner must keygen prod `design_sk`, set bps, re-sign trust root. | | ||||||
| | Design emission ceremony | Emission live at 5000/5000 with design; optional prod `design_sk` / owner key rotation still pending. | | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win Do not mark production emission as live before activation. Line 83 still marks the production master as pending. The PR also requires configuration deployment, service restarts, and a subsequent As per coding guidelines, normative documentation is the source of truth for contracts, operations, and status. Proposed wording-| Design emission ceremony | Emission live at 5000/5000 with design; optional prod `design_sk` / owner key rotation still pending. |
+| Design emission ceremony | Configured at 5000/5000; production activation pending deployment, restart, and `sealed: true` verification. |📝 Committable suggestion
Suggested change
🤖 Prompt for AI AgentsSource: Coding guidelines |
||||||
| | Mainnet (netuid 100) | Owner wallet not yet on this machine, so prod runs with `BASE_GATEWAY_REQUIRE_OWNER=0`. | | ||||||
| | Prod pin placeholders | `deploy/pins/prod.json` still ships zero-digests until the first successful promote; registry mode rejects placeholders. | | ||||||
| | Spaces backup secrets | First prod promote is fail-closed without `BASE_BACKUP_ENDPOINT` + `SPACES_ACCESS_KEY_ID` / `SPACES_SECRET_ACCESS_KEY` (or AWS_* fallbacks) in GitHub. | | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -121,7 +121,7 @@ The global-best model is published to | |
| | `GET /v1/jobs` | Active/recent pods (ops) | | ||
| | `GET /health` | Liveness | | ||
|
|
||
| Emission share for prism is owner-controlled via the trust root. Until the design | ||
| enablement ceremony, prism typically holds the full `10000` bps share — see | ||
| Emission share for prism is owner-controlled via the trust root. Current split is | ||
| `5000` bps prism / `5000` bps design (50/50) — see | ||
|
Comment on lines
+124
to
+125
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
rg -n -C 4 'github\.com|emission|5000|10000' docs/external-miner docs/PRISM.mdRepository: BaseIntelligence/base Length of output: 7974 🌐 Web query:
💡 Result: Prism is a decentralized neural architecture search (NAS) challenge hosted on the BASE subnet (Subnet 100 on the Bittensor network) [1][2]. It is designed to evaluate a model's ability to learn from scratch by having miners submit two-script bundles (architecture.py and training.py) [1]. Regarding your query on emission and design: 1. Emission Share: Recent documentation for the BaseIntelligence ecosystem explicitly confirms an "absolute 50/50 emission" split between the Prism challenge and other challenges (such as the agent-challenge) within the subnet [3]. This policy is emphasized in the context of "emission honesty" to ensure transparent distribution [3][4]. 2. Design (5000/10000): The specific figures 5000 and 10000 do not appear as fundamental design constants or emission parameters in the Prism repository documentation [1][5]. Prism's design centers on "prequential" (online) compression metrics, where submitted models are evaluated using a locked FineWeb-Edu dataset under forced random initialization [1]. The score is based on the area under the from-scratch loss curve, normalized by bytes consumed [1]. The platform operates as a decentralized challenge where miners own their models and training loops, while the challenge retains ownership of the data and the scoring process [1]. System tools for managing these environments are maintained within the BaseIntelligence monorepo, which provides lab tools for local deployment and testing of Prism miners [6][7][4]. Citations:
🌐 Web query:
💡 Result: I couldn’t find an indexed GitHub result matching all terms for The search results mainly surfaced unrelated Prism repositories, including PrismLibrary and runprism/prism. (github.com) Citations: 🏁 Script executed: #!/bin/bash
set -euo pipefail
curl -fsSL https://raw.githubusercontent.com/BaseIntelligence/prism/main/README.md > /tmp/prism_readme.txt 2>/tmp/curl_error.txt || true
if [ -s /tmp/prism_readme.txt ]; then
rg -n -C 4 'emission|5000|10000|split|shares?|subnets?|docs?/.*md#L|docs/|docs' /tmp/prism_readme.txt || true
echo '---'
wc -l /tmp/prism_readme.txt
else
echo 'README fetch empty or failed'
cat /tmp/curl_error.txt || true
fi
printf '\n--- README docs/prism-related files ---\n'
if command -v gh >/dev/null 2>&1; then
gh api repos/BaseIntelligence/prism/contents/docs 2>/tmp/gh_api_err.txt | jq -r '.[].name // empty' || true
else
echo 'gh not available'
fiRepository: BaseIntelligence/base Length of output: 1582 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '--- public BaseIntelligence/prism docs: mining docs ---'
github=BaseIntelligence/prism
for file in docs/README.md docs/getting-started.md docs/submit.md docs/scoring.md docs/api.md; do
echo "### $file"
curl -fsSL "https://raw.githubusercontent.com/$github/main/$file" > "/tmp/$file"
rg -n -C 5 'emission|emission|5000|10000|split|shares?|competit(ion|ing)|challenge|prism|design' "/tmp/$file" || true
done
echo '--- local external-miner/prism.md excerpt ---'
sed -n '1,150p' docs/external-miner/prism.md | rg -n -C 5 'README|Miner|emission|5000|10000|split|docs/getting-started|Getting started' || trueRepository: BaseIntelligence/base Length of output: 295 🏁 Script executed: #!/bin/bash
set -euo pipefail
github=BaseIntelligence/prism
for file in docs/README.md docs/getting-started.md docs/submit.md docs/scoring.md docs/api.md; do
echo "### $file"
curl -fsSL "https://raw.githubusercontent.com/$github/main/$file" ">/tmp/prism-$file" 2>/tmp/curl-err.txt || { echo "fetch failed"; cat /tmp/curl-err.txt; continue; }
rg -n -C 5 'emission|5000|10000|split|shares?|competit(ion|ing)|challenge|prism|design' "/tmp/prism-$file" || true
done
echo '--- local external-miner/prism.md relevant excerpt ---'
rg -n -C 6 'emission|5000|10000|split|README|Getting started|getting-started' docs/external-miner/prism.md docs/external-miner/README.mdRepository: BaseIntelligence/base Length of output: 13429 Update the public Prism miner docs for the allocation.
🤖 Prompt for AI AgentsSource: Coding guidelines |
||
| [`../runbooks/prism-enable-lium-and-emission.md`](../runbooks/prism-enable-lium-and-emission.md) | ||
| and [`../runbooks/design-enable-and-emission.md`](../runbooks/design-enable-and-emission.md). | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,7 @@ | ||
| # Design challenge — enable real backends + emission unlock | ||
|
|
||
| Design ships with `emission_share_bps = 0` until an explicit owner ceremony. | ||
| Until then **prism holds `10000` bps** (sole weight source). See | ||
| Design emission is owner-controlled via the trust root. Current committed | ||
| shares are **design = 5000 bps**, **prism = 5000 bps** (50/50). See | ||
| [`config/challenges.toml`](../../config/challenges.toml) and | ||
| [`DESIGN_CHALLENGE.md`](../DESIGN_CHALLENGE.md). | ||
|
|
||
|
|
@@ -22,8 +22,8 @@ Until then **prism holds `10000` bps** (sole weight source). See | |
| ```json | ||
| { "challenge_id": "design", "base_url": "http://design-challenge:8093", "weight": 1 } | ||
| ``` | ||
| 6. Keep `emission_share_bps = 0` for design until ceremony. Leaves still emit | ||
| (D24 exact-E); they simply carry zero emission share. | ||
| 6. Emission share is independent of bringing the service up: leaves still emit | ||
| (D24 exact-E) even at `0` bps. Current prod/staging shares are 5000/5000. | ||
|
|
||
| ## B. Keygen (`design_sk`) | ||
|
|
||
|
|
@@ -48,7 +48,7 @@ Goal: move weight from prism → design (sum must remain exactly **10000** bps). | |
| 5. Do **not** change design `challenge_scoring_version` or freeze pins in the | ||
| same ceremony unless intentionally bumping the scoring contract. | ||
|
|
||
| Default until this ceremony: **design = 0 bps**, **prism = 10000 bps**. | ||
| Current committed default: **design = 5000 bps**, **prism = 5000 bps**. | ||
|
|
||
| ## D. Admin winners tokens + OpenRouter | ||
|
|
||
|
|
@@ -69,6 +69,6 @@ approval; Elo annotate is deprecated / unused on the leaf path). | |
|
|
||
| ## E. Rollback emission | ||
|
|
||
| Re-sign challenges.toml with previous bps (design 0 / prism 10000), roll | ||
| validators. Challenge service can keep running; emission share alone changes | ||
| aggregation weight. | ||
| Re-sign challenges.toml with previous bps (e.g. design 2000 / prism 8000, or | ||
| design 0 / prism 10000), roll validators. Challenge service can keep running; | ||
| emission share alone changes aggregation weight. | ||
|
Comment on lines
+72
to
+74
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win Make the fresh seal the activation boundary in both runbooks. Re-signing and validator rollout do not modify an existing sealed bundle. Both procedures must state the environment-specific trust-root deployment, required consumer restarts, fresh sealing, and
As per coding guidelines: 📍 Affects 2 files
🤖 Prompt for AI AgentsSource: Coding guidelines |
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win
Remove the duplicate challenge-table header from both trust roots.
Each file contains two consecutive
[[challenges]]headers at Line 16. This creates an empty challenge entry and prevents the loader from producing the intended two-row body.config/challenges.toml#L16-L16: keep one[[challenges]]header before theprismrow.config/challenges.staging.toml#L16-L16: keep one[[challenges]]header before theprismrow.📍 Affects 2 files
config/challenges.toml#L16-L16(this comment)config/challenges.staging.toml#L16-L16🤖 Prompt for AI Agents