- Fix connection string to use postgresql+psycopg2://
- Add libpq-dev for PostgreSQL development headers
- Update deployment script with correct PostgreSQL driver
- Add PostgreSQL installation and configuration to deployment script
- Create mempool database and user (aitbc_mempool)
- Update environment configuration to use database mempool backend
- Add psycopg2 to dependencies for PostgreSQL support
- Enable persistent mempool storage for production deployments
- Generate unique chain ID based on hostname (ait-{hostname})
- Add genesis block generation step to deployment script
- Each new node gets its own chain/island instead of sharing ait-mainnet
- Update environment files with node-specific configuration
- Remove psycopg2 from dependencies (compilation requires pg_config.h)
- Set default MEMPOOL_BACKEND=memory to avoid PostgreSQL
- Fix build error: fatal error: pg_config.h: No such file or directory
- Install from root pyproject.toml to get all dependencies
- Then install blockchain-node package in editable mode
- Fix ModuleNotFoundError: No module named 'sqlmodel'
- Install package via pip install -e apps/blockchain-node
- Fix ModuleNotFoundError: No module named 'aitbc_chain'
- Ensure Python can find the blockchain node module
- Auto-update existing repository via git pull instead of prompting
- Prevent script from hanging on existing directory
- Allow non-automated deployment in containers
- Add deployment script for integrated blockchain node with mempool support
- Create comprehensive setup documentation from scratch
- Add agent workflow for automated deployment
- Support both bare metal and container deployments
- Include verification steps and troubleshooting guide
- Provide configuration templates for hub and follower nodes
- Document differences between integrated and standalone blockchain nodes
- Clarify which implementation has mempool endpoint support
- Provide deployment recommendations for each use case
- Add troubleshooting guide for mempool endpoint issues
- Include migration guide from standalone to integrated implementation
- Add import os for environment variable support
- Change env_file from /etc/aitbc/.env to /etc/aitbc/blockchain.env (standard)
- Make gossip_broadcast_url configurable via GOSSIP_BROADCAST_URL env var
- Add cross_site_remote_endpoints configuration via CROSS_SITE_REMOTE_ENDPOINTS env var
- Remove hardcoded URLs and IPs from source code
- Align local codebase with container configuration
- Added ns3 node documentation with IP 95.216.198.140
- Updated multi-node operations to include ns3
- Added ns3-specific command examples for environment checks
- Update package names from aitbc-ai-service to aitbc-ai
- Update package names from aitbc-edge-api to aitbc-edge
- Reflect the actual final package names implemented in the release
- Renamed aitbc-ai-service to aitbc-ai
- Renamed aitbc-edge-api to aitbc-edge
- Updated pyproject.toml files with new package names
- Renamed directories and package modules
- Updated references in documentation and scripts
- Updated systemd service references
- Renamed ai-service to aitbc-ai-service
- Renamed edge-api to aitbc-edge-api
- Updated pyproject.toml files with new package names
- Renamed directories and package modules
- Updated references in documentation and scripts
- All internal packages now follow aitbc- naming convention
- Update idna from 3.13 to 3.15 (fixes CVE-2026-45409)
- Update ujson from 5.12.0 to 5.12.1 (fixes CVE-2026-44660)
- Update urllib3 from 2.6.3 to 2.7.0 (fixes CVE-2026-44431, CVE-2026-44432)
- Remove vllm (transitive dependency causing diskcache vulnerability)
- Remove diskcache (CVE-2025-69872 - no longer required)
- Update requirements.txt with secure dependency versions
All vulnerabilities now resolved: pip-audit shows no known vulnerabilities found
- Added format and title parameters to output() function in utils/__init__.py
- Handle format='json'/'yaml' for structured data output
- Display optional title with underline separator when provided
- Fixed import in dual_mode_wallet_adapter.py from config.Config to aitbc_cli.config.CLIConfig
Renamed cli/config/ directory to cli/config_data/ to prevent package
shadowing of cli/aitbc_cli/config.py module. Removed problematic
sys.modules manipulation in aitbc_cli/__init__.py that was causing
circular import issues. Now 'from aitbc_cli.config import CLIConfig' works correctly.
- Add get_join_instructions() function that generates structured join data
- Include environment variables, config files, P2P config, RPC config sections
- Add route handlers for /agent/join/{chain_id}.json (FastAPI and Flask)
- Update discovery endpoint to include join endpoint in agent APIs
- Add nginx proxy configuration for /agent/join/ path
- S05 Islands: edge.py list_islands now has name='list' for 'aitbc edge island list'
- S06 Market: output() now handles structured data (dict/list) by JSON-encoding
- S09 GPU: added safe_load_credentials() to gpu_marketplace.py and exchange_island.py
with graceful FileNotFoundError handling and helpful error message
- S13 Mining: added 'list' subcommand to mining.py for listing active miners
- Deleted chains.json, discovery.json, islands.json static configuration files
- Removed /agent/join/ait-mainnet.json configuration guide
- Updated index.html to show only mainnet island, removed testnet card
- Changed note from "Agent-First Design" to "Live Data Only" emphasizing real-time RPC queries
- Added "Live data from RPC" indicator to mainnet island card
- All agent endpoints now serve dynamic data from blockchain
- Removed ait-testnet from chains.json, discovery.json, and islands.json
- Deleted /agent/join/ait-testnet.json configuration guide
- Updated metadata counts from 2 to 1 active chain/island
- Added notes clarifying this node (aitbc) is HUB for mainnet only
- Updated index.html title and description to reflect mainnet hub role
- Removed testnet join section from homepage, kept only mainnet join guide
- Changed "Multi-island architecture" to "Federated multi-node architecture"
Config was used as a type annotation in WalletDaemonClient.__init__ but
never imported, causing NameError at class definition time. Fixed by
importing Config under TYPE_CHECKING guard and using string annotation
'Config' to defer resolution to type-checkers only.
- importBlock now returns 400 'Parent block not found' when parent_hash
is not in the DB (skipped for genesis height 1)
- AITBCHTTPClient._retry_request now immediately re-raises HTTPError for
4xx responses instead of retrying - fixes RetryError wrapping 400/409
in test_block_import_complete
- Changed genesis block timestamp from hardcoded 2025-01-01 to datetime.now(timezone.utc)
- Fixes unified_genesis.py, poa.py genesis creation, and fallback genesis timestamp
- Fixed lambda closure bugs in session_factory by capturing chain_id with default parameter
- Removed localhost:8006 from default bootstrap peers (hub nodes create own genesis)
- Updated comments to reflect genesis timestamp change from deterministic to current time
- Validate block hash is 0x + 64 hex chars; return 400 for invalid format
- Fixes test_block_import and test_block_import_complete CI failures
- Update test_block_import_complete Test 2 to expect 400 (invalid hash format)
instead of 409 (conflict); invalid hash is now rejected before DB lookup
- Move re import to top of router.py
- Replace systemd-based service startup (broken on gitea-runner) with
direct uvicorn launches from the cloned workspace
- Remove stale ports 8001 (exchange, localhost-only) and 8003 (nonexistent)
- Only check ports 8011 (coordinator-api) and 8006 (blockchain-rpc)
- blockchain-rpc skipped if already running on host
- Move Python environment setup before service startup
- Wait up to 40s (20 retries x 2s) per service instead of 30s
- Try /health, /v1/health, /health/live, / paths for readiness
- gitea-runner lacks SSH access to aitbc1, causing false RPC unhealthy errors
- Replace ssh node 'curl http://localhost:PORT' with direct curl http://hostname:PORT
- All nodes (aitbc, aitbc1, gitea-runner) now use their hostnames for RPC checks
- Also fixes verify_consensus to use same direct HTTP pattern
- Added knowledge router import from contexts.knowledge.routers.knowledge
- Included router with /v1 prefix for API versioning consistency
- Added error handling and logging for router initialization
- Positioned before marketplace_offers router in initialization order
- Added /v1 prefix to all business logic routers in coordinator-api (analytics, portfolio, reputation, rewards, staking)
- Updated agent-coordinator to include /v1 prefix for all routers
- Changed agent-management API prefix from /api/v1 to /v1
- Updated api-gateway service prefixes to include /v1 for all proxied services
- Fixed coordinator-api routers to use correct service imports (AgentServiceMarketplace instead