For: the passport edge (src/http/passport_edge.ts) is part of the published contract, not a hidden route.
Done:
[ ] GET /api/v1/passport/health has a row naming who may read it and what it answers. The row sits in ROUTES (src/contract/openapi.ts) beside its neighbours, with the request body, each answer and each refusal the handler actually returns; its line(s) leave NOT_YET_DESCRIBED in test/openapi-coverage.test.ts.
[ ] A case in test/openapi.test.ts (or a new test/openapi-oa-passport.test.ts) fails without the row.
Files: src/contract/openapi.ts, test/openapi-coverage.test.ts, one test file.
Risk: none beyond describing the answer exactly as test/passport-edge.test.ts pins it.
For: the passport edge (src/http/passport_edge.ts) is part of the published contract, not a hidden route.
Done:
GET /api/v1/passport/healthhas a row naming who may read it and what it answers. The row sits inROUTES(src/contract/openapi.ts) beside its neighbours, with the request body, each answer and each refusal the handler actually returns; its line(s) leaveNOT_YET_DESCRIBEDin test/openapi-coverage.test.ts.Files: src/contract/openapi.ts, test/openapi-coverage.test.ts, one test file. Risk: none beyond describing the answer exactly as test/passport-edge.test.ts pins it.