Onboard a new service into the ADLC pipeline so that it can be developed, tested, reviewed, and deployed through the standard automation. Covers project setup, spec creation, registry update, and first pipeline run.
Applies to any new microservice being added to the ODS Platform or a new project (e.g., lejecos). Covers initial repo setup, spec writing, service-project mapping, Coolify provisioning request, and first dev cycle.
~/dev/specs/{project}/specs/{service}/spec.mdjniox/ods-{service}ods
database on 127.0.0.1:5433~/dev/specs/{project}/PROJECT.mdmkdir -p ~/dev/specs/{project}/specs/{service}/Write spec.md following the standard format with: -
Service description and responsibilities - API endpoints with
request/response schemas - Acceptance criteria (AC-001, AC-002, …) - At
least one “zero-state” acceptance criterion (lesson from OID spec gap) -
Database schema requirements - Event topics (Redpanda CloudEvents) -
Multi-tenancy requirements (tenant_id in every query)
mkdir -p ~/dev/projects/{service}/tasks
cd ~/dev/projects/{service}
git init
git checkout -b devFor Rust services:
cargo init --name {service}For Node/TypeScript services:
npm init -yCreate tasks/lessons.md:
## Lessons Learned
(none yet)Create tasks/todo.md:
## Task: Initial implementation
### Objective
Implement {service} per spec.
### Plan
- [ ] Database schema + migrations
- [ ] Domain models + unit tests
- [ ] API endpoints + integration tests
- [ ] Health check endpoint
- [ ] DockerfileEvery service repo must have a root-level CLAUDE.md
with: - Tech stack specifics - Build/test commands - Database schema
name - Environment variables required - Service-specific rules
python3 -c "
import json
f = '$HOME/dev/ops/agents/service-project-map.json'
m = json.load(open(f))
m['{service}'] = {'project': '{project}', 'type': 'rust|node', 'phase': 'P0'}
json.dump(m, open(f, 'w'), indent=2)
"Add the service tasks to
~/dev/specs/{project}/gestion/progress.md:
## {service}
- [ ] DEV: {TASK-ID} -- {description}Check if the service has external dependencies and update:
# Add entries to ~/dev/ops/external-deps.mdcat > ~/dev/ops/coolify/{service}.json << 'EOF'
{
"service": "{service}",
"project": "{project}",
"provisioned_at": null,
"note": "PENDING — needs Coolify app creation"
}
EOFPost to Slack DM requesting Coolify app creation if this is a web service.
cd ~/dev/projects/{service}
gh repo create jniox/ods-{service} --private --source=. --pushThe next /check-pipeline cycle will detect the new
service and spawn dev agents for pending tasks. To trigger
immediately:
/agent dev "SERVICE: {service}. PROJECT: {project}. TASK: {first-task-id} -- {description}. Spec: ~/dev/specs/{project}/specs/{service}/spec.md"
cat ~/dev/ops/agents/service-project-map.json | python3 -c "import sys,json; print(json.load(sys.stdin).get('{service}'))"
returns the projectls ~/dev/projects/{service}/Cargo.toml or
package.json existscat ~/dev/specs/{project}/gestion/progress.md | grep {service}
shows tasksls ~/dev/ops/coolify/{service}.json existsdev branch:
cd ~/dev/projects/{service} && git branchIf onboarding was premature or incorrect: 1. Remove from
service-project map 2. Remove progress.md entries 3. Remove Coolify
config placeholder 4. Archive (do not delete) the project directory:
mv ~/dev/projects/{service} ~/dev/projects/.archived/{service}
~/dev/ops/agents/service-project-map.json~/dev/ops/external-deps.md~/dev/specs/{project}/specs/{service}/spec.md