feat(ports): Implement coordinated port allocation for multi-service deployments
- Add port allocation functions to lib/metadata.sh:
- get_service_port_count(): Parse docker-compose.yml for port needs
- find_available_port_range(): First-fit allocation algorithm
- allocate_service_ports(): Central port allocation with registry
- deallocate_service_ports(): Free ports on service removal
- generate_service_env(): Create service .env with TIN_PORT_* vars
- Update cmd/service/deploy.sh:
- Allocate ports before service deployment
- Generate per-service .env files
- Show allocated port range in success message
- Clean up on allocation failure
- Update cmd/service/rm.sh:
- Deallocate ports on service removal
- Update success message to note freed ports
- Remove old allocate_service_ports() from lib/core.sh
- Old implementation did not support multi-service coordination
- Fix .gitignore: Change service/ to /service/ to allow cmd/service/ tracking
- Add cmd/service/*.sh files (previously untracked)
- These CLI commands are part of the platform
- Update OODA documentation:
- Add ACT-3 plan.md with implementation details
- Update outcomes.md with port-allocation outcome and tests
- Update BRANCH.md to track progress
Refs: ooda/2025-10-multi-service-architecture/orient/port-allocation-algorithm.md
Refs: ooda/2025-10-multi-service-architecture/act/03-port-allocation/plan.md