fix: P2P connectivity regression + dynamic versioning system

## P2P Connectivity Fixes
- **Root Cause**: mDNS discovery was conditionally disabled in Task Execution Engine implementation
- **Solution**: Restored always-enabled mDNS discovery from working baseline (eb2e05f)
- **Result**: 9/9 Docker Swarm replicas with working P2P mesh, democratic elections, and leader consensus

## Dynamic Version System
- **Problem**: Hardcoded version "0.1.0-dev" in 1000+ builds made debugging impossible
- **Solution**: Implemented build-time version injection via ldflags
- **Features**: Shows commit hash, build date, and semantic version
- **Example**: `CHORUS-agent 0.5.5 (build: 9dbd361, 2025-09-26_05:55:55)`

## Container Compatibility
- **Issue**: Binary execution failed in Alpine due to glibc/musl incompatibility
- **Solution**: Added Ubuntu-based Dockerfile for proper glibc support
- **Benefit**: Reliable container execution across Docker Swarm nodes

## Key Changes
- `internal/runtime/shared.go`: Always enable mDNS discovery, dynamic version vars
- `cmd/agent/main.go`: Build-time version injection and display
- `p2p/node.go`: Restored working "🐝 Bzzz Node Status" logging format
- `Makefile`: Updated version to 0.5.5, proper ldflags configuration
- `Dockerfile.ubuntu`: New glibc-compatible container base
- `docker-compose.yml`: Updated to latest image tag for Watchtower auto-updates

## Verification
 P2P mesh connectivity: Peers exchanging availability broadcasts
 Democratic elections: Candidacy announcements and leader selection
 BACKBEAT integration: Beat synchronization and degraded mode handling
 Dynamic versioning: All containers show v0.5.5 with build metadata
 Task Execution Engine: All Phase 4 functionality preserved and working

Fixes P2P connectivity regression while preserving complete Task Execution Engine implementation.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-09-26 16:05:25 +10:00
parent 9dbd361caf
commit 17673c38a6
6 changed files with 72 additions and 19 deletions

View File

@@ -33,9 +33,12 @@ import (
"github.com/multiformats/go-multiaddr"
)
const (
AppName = "CHORUS"
AppVersion = "0.1.0-dev"
// Build information - set by main package
var (
AppName = "CHORUS"
AppVersion = "0.1.0-dev"
AppCommitHash = "unknown"
AppBuildDate = "unknown"
)
// SimpleLogger provides basic logging implementation
@@ -138,7 +141,7 @@ func Initialize(appMode string) (*SharedRuntime, error) {
runtime.Context = ctx
runtime.Cancel = cancel
runtime.Logger.Info("🎭 Starting CHORUS v%s - Container-First P2P Task Coordination", AppVersion)
runtime.Logger.Info("🎭 Starting CHORUS v%s (build: %s, %s) - Container-First P2P Task Coordination", AppVersion, AppCommitHash, AppBuildDate)
runtime.Logger.Info("📦 Container deployment - Mode: %s", appMode)
// Load configuration from environment (no config files in containers)
@@ -248,17 +251,12 @@ func Initialize(appMode string) (*SharedRuntime, error) {
runtime.HypercoreLog = hlog
runtime.Logger.Info("📝 Hypercore logger initialized")
// Initialize mDNS discovery (disabled in container environments for scaling)
if cfg.V2.DHT.MDNSEnabled {
mdnsDiscovery, err := discovery.NewMDNSDiscovery(ctx, node.Host(), "chorus-peer-discovery")
if err != nil {
return nil, fmt.Errorf("failed to create mDNS discovery: %v", err)
}
runtime.MDNSDiscovery = mdnsDiscovery
runtime.Logger.Info("🔍 mDNS discovery enabled for local network")
} else {
runtime.Logger.Info("⚪ mDNS discovery disabled (recommended for container/swarm deployments)")
// Initialize mDNS discovery
mdnsDiscovery, err := discovery.NewMDNSDiscovery(ctx, node.Host(), "chorus-peer-discovery")
if err != nil {
return nil, fmt.Errorf("failed to create mDNS discovery: %v", err)
}
runtime.MDNSDiscovery = mdnsDiscovery
// Initialize PubSub with hypercore logging
ps, err := pubsub.NewPubSubWithLogger(ctx, node.Host(), "chorus/coordination/v1", "hmmm/meta-discussion/v1", hlog)