diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a7b25f5..8fa3cfa 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,8 +22,11 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run test suite - working-directory: kernel/tests - run: python -m unittest discover -s . -p 'test_*.py' -v + run: | + export PYTHONPATH=. + python quickstart.py --init-only + touch kernel/authority_queue.json kernel/court_records.json economy/transactions.jsonl economy/revenue.json + python -m unittest discover kernel/tests -v - name: Run governance simulation run: python examples/simulate_governance.py diff --git a/kernel/federation.py b/kernel/federation.py index 3d70ba1..bb0e8f6 100644 --- a/kernel/federation.py +++ b/kernel/federation.py @@ -1059,6 +1059,8 @@ def snapshot(self, *, bound_org_id='', admission_registry=None): def _default_http_post_json(url, data): + if not url.lower().startswith(('http://', 'https://')): + raise FederationDeliveryError('Invalid URL scheme: must be http or https') request = urllib.request.Request( url, data=json.dumps(data).encode('utf-8'), @@ -1080,6 +1082,8 @@ def _default_http_post_json(url, data): def _default_http_get_json(url): + if not url.lower().startswith(('http://', 'https://')): + raise FederationDeliveryError('Invalid URL scheme: must be http or https') request = urllib.request.Request(url, method='GET') try: with urllib.request.urlopen(request, timeout=10) as response: diff --git a/kernel/treasury.py b/kernel/treasury.py index ae13785..aeef665 100644 --- a/kernel/treasury.py +++ b/kernel/treasury.py @@ -2456,6 +2456,8 @@ def _json_rpc_request(rpc_url, method, params=None, *, timeout_seconds=10): rpc_url = str(rpc_url or '').strip() if not rpc_url: raise ValueError('rpc_url is required') + if not rpc_url.lower().startswith(('http://', 'https://')): + raise ValueError('Invalid RPC URL scheme: must be http or https') payload = { 'jsonrpc': '2.0', 'id': f'rpc_{uuid.uuid4().hex[:12]}', diff --git a/kernel/workspace.py b/kernel/workspace.py index 0fa98c4..7d0a6b5 100644 --- a/kernel/workspace.py +++ b/kernel/workspace.py @@ -1049,6 +1049,8 @@ def _federation_claims_dict(claims): return dict(claims) if hasattr(claims, 'to_dict'): return claims.to_dict() + if hasattr(claims, '__dict__'): + return vars(claims) return {}