Vacancy Code Boundary Hardening
What Was Hardened
Sprint 67 hardened the Vacancy route boundary without changing behavior.
Resolving locale, route permissions, and workspace projection.
Current scope: Guest
Category: 10_normative | Version: v1.0.0
Owner: DOCUMENT_CUSTODIAN | Review cycle: 90 days
Approval authority: GOVERNANCE_ADMIN
Documentation portal is read-only. Editing and mutation endpoints are disabled.
Kvary platform is originally created in Georgian. Where a Georgian version exists, Georgian is authoritative for platform UI, documentation, and legal interpretation.
Translations into other languages are provided for convenience. Some records may originate in other languages and carry their own source or legal locale for a specific flow, but where a Georgian version is available, the Georgian version prevails for platform-level wording and interpretation.
Metadata incomplete: Document ID, Version, Status, Owner Role, Last Review Date, Next Review Date, Change Log
Sprint 67 hardened the Vacancy route boundary without changing behavior.
Added route-facing dependency ports to:
services/svc-tenders/src/vacancy/contracts.tsSpecifically:
VacancyRouteReadRepositoryVacancyRouteCommandHandlersThis means:
registerVacancyRoutes.ts no longer needs to type its dependencies as concrete classesClarified in:
services/svc-tenders/src/routes/registerVacancyRoutes.tsservices/svc-tenders/src/vacancy/readRepository.tsThe code now states more directly that:
vacancies fallback for public compatibilityClarified in:
apps/web/src/portal/api.tsThe code now states more directly that:
VACANCY_CATALOG is UI compatibility onlyClarified in:
services/api/src/routes/vacancies.tsThe code now states more directly that:
Still mixed after this sprint:
GET /vacanciesGET /vacancies/:idVACANCY_CATALOGThose remain mixed because this sprint was a boundary-hardening and decision sprint, not a public-read rewrite.
This sprint did not find a blocker that prevents vacancy runtime/bootstrap prep entirely.
The real blockers are narrower:
vacancies still participates in public readsAfter Sprint 67, the truthful position is: