Skip to content

Commit 2bcd22b

Browse files
committed
v76: diagnose trade friction, retain experiment evidence and wait for dashboard readiness
1 parent b5f1c0a commit 2bcd22b

17 files changed

Lines changed: 447 additions & 36 deletions

‎README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,6 @@ For private phone access, see [SYNTA_REMOTE_ACCESS.md](SYNTA_REMOTE_ACCESS.md).
242242
The remote dashboard and master chat share mobile navigation; an existing v67/v68
243243
gateway can receive the [v69 repair](SYNTA_V69.md) without restarting the mission.
244244

245+
Strategy evidence, truthful learning comparisons and dashboard startup recovery: [SYNTA_V76.md](SYNTA_V76.md).
246+
245247
Dashboard v75 navigation, metric definitions and targeted upgrade: [SYNTA_V75.md](SYNTA_V75.md).

‎SYNTA_V76.md‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Synta v76: strategy evidence and dashboard recovery
2+
3+
The v75 package installed successfully in the supplied log, but its immediate HTTP check ran before port 8765 answered. v76 waits for the expected renderer for up to 60 seconds and prints service diagnostics on failure. This verifies local HTTP readiness only.
4+
5+
## Changes
6+
7+
- The trade explorer resets its caption when switching series. Recorded executions no longer inherit an empty-paper caption.
8+
- Historical series offer a zero-cost diagnostic using the same selected rule, lookback, signals and execution times. It separates signal returns from cost drag without changing archived reports or claiming that cost-free execution is available.
9+
- Execution receipts record the previous completed bar and signal used for the next opening fill. Spot equity, liquidation value and subsequent price movement remain distinct.
10+
- Fixed momentum/mean-reversion commissioning runs once per goal rather than generating another losing baseline every hour. The accepted master retains access to explicit backtest and sandbox tools to choose different experiments.
11+
- Goal work receives the actual previous hypothesis, test and tool states, plus recorded commissioning failures, instead of only a filename. Model-led decisions remain subject to evidence and resource checks.
12+
- Registering a proposal is not labeled an executed test. Forecast commitments, process exits and historical test receipts are reported separately.
13+
- Other-income cards show one representative per domain with the remaining receipts retained. This is presentation grouping, not proof that all ideas in a domain are identical.
14+
- Learning compares the shadow policy with the strongest recorded reference. Source-disjoint CPU training gates remain intact; blockers include group counts.
15+
- Known legacy Polish dashboard headings and descriptions render in English.
16+
17+
## What the screenshots establish
18+
19+
The selected historical example shows net loss around 8.21% and modeled costs around 0.0801 normalized capital units. This suggests costs are material; the new diagnostic measures their return impact using the archived report. With assumed 50 bps fees and 10 bps slippage per leg, entry spot friction is about 0.6%, not 3%. Later candle movement and estimated exit costs must be inspected separately.
20+
21+
The shadow replay Brier score of 0.5819 is worse than the prior-frequency reference of 0.5780. There is no evidence of accepted production weight updates in these screenshots. A completed research loop does not establish profitable behavior.
22+
23+
The RTX endpoint is still unreachable in the supplied Debian receipts. This release does not establish a repaired Windows connection, external income, phone routing or a profitable strategy. Windows policies and balances are preserved.
24+
25+
## Install
26+
27+
Use `tools/update-synta-v76.sh` pinned to this release commit. It supports installed v74-v76, preserves the current profile, stops the mission once, installs the package, starts the supervisor and waits for the dashboard. It retains goals, weights, ledgers, archived reports and external-action policy. Reload the browser once.
28+
29+
For a dashboard-only update, `tools/update-synta-dashboard.sh` remains available; it does not restart the mission and therefore does not activate the controller changes above.
30+
31+
## Changed code
32+
33+
`rlm/v100/{backtesting,trade_explorer,dashboard_layout,dashboard_insights,dashboard_health,market_research,income_work,research_contract,goal_compute}.py`, `tools/update-synta-v76.sh`, `tools/update-synta-dashboard.sh`, version metadata and regression tests. No new dependency.

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "rlms"
33
authors = [
44
{name = "Alex Zhang", email = "altzhang@mit.edu"},
55
]
6-
version = "0.1.3+v100.75"
6+
version = "0.1.3+v100.76"
77
description = "Recursive Language Models."
88
readme = "README.md"
99
license = "MIT"

‎rlm/v100/backtesting.py‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,13 @@ def simulate(
148148
"cash_before": before_cash,
149149
"cash_after": cash,
150150
"reference_price": price,
151+
"signal_available_at": known_at,
152+
"signal_previous_close": bars[previous]["close"],
153+
"signal_lookback_close": bars[previous - lookback]["close"],
154+
"signal_change": delta,
155+
"rule": rule,
156+
"lookback": lookback,
157+
"decision_scope": "Signal uses completed previous bars; fill at the next recorded open. Future prices are unavailable to the decision.",
151158
"fee_bps": fee_bps,
152159
"slippage_bps": slippage_bps,
153160
"equity_before": before_cash + before_units * price * (1 - slip) * (1 - fee),

‎rlm/v100/dashboard_health.py‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
"""Bounded dashboard startup checks after asynchronous systemd restart."""
2+
3+
import time
4+
5+
import requests
6+
7+
8+
def wait(seconds: int = 60) -> dict:
9+
if type(seconds) is not int or not 1 <= seconds <= 90:
10+
raise ValueError("Dashboard readiness budget must be 1..90 seconds")
11+
deadline = time.monotonic() + seconds
12+
detail = "No HTTP attempt completed"
13+
while time.monotonic() < deadline:
14+
try:
15+
response = requests.get(
16+
"http://127.0.0.1:8765/", timeout=min(2, max(0.1, deadline - time.monotonic()))
17+
)
18+
response.raise_for_status()
19+
if "mission-navigation" not in response.text or "Trade explorer" not in response.text:
20+
detail = "HTTP response is not the expected host dashboard renderer"
21+
else:
22+
return {
23+
"dashboard_ready": True,
24+
"url": "http://127.0.0.1:8765/",
25+
"scope": "HTTP renderer readiness only; not proof of model progress or phone routing",
26+
}
27+
except requests.RequestException as error:
28+
detail = str(error)[:300]
29+
time.sleep(min(1, max(0, deadline - time.monotonic())))
30+
raise RuntimeError("Dashboard did not become ready within the budget: " + detail)

‎rlm/v100/dashboard_insights.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
const p=panel('overview-panel','What is actually happening',$('cards'));p.replaceChildren();const h=document.createElement('h2');h.textContent='Results, work and learning';p.append(h);textField(p,'Verified revenue','Unavailable: no verified payment ledger connected');textField(p,'Current model-selected work',work.state||'No work receipt in this snapshot');textField(p,'Last work recorded',work.updated?new Date(work.updated*1000).toLocaleString():'unknown');textField(p,'Successful tool receipts in last experiment',work.successful_tool_receipts);textField(p,'Meaning','A source read or a successful process is not a validated experiment, a model update or earned money.');textField(p,'CPU shadow learning',policy.state||'No policy receipt');textField(p,'Verified outcomes used by CPU policy',policy.trained_outcomes);textField(p,'Gemma accepted updates in this run',r.accepted_weight_updates_this_run);textField(p,'Immediate blocker',work.error||r.learning_activity?.reason||r.paper_fee_source?.error||'None recorded in these receipts');
2323
detailsField(p,'Last experiment receipt',JSON.stringify(work,null,2),'overview-work');
2424
const income=$('income-view');if(income){const counts=new Map();for(const c of r.income_opportunities?.candidates||[]){const name=c.specification?.domain||'Unspecified domain';counts.set(name,(counts.get(name)||0)+1)}evidenceBars(income,'Research coverage by domain (proposals, not earnings)',[...counts],'proposals');evidenceBars(income,'Source acquisition quality',[['Distinct contents',sources.distinct_contents],['Unchanged rereads',sources.unchanged_rereads]],'retrievals');textField(income,'Outcome charts','No verified revenue or completed-test time series for these domains is recorded. Proposal counts and estimated rewards cannot supply a profit curve.');}
25-
const learning=$('goal-learning-view');if(learning){textField(learning,'CPU policy',policy.state||'unavailable');textField(learning,'Independent outcomes trained',policy.trained_outcomes);textField(learning,'Scored replay predictions',policy.prequential_samples);evidenceBars(learning,'CPU forecast replay comparison: lower Brier is better',[['Learned shadow',policy.prequential_brier],['Uniform reference',policy.prequential_samples>0?policy.uniform_baseline_brier:null],['Always flat',policy.prequential_flat_baseline_brier],['Prior frequency',policy.prequential_frequency_baseline_brier]],'Brier');textField(learning,'Score scope','Exploratory prequential replay on the same scored samples. Not profit, not Gemma training and not proof of a forward advantage.');}
25+
const learning=$('goal-learning-view');if(learning){textField(learning,'CPU policy',policy.state||'unavailable');textField(learning,'Independent outcomes trained',policy.trained_outcomes);textField(learning,'Scored replay predictions',policy.prequential_samples);if(policy.prequential_samples>0&&typeof policy.prequential_brier==='number'){const references=[policy.uniform_baseline_brier,policy.prequential_flat_baseline_brier,policy.prequential_frequency_baseline_brier].filter(x=>typeof x==='number'&&Number.isFinite(x));textField(learning,'Compared with strongest recorded reference',references.length&&policy.prequential_brier<Math.min(...references)?'Lower Brier in this replay only; forward advantage unproven':'No improvement over the strongest reference in this replay')}evidenceBars(learning,'CPU forecast replay comparison: lower Brier is better',[['Learned shadow',policy.prequential_brier],['Uniform reference',policy.prequential_samples>0?policy.uniform_baseline_brier:null],['Always flat',policy.prequential_flat_baseline_brier],['Prior frequency',policy.prequential_frequency_baseline_brier]],'Brier');textField(learning,'Score scope','Exploratory prequential replay on the same scored samples. Not profit, not Gemma training and not proof of a forward advantage.');}
2626
}
2727
2828
"""

0 commit comments

Comments
 (0)