# Changelog — agent-harness-spec All notable changes to the spec are recorded here. The spec follows [semver](https://semver.org/). ## [1.0.0] — 2026-06-09 Initial draft derived from the production agents shipped in `cjot-backstage-az/agents/` on branch `sandbox/jonathan`: - `agent-registry` (FastAPI, registry/gateway) - `agent-factory` - `decomposer` - `discovery-agent` - `golden-path` - `modernization-factory` (v1) - `modernization-factory-v2` - `policy-transformer` - `scaffold-agent` - `support-intake-agent` (FastAPI, intake) - `the-watcher` Codifies: - Mandatory `app.agent:app` Starlette entry point - `GET /health` and `GET /.well-known/agent.json` contract - Self-registration with the agent-gateway via `POST /agents/register-url` (3×5s retry budget) - OTel operator-driven SDK injection + the six standard env vars (`OTEL_SERVICE_NAME`, `OTEL_RESOURCE_ATTRIBUTES`, `OTEL_LOGS_EXPORTER`, `OTEL_METRICS_EXPORTER`, `OTEL_METRIC_EXPORT_INTERVAL`, `OTEL_SEMCONV_STABILITY_OPT_IN`) - Canonical `app/logging_setup.py` bridge (root logger → `LoggerProvider`) - `app/metrics.py` shape (`metrics.get_meter(name, version)` + module-scope instruments, `agent..*` naming) - LangChain instrumentation via `LangChainInstrumentor().instrument()` - Container shape (`python:3.12-slim`, non-root UID 1001, HEALTHCHECK) - Kubernetes shape (namespace `agents`, ServiceAccount `agents-sa`, `agents-kv-spc` SPC at `/mnt/secrets-store`, named `http` port, OTel inject annotations) - `.image-version` file + `scripts/deploy.sh` / `full-deploy.sh` / `deploy-local.sh` cadence Defensive serialisation for `a2a.types.AgentSkill` (pydantic vs protobuf) is mandated in §6 to avoid the `model_dump()` regression observed in `policy-transformer` 1.0.2 → 1.0.3.