docs: align CONTRIBUTING.fr.md with EN version parity - #203
Closed
Jah-yee wants to merge 79 commits into
Closed
Conversation
Update project-facing references across site/, contracts/, rounds/, predictor/, dashboard/, docs/, .github/, README, CONTRIBUTING, LICENSE, .pre-commit-config.yaml, dependabot.yml. Preserved (matches deployed ERC-20 contract, immutable on Arbitrum Sepolia): - AUG-POC token symbol - "Augure POC Token" token name - AugPocToken / IAugPocToken Solidity identifiers - DeployAugurePhase1 script identifier Forward-looking (rebrand-aligned): - post-DAO governance token AUG -> ARA - AugConverter -> AraConverter (future Phase 2 contract under new brand) White papers (Notion FR+EN) updated separately with a new Naming section documenting the rename rationale (Augur prediction-markets collision identified 2026-05-11) and a "POC token symbol preserved" clarification. Filename rename (AugPocToken.sol -> AraPocToken.sol, etc.), Solidity class refactor, repo/Vercel/Discord migration: separate PRs.
…can) Following the 2026-05-11 security audit, all three on-disk credential categories were rotated. No leak proven in git history; rotations were defense-in-depth given the .env files lived on a synced workspace folder for several weeks. - Pinata: new scoped key with reduced permissions (pinFileToIPFS + pinList only, 90-day expiry); 2FA enabled on the account. - Discord: 4 webhooks recreated with aratea-* naming, including a new product-updates webhook. GitHub Actions DISCORD_WEBHOOK_URL secret updated to point at the new build-log webhook. - Etherscan V2: new key issued; old key revoked. Smoke tests passed for all rotated credentials. X/Twitter and admin EOA not rotated this round (never on disk; see log for rationale).
Auto-posting to X is disabled and not planned to be re-enabled. Rather than rotating dormant credentials, the 4 X_* secrets were deleted from GitHub Actions repository secrets. The announce-release workflow gracefully soft-skips the X step when the env vars are missing (post-x.mjs lines 33-37), so no functional regression. If X auto-posting is reactivated later, new credentials will be issued fresh and added to the secrets store at that time.
The chore(rebrand) commit renamed file paths but left DeployAugurePhase1 references inside the script, test and verification files. forge build was failing on main because test/unit/DeployArateaPhase1.t.sol still imported script/DeployAugurePhase1.s.sol which no longer exists. AUG-POC token symbol and 'Augure POC Token' name are intentionally preserved on-chain per the POC immutability policy — only off-chain naming (contract identifiers, env vars, docs) is touched.
- check_run002_resolution.py: pulls fresh Kalshi snapshot for KXLOWTNYC-26MAY11, prints status/result per bin - finalize_run.py: patches runs/<id>/report.json + paper_bets.csv + POST_RUN.md once Kalshi has officially settled the event. Idempotent, exits non-zero if not yet settled.
NYC daily low on 2026-05-11 settled at 52-53°F (Kalshi bin B52.5 result=yes). Our position BUY NO on bin B50.5 (predicted P(YES)=14.6% vs market 36%) paid out 156 contracts at \.00 = +\.16 net. Scoring on this single datapoint: - Brier model: 0.0213 - Brier climatology: 0.0237 - Brier kalshi_mid: 0.1296 Model beats both baselines (directional only, N=1 — not statistically significant; the learning loop needs N>10 before any conclusion).
Adds schema_version=2 to run.json with intercept, feature_means and feature_stds extracted from the fitted sklearn pipeline. Downstream predictors can now reconstruct sigmoid(intercept + sum_i coef_i * (x_i - mean_i) / std_i) without re-fitting. Step 1/4 of the A/B testing infrastructure for Run 003.
Reconstructs the sklearn LR L2 model from runs_learning/<ts>/run.json
schema v2+ and runs closed-form inference at predict() time:
p_yes = sigmoid(intercept + Sigma coef_i * (x_i - mean_i) / std_i)
Sub-predictors (climatology / forecast_blend / ensemble) are composed
to materialise a record dict in the forward_*.json shape, so the same
feature extractors used at training time run at inference time. Same
code path on both sides.
Smoke-tested on KXLOWTNYC-26MAY13 (6 bins). LearnedPredictor diverges
from EnsemblePredictor by up to 0.149 in absolute terms, with the LR
resserrant the tail bins (T47 ensemble 0.196 -> learned 0.059, T54
ensemble 0.288 -> learned 0.139) and increasing weight on the median
bins. Behavior is qualitatively sound; the LR has clearly learned
something other than the raw vendor mean.
Known limitation: per-event sum of LR predictions is not constrained
to 1.0 (KXLOWTNYC-26MAY13 sums to 0.895 across 6 bins). Acceptable
for single-bin trade theses; backlog item if cross-bin Brier
comparisons become a thing.
Step 2/4 of the A/B testing infrastructure for Run 003.
…stry
CHAMPION.json declares the model registry, the current champion
(vendor_ensemble — promoted to that role by Run 002), the promotion
rule (rolling-mean Brier over N>=10 with binomial sign test p<0.10),
and the list of models in flight (champion + challengers + baseline).
live_run.py fetches a Kalshi event live, runs every model from the
registry against the target market, snapshots quotes and computes
positions:
- the champion gets a paper position with a ledger row in
paper_bets.csv (single P&L exposure)
- challengers and baselines get shadow positions in report.json
(same side/size for Brier comparability, no ledger row)
Schema v2 report.json includes models[], champion_at_time_of_run,
edge_bps_by_model and challenger_shadow_positions[]. Smoke-tested on
KXLOWTNYC-26MAY13-B51.5: champion p_yes=0.140, learned_v2=0.180,
kalshi_mid=0.325. Both model and challenger agree on BUY NO.
Step 3/4 of the A/B testing infrastructure for Run 003.
Top-level dispatcher on report.schema_version:
- v1 path (Run 001 / 002): existing code untouched — backward compat
verified on Run 002 dry-run (produces identical Brier and POST_RUN.md
output to the existing patched state).
- v2 path (Run 003+): iterates over report.models[], computes Brier per
model, actual P&L for the champion (from champion_position) and
theoretical P&L for each shadow position. Generates scoring.by_model[]
with ranking_by_brier and champion_is_best flag. Patches the ledger
on the champion bet_id only. Renders POST_RUN.md from scratch in
multi-model format.
The v2 POST_RUN highlights the per-run Brier ranking (best gets a star)
and reminds the reader of the promotion rule (rolling-mean Brier over
N>=10 with sign test p<0.10).
Step 4/4 of the A/B testing infrastructure for Run 003.
Champion vendor_ensemble (p_yes=0.140) + challenger learned_v2 (p_yes=0.180) + baseline kalshi_mid (p_yes=0.345). Both model and challenger agree on BUY NO. Paper position: 152 contracts NO @ 0.66 entry, $99.84 cost. Settlement window: 2026-05-14 11-13h UTC. Finalize via finalize_run.py --run 003 after Kalshi settles.
…seline) + first multi-model run (Elladriel80#55) * feat(learning): persist intercept/means/stds for live inference Adds schema_version=2 to run.json with intercept, feature_means and feature_stds extracted from the fitted sklearn pipeline. Downstream predictors can now reconstruct sigmoid(intercept + sum_i coef_i * (x_i - mean_i) / std_i) without re-fitting. Step 1/4 of the A/B testing infrastructure for Run 003. * feat(predictor): LearnedPredictor for live inference Reconstructs the sklearn LR L2 model from runs_learning/<ts>/run.json schema v2+ and runs closed-form inference at predict() time: p_yes = sigmoid(intercept + Sigma coef_i * (x_i - mean_i) / std_i) Sub-predictors (climatology / forecast_blend / ensemble) are composed to materialise a record dict in the forward_*.json shape, so the same feature extractors used at training time run at inference time. Same code path on both sides. Smoke-tested on KXLOWTNYC-26MAY13 (6 bins). LearnedPredictor diverges from EnsemblePredictor by up to 0.149 in absolute terms, with the LR resserrant the tail bins (T47 ensemble 0.196 -> learned 0.059, T54 ensemble 0.288 -> learned 0.139) and increasing weight on the median bins. Behavior is qualitatively sound; the LR has clearly learned something other than the raw vendor mean. Known limitation: per-event sum of LR predictions is not constrained to 1.0 (KXLOWTNYC-26MAY13 sums to 0.895 across 6 bins). Acceptable for single-bin trade theses; backlog item if cross-bin Brier comparisons become a thing. Step 2/4 of the A/B testing infrastructure for Run 003. * feat(predictor): live_run.py multi-model wrapper + CHAMPION.json registry CHAMPION.json declares the model registry, the current champion (vendor_ensemble — promoted to that role by Run 002), the promotion rule (rolling-mean Brier over N>=10 with binomial sign test p<0.10), and the list of models in flight (champion + challengers + baseline). live_run.py fetches a Kalshi event live, runs every model from the registry against the target market, snapshots quotes and computes positions: - the champion gets a paper position with a ledger row in paper_bets.csv (single P&L exposure) - challengers and baselines get shadow positions in report.json (same side/size for Brier comparability, no ledger row) Schema v2 report.json includes models[], champion_at_time_of_run, edge_bps_by_model and challenger_shadow_positions[]. Smoke-tested on KXLOWTNYC-26MAY13-B51.5: champion p_yes=0.140, learned_v2=0.180, kalshi_mid=0.325. Both model and challenger agree on BUY NO. Step 3/4 of the A/B testing infrastructure for Run 003. * feat(predictor): finalize_run multi-model dispatcher (schema v2) Top-level dispatcher on report.schema_version: - v1 path (Run 001 / 002): existing code untouched — backward compat verified on Run 002 dry-run (produces identical Brier and POST_RUN.md output to the existing patched state). - v2 path (Run 003+): iterates over report.models[], computes Brier per model, actual P&L for the champion (from champion_position) and theoretical P&L for each shadow position. Generates scoring.by_model[] with ranking_by_brier and champion_is_best flag. Patches the ledger on the champion bet_id only. Renders POST_RUN.md from scratch in multi-model format. The v2 POST_RUN highlights the per-run Brier ranking (best gets a star) and reminds the reader of the promotion rule (rolling-mean Brier over N>=10 with sign test p<0.10). Step 4/4 of the A/B testing infrastructure for Run 003. * feat(runs): Run 003 — first multi-model live capture (NYC LOWT B51.5) Champion vendor_ensemble (p_yes=0.140) + challenger learned_v2 (p_yes=0.180) + baseline kalshi_mid (p_yes=0.345). Both model and challenger agree on BUY NO. Paper position: 152 contracts NO @ 0.66 entry, $99.84 cost. Settlement window: 2026-05-14 11-13h UTC. Finalize via finalize_run.py --run 003 after Kalshi settles. --------- Co-authored-by: Elladriel80 <178308515+Elladriel80@users.noreply.github.com>
…dashboard section (Elladriel80#56) * feat(learning): persist intercept/means/stds for live inference Adds schema_version=2 to run.json with intercept, feature_means and feature_stds extracted from the fitted sklearn pipeline. Downstream predictors can now reconstruct sigmoid(intercept + sum_i coef_i * (x_i - mean_i) / std_i) without re-fitting. Step 1/4 of the A/B testing infrastructure for Run 003. * feat(predictor): LearnedPredictor for live inference Reconstructs the sklearn LR L2 model from runs_learning/<ts>/run.json schema v2+ and runs closed-form inference at predict() time: p_yes = sigmoid(intercept + Sigma coef_i * (x_i - mean_i) / std_i) Sub-predictors (climatology / forecast_blend / ensemble) are composed to materialise a record dict in the forward_*.json shape, so the same feature extractors used at training time run at inference time. Same code path on both sides. Smoke-tested on KXLOWTNYC-26MAY13 (6 bins). LearnedPredictor diverges from EnsemblePredictor by up to 0.149 in absolute terms, with the LR resserrant the tail bins (T47 ensemble 0.196 -> learned 0.059, T54 ensemble 0.288 -> learned 0.139) and increasing weight on the median bins. Behavior is qualitatively sound; the LR has clearly learned something other than the raw vendor mean. Known limitation: per-event sum of LR predictions is not constrained to 1.0 (KXLOWTNYC-26MAY13 sums to 0.895 across 6 bins). Acceptable for single-bin trade theses; backlog item if cross-bin Brier comparisons become a thing. Step 2/4 of the A/B testing infrastructure for Run 003. * feat(predictor): live_run.py multi-model wrapper + CHAMPION.json registry CHAMPION.json declares the model registry, the current champion (vendor_ensemble — promoted to that role by Run 002), the promotion rule (rolling-mean Brier over N>=10 with binomial sign test p<0.10), and the list of models in flight (champion + challengers + baseline). live_run.py fetches a Kalshi event live, runs every model from the registry against the target market, snapshots quotes and computes positions: - the champion gets a paper position with a ledger row in paper_bets.csv (single P&L exposure) - challengers and baselines get shadow positions in report.json (same side/size for Brier comparability, no ledger row) Schema v2 report.json includes models[], champion_at_time_of_run, edge_bps_by_model and challenger_shadow_positions[]. Smoke-tested on KXLOWTNYC-26MAY13-B51.5: champion p_yes=0.140, learned_v2=0.180, kalshi_mid=0.325. Both model and challenger agree on BUY NO. Step 3/4 of the A/B testing infrastructure for Run 003. * feat(predictor): finalize_run multi-model dispatcher (schema v2) Top-level dispatcher on report.schema_version: - v1 path (Run 001 / 002): existing code untouched — backward compat verified on Run 002 dry-run (produces identical Brier and POST_RUN.md output to the existing patched state). - v2 path (Run 003+): iterates over report.models[], computes Brier per model, actual P&L for the champion (from champion_position) and theoretical P&L for each shadow position. Generates scoring.by_model[] with ranking_by_brier and champion_is_best flag. Patches the ledger on the champion bet_id only. Renders POST_RUN.md from scratch in multi-model format. The v2 POST_RUN highlights the per-run Brier ranking (best gets a star) and reminds the reader of the promotion rule (rolling-mean Brier over N>=10 with sign test p<0.10). Step 4/4 of the A/B testing infrastructure for Run 003. * feat(runs): Run 003 — first multi-model live capture (NYC LOWT B51.5) Champion vendor_ensemble (p_yes=0.140) + challenger learned_v2 (p_yes=0.180) + baseline kalshi_mid (p_yes=0.345). Both model and challenger agree on BUY NO. Paper position: 152 contracts NO @ 0.66 entry, $99.84 cost. Settlement window: 2026-05-14 11-13h UTC. Finalize via finalize_run.py --run 003 after Kalshi settles. * chore(features): refresh brier_delta + status from train_learned v2 schema run * feat(automation): autonomous daily trading cron via daily_auto.py + GH Actions * feat(dashboard): live runs section + rename training sections for clarity * feat(dashboard): predictor first in nav, token+rounds grouped together --------- Co-authored-by: Elladriel80 <178308515+Elladriel80@users.noreply.github.com>
* docs: add contributor onboarding templates * docs: apply review feedback (3 small adjustments) - Add 'source' to venv activation command in CONTRIBUTING.md - Remove the anti-AI clause from docs/bounty-mechanism.md - Add an 'n/a - not submitted for valuation' hint in the PR template Co-authored-by: sddvacav <121672534+sddvacav@users.noreply.github.com> --------- Co-authored-by: sddvacav <sddvacav@users.noreply.github.com> Co-authored-by: Elladriel80 <178308515+Elladriel80@users.noreply.github.com> Co-authored-by: sddvacav <121672534+sddvacav@users.noreply.github.com>
Three-tier presentation of /predictor synced to a ?level= querystring (default 1, refresh- and share-safe). Level 1 is a public weather card with dynamic question building from event_ticker, location code, date, and bin threshold, plus champion attribution, confidence gauge, and YES/NO badge. Level 2 lists the parallel models with explicit champion/challenger/baseline roles, treats the market as a separate benchmark (kalshi_mid_baseline filtered as duplicate), and shows the Brier trajectory with a legend keyed to the chart's actual colors. Level 3 keeps the original expert view intact. Adds full EN/FR i18n coverage for layers / public / informed / expert sections, with location and unit maps so the dynamic question reads naturally for any (variable, location, threshold) triple.
The Aratea token represents a share of NAV and a governance right. It is not designed to be traded on secondary markets, so a per-supply cap to protect a market price is not relevant. Quality is guaranteed off-chain by the valuation rubric, the token-weighted vote on individual valuations above 0.01 BTC, the new-entrant cooldown, the slashing mechanism, and the annual audit (white paper section 7.7). Source: - delete src/rounds/MonthlyMintCap.sol and the 2 cap-only test files - RoundRegistry.sol: remove import, using, 3 mappings, executeRound cap-check, supplyAtMonthStart / mintedInMonth views; refresh natspec - IRoundRegistry.sol: remove MonthlyCapExceeded custom error and the 2 view declarations; refresh natspec - AugPocToken.sol: refresh natspec (no caller-side cap) Tests: - 89 unit/fuzz + 6 invariants all green locally (forge 1.7.1) - 2 cap-only unit tests removed, 2 reformulated; 1 fuzz test reformulated; 2 cap-only invariants removed Docs (FR + EN): - contracts/docs: ARCHITECTURE, SECURITY, ROUND-LIFECYCLE, DEPLOYMENT, README updated to reflect no on-chain cap - docs/architecture.md, docs/token_model.md, docs/value_engine.md: section 7.7 garde-fous updated, cross-reference to draft statutes added Refs: white paper section 7.7; draft statutes art. 4 bis, art. 32, art. 31.
… measure Two small follow-ups after PR Elladriel80#79 went live: 1. oracle-poc/keeper/.env.example: bump RECLAIM_WEATHER_SOURCE_ADDRESS from the orphaned v1 (0x6Bf18DF...502f) to the working v2 deployed 2026-05-17 (0x23eF9B17002944941712770b292B6094C97BAe76). Comment explains why v1 is orphaned (deployed Reclaim verifier returns false on success; see POC-NOTES.md §1.9 + §2.5). 2. oracle-poc/docs/POC-NOTES.md §3.1 + §3.2: record first live gas measure. Deployment v2 = 927 122 gas (delta -17 305 vs v1 from removing the InvalidProof() error). First cold-storage submitMeasurement = 315 944 gas (higher than the initial spec estimate of 150-200k, explanation in the updated table). End-to-end live keeper run captured the full sequence: keeper_start → iteration_start → nws_observation (KJFK, 18°C) → proof_built (1312 bytes, T+39s) → measurement_submitted (T+41s) tx 0x9cc97af9ecfc45aaac22ab3365b41db8eecc8b055b1924d45d59e291cdc55718 block 269080980, status=1 cast call getLatest(keccak("KJFK"), keccak("TEMP_C")) returns (18000, 1779008400, ...) as expected. The remaining §3.2 cells (hot storage / revert anti-replay / revert window) stay TODO — to fill after a few more iterations expose those paths in live logs.
…r + untrack legacy global aggregate
… skill extracts Source materials for the sizing portfolio-heat work : RFC drafted from the exploration of tradermonty/claude-trading-skills (position-sizer, edge-strategy-reviewer, backtest-expert), plus a README pointing to the upstream skill repo.
- src/simulation/clusters.py : BetContext, NOAARegion, parse_city_from_ticker (gère daily YYMMMDD vs monthly YYMMM + strip du M monthly), mapping CITY_TO_NOAA pour les villes présentes dans data/markets/, helper same_settlement_window. - tests/test_clusters.py : 20 tests couvrant parsing daily/monthly, le piège LV vs TLV, le piège MIA vs MIAM, market type inconnu, malformed date, ville absente du mapping, bornes 0/3/4 j de la fenêtre. Prépare le wrapper PortfolioHeat / capped_kelly_size (commit suivant). Référence : research/rfc/RFC-portfolio-heat-and-correlation-caps.md
Ajoute PortfolioHeat (état in-memory des paris non-settled) et
capped_kelly_size (wrapper sur kelly_fractional_size qui applique 3 caps
en strictest-wins) :
- MAX_FRACTION_PER_BET = 5 % — inchangé.
- MAX_PORTFOLIO_HEAT = 10 % — somme des fractions engagées non-settled.
- MAX_CLUSTER_EXPOSURE = 6 % — somme par cluster (région NOAA ×
fenêtre settlement ≤ 3 j).
Refus pur quand la capacité résiduelle tombe à 0 — aucun redimensionnement
à epsilon, pour ne pas polluer l'évaluation du tournoi predictor.
kelly_fractional_size n'est PAS modifié — uniquement appelé par le wrapper.
daily_auto.py n'est PAS câblé dans cette PR.
- tests/test_portfolio_heat.py : 11 tests couvrant heat cap, cluster cap,
clusters indépendants, settle, refus pur, strictest-wins (3 cas),
bankroll nul, edge nul, register manuel.
- docs/sizing.md : justification des 3 constantes + ordre d'application.
Référence : research/rfc/RFC-portfolio-heat-and-correlation-caps.md
Backtest was iterating over all markets (centers + tails) while daily_auto._select_target_bins filters strike_type=='between'. Tail bins aggregate cumulative probability mass and dominated the per-event normalization, collapsing top-1 onto a tail and exploding the Brier on central outcomes. Smoke before fix: BSS=-0.32, top-1 accuracy=7.5%, 402 markets (centers+tails) Smoke after fix: BSS=-0.03, top-1 accuracy=27.1%, 268 markets (centers only) Regenerates paper_bets_backtest.csv since the previous 151 rows were produced before the fix and are unreliable.
…ew cities) An exhaustive Kalshi API probe on 2026-05-17 revealed two compounding bugs: 1. KXHIGH* never returned any settled events. Kalshi actually uses KXHIGHT* (with a trailing T) for daily HIGH temperature series. All 11 KXHIGH* entries in SERIES_MAP were wrong since the origin of the repo. This is why every resolved live run (002, 003, 004, 005) is a LOW temperature run: parse_market silently rejected every HIGH market. 2. PR Elladriel80#82 EVENT_SERIES_LIST contained 6 invented tickers (KXHIGHNY, KXLOWTLAX, KXHIGHTSFO, KXLOWTDC, KXLOWTSEA, KXHIGHTPHX) that didn't match any SERIES_MAP key. Half the multi-event capture produced 0 captures without warning. This rewrite: - Rebuilds SERIES_MAP with 29 confirmed series prefixes covering 18 cities (11 with HIGH+LOW, 7 with LOW only). Detroit excluded (no settled events). - Adds 7 new cities to CITIES with NWS station coordinates: Atlanta, Dallas, Las Vegas, Minneapolis, Phoenix, Seattle, Washington. - Updates EVENT_SERIES_LIST to 16 series chosen for geographic diversity and Kalshi liquidity (~48 captures/day max with MAX_BINS_PER_EVENT=3). - Adds startup warning in daily_auto.step_capture that lists any EVENT_SERIES_LIST entry not in SERIES_MAP, so future silent-skip bugs of this kind are loud and immediately visible. Smoke validated 2026-05-17: 6-series test (NYC LOW + SFO/DC/ATL HIGH + DAL LOW + LV HIGH) returns 240 markets across all 6 series. SFO HIGH shows BSS=+0.110 — the first strictly positive Brier skill score on this repo, suggesting climatology carries genuine signal on stable Pacific marine climates. Future captures will finally include HIGH temperature predictions, which the predictor lineup (vendor_ensemble champion + learned_v2 challenger + kalshi_mid baseline) has always been able to score but was never given the chance to score.
- PortfolioHeat.from_ledger(ledger_path, bankroll, *, on_unknown_ticker=...) reconstruit l'état des paris non-settled depuis paper_bets.csv. Pas de persistance disque séparée : le ledger est la source de vérité unique, l'état in-memory est régénéré à chaque run de daily_auto. - _bet_context_from_paper_bet : helper privé qui consomme un PaperBet typé (sortie de Ledger.read_all()) et construit le BetContext. Utilise event_ticker (sans strike) pour le clustering — pas market_ticker. - Guard bet_id unique sur register() : raise ValueError sur duplicate. Idempotent sur le append-only ledger, mais protège contre un bug futur du driver. - 9 tests test_portfolio_from_ledger.py + 1 test register_duplicate. - 41 tests sizing/clusters/portfolio_heat verts, aucune régression. Référence : research/rfc/RFC-portfolio-heat-and-correlation-caps.md §3 (la persistance state.json envisagée initialement est abandonnée, le ledger fait foi).
…du sizing edge-based Remplace _adaptive_size_usd (sizing edge-based $50-$300) par capped_kelly_size (quart-Kelly + 3 caps : per-trade 5 %, portfolio heat 10 %, cluster 6 %). Sizing : - _compute_current_bankroll() : marqué-au-market = starting + sum(P&L settled). Fail-fast RuntimeError si < $200 (signal de corruption ledger / bug settle). - step_capture() reconstruit PortfolioHeat depuis le ledger AVANT la boucle, affiche bankroll + heat + détail des paris non-settled. - _size_with_caps() : wrapper testable autour de capped_kelly_size (extrait pour pouvoir tester la décision sizing sans mocks Kalshi/Open-Meteo). - _capture_one_bin() reçoit portfolio + current_bankroll, skip strict (captured=False, reason='cap_atteint') si caps saturés — refus pur, aucun redimensionnement à epsilon. - portfolio.register(bet_ctx) APRÈS confirmation d'écriture au ledger : invariant 'registered = écrit au disque' préservé. Defensive : - try/except ValueError autour de _size_with_caps : si event_ticker pointe sur une ville absente de CITY_TO_NOAA (drift env-override), log la ville extraite + skip, ne crashe pas le run. Symétrique au validateur unknown_series existant en début de step_capture. Suppression pure : - _adaptive_size_usd (fonction + tous les call sites) - SIZE_USD_BASE (constante + lecture env ARATEA_SIZE_USD) - Mentions ARATEA_SIZE_USD dans docstring + commentaire env-override Bonus traçabilité : - Le report.json notes incluent maintenant Kelly capped size + bankroll + portfolio_heat_after_register=X.X% (heat prédictive calculée avant register). Tests (7 nouveaux) : - _compute_current_bankroll : sums P&L, ignore unresolved, fail-fast. - _size_with_caps : zéro quand caps saturés, per-trade cap sur portfolio vierge, garde-fou event_ticker vs market_ticker. - _capture_one_bin : skip + log explicite sur cap_atteint (via mocks minimaux MagicMock + monkeypatch parse_market). 53 tests verts (+1 test_chronological_split intact, +20 clusters, +12 portfolio_heat, +9 from_ledger, +7 nouveaux daily_auto_caps_wiring). Référence : research/rfc/RFC-portfolio-heat-and-correlation-caps.md
…s ledger RFC §7 (nouvelle section) : trace les 2 PRs qui réalisent le RFC. - PR Elladriel80#85 : caps in-memory (mergée 2026-05-17) - PR #<N> : câblage daily_auto + reconstruction depuis ledger - Mention PR A (widen daily_auto) qui a finalement mergé avant les caps : PR #<N> remplit le rôle de safeguard rétrospectif sur le débit ×48. - Frontmatter passe de 'draft' à 'implémenté complet'. - Mention explicite : la PR persistance state.json envisagée initialement est abandonnée, le ledger est la source de vérité unique. - Substituer <N> par le numéro de PR effectif et <JJ> par la date du jour AVANT merge final (TODO pour la review). docs/sizing.md : nouvelle section 'Reconstruction au démarrage' qui documente : - Pas de state.json séparé, ledger fait foi - Calcul bankroll marqué-au-market + seuil fail-fast 200 USD - Politique on_unknown_ticker (warn/raise/skip) - Guard bet_id unique sur register() - Index des tests ajoutés.
This reverts commit 96a5605.
Ajoute HybridSample, BacktestRunRecord, BacktestModel, BacktestResolution, BacktestSummary et les champs nouveaux de PredictorManifest (backtest_runs, live_runs_total, backtest_runs_total, hybrid_sample, backtest_summary, max_runs_in_manifest). Helpers ajoutés : seriesFromEventTicker (extrait le préfixe Kalshi d'un event_ticker) et isBacktestRunNaive (true si l'un des modèles d'un run backtest porte naive_uses_current_forecast=true). Aucun composant n'est touché ici : c'est la marche préparatoire avant les nouvelles vues N_eff / backtest table / filtres.
Nouveaux composants pour le schema v3 du manifest predictor : - NEffSection : section pleine largeur (Layer 3) ou compacte (Layer 2) pour HybridSample. Big number N_eff + décomposition N_live + α × N_backtest_strict, status vs gate Phase 1, NAIVE-excluded en informatif, lien GitHub vers CONVENTION §6.bis. - BacktestRunsTable : table client-side dédiée aux replay records (schema_version « 2-backtest »). Pagination locale 25/load-more, badge NAIVE inline quand un modèle porte naive_uses_current_forecast=true. Reçoit ses labels en prop (pattern existant pour client tables). - FilterBar : barre sticky multi-select (chips) bindée à l'URL ?series=...&status=... via router.replace shallow. Le filtrage applicatif reste côté serveur (la page lit searchParams et filtre avant render). Labels i18n ajoutés dans fr.tsx + en.tsx (predictor.n_eff_section, predictor.filters, predictor.sections.backtest_*, components.backtest_table) en respectant la shape Dictionary dérivée de en.
… /predictor Layer 3 (Expert) : - NEffSection pleine largeur juste après les Counters - FilterBar sticky (séries + statut) entre Counters et section Live - Nouvelle section F. Runs backtest après section E. (Brier chart) - Filtres séries/statut appliqués côté serveur sur LiveRunsTable et BacktestRunsTable avant render ; URL ?series=...&status=... source de vérité Layer 2 (Informed) : - NEffSection compact tout en haut, sous l'intro (big number + 1 ligne) - Pas de filtres, pas de table backtest Layer 1 (Public) : aucun changement. Décision arbitrée : - Filtre cluster NOAA droppé (pas dans manifest, pas de mapping ville→cluster côté dashboard) ; remplacé par filtre Série unique sur le préfixe ticker - RunHistoryTable non touchée (3 runs seulement, pas de runs_total) - Lien CONVENTION §6.bis pointe vers GitHub (slug Elladriel80/Aratea) Helpers : parseCsvParam, filterLiveRuns, filterBacktestRuns, distinctSeries dans page.tsx.
…ontière RSC
Le label 'Showing X of Y' était défini comme function (visible, total) => string
dans les locales. Quand on le passait à BacktestRunsTable (client component)
via labels prop, Next.js refuse la sérialisation (Functions cannot be passed
directly to Client Components).
Solution : remplacer la fonction par 'showing_template' avec placeholders
{visible} et {total}, et faire la substitution côté client dans
BacktestRunsTable via helper renderShowing. Pas de 'use server' nécessaire,
pas d'autre client component qui devrait recevoir des fonctions de dict.
Adds missing sections to match CONTRIBUTING.md: - Anti-bounty-platform clause (no Opire/Algora/automated farming) - Local setup instructions (predictor, contracts, dashboard, static site) - Code style and pre-commit safety checks - How to propose a patch section - Additional items in What is NOT valued Fixes Elladriel80#197
|
@Jah-yee is attempting to deploy a commit to the JSL's projects Team on Vercel. A member of the Team first needs to authorize it. |
Contributor
Author
|
Friendly ping — any updates on the CONTRIBUTING.fr.md EN/FR parity alignment? Happy to address any feedback. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #197 — add missing sections to CONTRIBUTING.fr.md to match EN version.
Added sections:
Content translated from EN CONTRIBUTING.md into French. No new substantive policy changes — purely parity alignment.