feat(omnl): settlement terminal, compliance gates, and HYBX integration foundation
Some checks failed
CI/CD Pipeline / Solidity Contracts (push) Failing after 1m12s
CI/CD Pipeline / Security Scanning (push) Successful in 2m21s
CI/CD Pipeline / Lint and Format (push) Failing after 36s
CI/CD Pipeline / Terraform Validation (push) Failing after 22s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 25s
HYBX OMNL TypeScript & anchor / token-aggregation build + reconcile artifact (push) Failing after 23s
Validation / validate-genesis (push) Successful in 26s
Validation / validate-terraform (push) Failing after 21s
Validation / validate-kubernetes (push) Failing after 9s
Validation / validate-smart-contracts (push) Failing after 8s
Validation / validate-security (push) Failing after 1m15s
Validation / validate-documentation (push) Failing after 15s
OMNL reconcile anchor / Run omnl:reconcile and upload artifacts (push) Failing after 26s
Verify Deployment / Verify Deployment (push) Failing after 56s
Some checks failed
CI/CD Pipeline / Solidity Contracts (push) Failing after 1m12s
CI/CD Pipeline / Security Scanning (push) Successful in 2m21s
CI/CD Pipeline / Lint and Format (push) Failing after 36s
CI/CD Pipeline / Terraform Validation (push) Failing after 22s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 25s
HYBX OMNL TypeScript & anchor / token-aggregation build + reconcile artifact (push) Failing after 23s
Validation / validate-genesis (push) Successful in 26s
Validation / validate-terraform (push) Failing after 21s
Validation / validate-kubernetes (push) Failing after 9s
Validation / validate-smart-contracts (push) Failing after 8s
Validation / validate-security (push) Failing after 1m15s
Validation / validate-documentation (push) Failing after 15s
OMNL reconcile anchor / Run omnl:reconcile and upload artifacts (push) Failing after 26s
Verify Deployment / Verify Deployment (push) Failing after 56s
Add operator settlement terminal UI/API, swift-listener service, compliance idempotency gates, GRU reserve dashboards, and @dbis/integration-foundation for typed HYBX/ISO adapter contracts. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -16,7 +16,18 @@ import base64
|
||||
|
||||
# Import base configuration tool
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
from configure_network import NetworkConfigurator, Colors, print_header, print_success, print_error, print_warning, print_info
|
||||
from configure_network import (
|
||||
NetworkConfigurator,
|
||||
Colors,
|
||||
print_header,
|
||||
print_success,
|
||||
print_error,
|
||||
print_warning,
|
||||
print_info,
|
||||
input_yes_no,
|
||||
input_int,
|
||||
input_with_default,
|
||||
)
|
||||
|
||||
class AdvancedNetworkConfigurator(NetworkConfigurator):
|
||||
"""Extended network configurator with advanced options"""
|
||||
|
||||
@@ -135,7 +135,10 @@ class ConfigurationValidator:
|
||||
if not self._validate_cidr(subnet_cidr):
|
||||
self.errors.append(f"Invalid {subnet_name} subnet: {subnet_cidr}. Must be valid CIDR notation")
|
||||
else:
|
||||
subnet_network, subnet_mask = self._parse_cidr(subnet_cidr)
|
||||
parsed_subnet = self._parse_cidr(subnet_cidr)
|
||||
if parsed_subnet is None:
|
||||
continue
|
||||
subnet_network, subnet_mask = parsed_subnet
|
||||
if subnet_network and not self._is_subnet_of(subnet_network, subnet_mask, vnet_network, vnet_mask):
|
||||
self.errors.append(f"{subnet_name} subnet {subnet_cidr} is not within VNet {vnet_address}")
|
||||
if subnet_mask < vnet_mask:
|
||||
|
||||
@@ -80,7 +80,7 @@ def input_with_default(prompt: str, default: str = "", validate_func=None) -> st
|
||||
continue
|
||||
return value
|
||||
|
||||
def input_int(prompt: str, default: int = 0, min_val: int = None, max_val: int = None) -> int:
|
||||
def input_int(prompt: str, default: int = 0, min_val: Optional[int] = None, max_val: Optional[int] = None) -> int:
|
||||
"""Get integer input with validation"""
|
||||
while True:
|
||||
try:
|
||||
@@ -161,7 +161,7 @@ def validate_chain_id(chain_id: str) -> bool:
|
||||
class NetworkConfigurator:
|
||||
def __init__(self, project_root: Path):
|
||||
self.project_root = project_root
|
||||
self.config = {}
|
||||
self.config: Dict[str, Any] = {}
|
||||
self.backup_dir = project_root / ".config-backup"
|
||||
|
||||
def backup_existing_files(self):
|
||||
@@ -252,12 +252,14 @@ class NetworkConfigurator:
|
||||
|
||||
# Subnets
|
||||
print_info("\nSubnet Configuration")
|
||||
self.config['network']['subnets'] = {
|
||||
network_cfg: Dict[str, Any] = dict(self.config['network'])
|
||||
network_cfg['subnets'] = {
|
||||
'validators': input_with_default("Validators subnet (CIDR)", "10.0.1.0/24", validate_cidr),
|
||||
'sentries': input_with_default("Sentries subnet (CIDR)", "10.0.2.0/24", validate_cidr),
|
||||
'rpc': input_with_default("RPC subnet (CIDR)", "10.0.3.0/24", validate_cidr),
|
||||
'aks': input_with_default("AKS subnet (CIDR)", "10.0.4.0/24", validate_cidr),
|
||||
}
|
||||
self.config['network'] = network_cfg
|
||||
|
||||
# Node counts
|
||||
print_info("\nNode Configuration")
|
||||
|
||||
48
scripts/configure_network.py
Normal file
48
scripts/configure_network.py
Normal file
@@ -0,0 +1,48 @@
|
||||
"""Import shim for configure-network.py (hyphenated filename)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
from pathlib import Path
|
||||
from typing import Any, Callable
|
||||
|
||||
_impl_path = Path(__file__).with_name("configure-network.py")
|
||||
_spec = importlib.util.spec_from_file_location("_configure_network_impl", _impl_path)
|
||||
if _spec is None or _spec.loader is None:
|
||||
raise ImportError(f"Cannot load {_impl_path}")
|
||||
_impl = importlib.util.module_from_spec(_spec)
|
||||
_spec.loader.exec_module(_impl)
|
||||
|
||||
NetworkConfigurator = _impl.NetworkConfigurator
|
||||
Colors = _impl.Colors
|
||||
print_header: Callable[..., None] = _impl.print_header
|
||||
print_success: Callable[..., None] = _impl.print_success
|
||||
print_error: Callable[..., None] = _impl.print_error
|
||||
print_warning: Callable[..., None] = _impl.print_warning
|
||||
print_info: Callable[..., None] = _impl.print_info
|
||||
input_with_default: Callable[..., str] = _impl.input_with_default
|
||||
input_int: Callable[..., int] = _impl.input_int
|
||||
input_yes_no: Callable[..., bool] = _impl.input_yes_no
|
||||
input_hex: Callable[..., str] = _impl.input_hex
|
||||
validate_ip: Callable[[str], bool] = _impl.validate_ip
|
||||
validate_cidr: Callable[[str], bool] = _impl.validate_cidr
|
||||
validate_port: Callable[[str], bool] = _impl.validate_port
|
||||
validate_chain_id: Callable[[str], bool] = _impl.validate_chain_id
|
||||
|
||||
__all__ = [
|
||||
"NetworkConfigurator",
|
||||
"Colors",
|
||||
"print_header",
|
||||
"print_success",
|
||||
"print_error",
|
||||
"print_warning",
|
||||
"print_info",
|
||||
"input_with_default",
|
||||
"input_int",
|
||||
"input_yes_no",
|
||||
"input_hex",
|
||||
"validate_ip",
|
||||
"validate_cidr",
|
||||
"validate_port",
|
||||
"validate_chain_id",
|
||||
]
|
||||
17
scripts/configure_network_validation.py
Normal file
17
scripts/configure_network_validation.py
Normal file
@@ -0,0 +1,17 @@
|
||||
"""Import shim for configure-network-validation.py (hyphenated filename)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
from pathlib import Path
|
||||
_impl_path = Path(__file__).with_name("configure-network-validation.py")
|
||||
_spec = importlib.util.spec_from_file_location("_configure_network_validation_impl", _impl_path)
|
||||
if _spec is None or _spec.loader is None:
|
||||
raise ImportError(f"Cannot load {_impl_path}")
|
||||
_impl = importlib.util.module_from_spec(_spec)
|
||||
_spec.loader.exec_module(_impl)
|
||||
|
||||
ConfigurationValidator = _impl.ConfigurationValidator
|
||||
ValidationError = _impl.ValidationError
|
||||
|
||||
__all__ = ["ConfigurationValidator", "ValidationError"]
|
||||
@@ -9,6 +9,7 @@ import re
|
||||
import sys
|
||||
from collections import Counter
|
||||
from pathlib import Path
|
||||
from typing import Any, cast
|
||||
|
||||
|
||||
EXCLUDED_PARTS = {"artifacts", "broadcast", "cache", "lib", "node_modules", "out"}
|
||||
@@ -96,8 +97,10 @@ def create_report(repo_root: Path) -> dict[str, object]:
|
||||
}
|
||||
|
||||
|
||||
def print_text(report: dict[str, object]) -> None:
|
||||
summary = report["summary"]
|
||||
def print_text(report: dict[str, Any]) -> None:
|
||||
summary = cast(dict[str, int], report["summary"])
|
||||
unreachable_by_bucket = cast(dict[str, int], report["unreachableByBucket"])
|
||||
unreachable_contracts = cast(list[str], report["unreachableContracts"])
|
||||
print(f"repo root: {report['repoRoot']}")
|
||||
print(f"contracts total: {summary['contractsTotal']}")
|
||||
print(f"tests/scripts roots total: {summary['rootsTotal']}")
|
||||
@@ -106,11 +109,11 @@ def print_text(report: dict[str, object]) -> None:
|
||||
print(f"contracts with no local inbound refs: {summary['contractsWithNoLocalInboundRefs']}")
|
||||
print()
|
||||
print("Unreachable by top-level bucket:")
|
||||
for bucket, count in report["unreachableByBucket"].items():
|
||||
for bucket, count in unreachable_by_bucket.items():
|
||||
print(f" {bucket}: {count}")
|
||||
print()
|
||||
print("Archive candidates (unreachable from current tests/scripts):")
|
||||
for contract in report["unreachableContracts"]:
|
||||
for contract in unreachable_contracts:
|
||||
print(f" {contract}")
|
||||
print()
|
||||
print("Note: unreachable does not prove safe deletion; it only means this repo's current Solidity tests/scripts do not import the file.")
|
||||
|
||||
Reference in New Issue
Block a user