 131868bdca
			
		
	
	131868bdca
	
	
	
		
			
			Major security, observability, and configuration improvements:
## Security Hardening
- Implemented configurable CORS (no more wildcards)
- Added comprehensive auth middleware for admin endpoints
- Enhanced webhook HMAC validation
- Added input validation and rate limiting
- Security headers and CSP policies
## Configuration Management
- Made N8N webhook URL configurable (WHOOSH_N8N_BASE_URL)
- Replaced all hardcoded endpoints with environment variables
- Added feature flags for LLM vs heuristic composition
- Gitea fetch hardening with EAGER_FILTER and FULL_RESCAN options
## API Completeness
- Implemented GetCouncilComposition function
- Added GET /api/v1/councils/{id} endpoint
- Council artifacts API (POST/GET /api/v1/councils/{id}/artifacts)
- /admin/health/details endpoint with component status
- Database lookup for repository URLs (no hardcoded fallbacks)
## Observability & Performance
- Added OpenTelemetry distributed tracing with goal/pulse correlation
- Performance optimization database indexes
- Comprehensive health monitoring
- Enhanced logging and error handling
## Infrastructure
- Production-ready P2P discovery (replaces mock implementation)
- Removed unused Redis configuration
- Enhanced Docker Swarm integration
- Added migration files for performance indexes
## Code Quality
- Comprehensive input validation
- Graceful error handling and failsafe fallbacks
- Backwards compatibility maintained
- Following security best practices
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package iobufpool implements a global segregated-fit pool of buffers for IO.
 | |
| //
 | |
| // It uses *[]byte instead of []byte to avoid the sync.Pool allocation with Put. Unfortunately, using a pointer to avoid
 | |
| // an allocation is purposely not documented. https://github.com/golang/go/issues/16323
 | |
| package iobufpool
 | |
| 
 | |
| import "sync"
 | |
| 
 | |
| const minPoolExpOf2 = 8
 | |
| 
 | |
| var pools [18]*sync.Pool
 | |
| 
 | |
| func init() {
 | |
| 	for i := range pools {
 | |
| 		bufLen := 1 << (minPoolExpOf2 + i)
 | |
| 		pools[i] = &sync.Pool{
 | |
| 			New: func() any {
 | |
| 				buf := make([]byte, bufLen)
 | |
| 				return &buf
 | |
| 			},
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Get gets a []byte of len size with cap <= size*2.
 | |
| func Get(size int) *[]byte {
 | |
| 	i := getPoolIdx(size)
 | |
| 	if i >= len(pools) {
 | |
| 		buf := make([]byte, size)
 | |
| 		return &buf
 | |
| 	}
 | |
| 
 | |
| 	ptrBuf := (pools[i].Get().(*[]byte))
 | |
| 	*ptrBuf = (*ptrBuf)[:size]
 | |
| 
 | |
| 	return ptrBuf
 | |
| }
 | |
| 
 | |
| func getPoolIdx(size int) int {
 | |
| 	size--
 | |
| 	size >>= minPoolExpOf2
 | |
| 	i := 0
 | |
| 	for size > 0 {
 | |
| 		size >>= 1
 | |
| 		i++
 | |
| 	}
 | |
| 
 | |
| 	return i
 | |
| }
 | |
| 
 | |
| // Put returns buf to the pool.
 | |
| func Put(buf *[]byte) {
 | |
| 	i := putPoolIdx(cap(*buf))
 | |
| 	if i < 0 {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	pools[i].Put(buf)
 | |
| }
 | |
| 
 | |
| func putPoolIdx(size int) int {
 | |
| 	minPoolSize := 1 << minPoolExpOf2
 | |
| 	for i := range pools {
 | |
| 		if size == minPoolSize<<i {
 | |
| 			return i
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return -1
 | |
| }
 |