Contexto
O quality gate do nullain-agent (PR #27, mergeado) já roda uv sync + lint/typecheck/test/docker build. O nullain-agent-sdk tem ci.yml + release.yml. O nullain-sdk-search tem workflow de release no PyPI. Mas o ciclo de instalação limpa do zero (remover venv/lock e reconstruir tudo) não é uniforme entre os três repos — e foi exatamente isso que deixou a issue #77 (workaround tool.uv.sources de path local) passar até virar problema.
Objetivo
Cada repositório deve ter no CI um job explícito de instalação limpa que reproduz o que um usuário novo faria:
nullain-agent-sdk: job clean-install que remove lock+venv e roda uv sync --frozen (ou sem --frozen se o lock for regenerado), depois make check completo
nullain-agent: idem (aproveitar o quality gate existente como base)
nullain-sdk-search: job que valida a instalação do bindings PyO3 a partir do sdist/wheel publicado (não do source tree), e uv sync limpo
Critérios de aceite
Notas
- É o item mais valioso da consolidação: detecta dívidas de dependência antes de virarem incidentes
- Não usar
tool.uv.sources de path local em nenhum repositório — sub-SDK novo nasce publicado no PyPI
- Fase: F0 consolidação (item 3 do plano consolidado)
Contexto
O quality gate do
nullain-agent(PR #27, mergeado) já rodauv sync+ lint/typecheck/test/docker build. Onullain-agent-sdktemci.yml+release.yml. Onullain-sdk-searchtem workflow de release no PyPI. Mas o ciclo de instalação limpa do zero (remover venv/lock e reconstruir tudo) não é uniforme entre os três repos — e foi exatamente isso que deixou a issue #77 (workaroundtool.uv.sourcesde path local) passar até virar problema.Objetivo
Cada repositório deve ter no CI um job explícito de instalação limpa que reproduz o que um usuário novo faria:
nullain-agent-sdk: jobclean-installque remove lock+venv e rodauv sync --frozen(ou sem --frozen se o lock for regenerado), depoismake checkcompletonullain-agent: idem (aproveitar o quality gate existente como base)nullain-sdk-search: job que valida a instalação do bindings PyO3 a partir do sdist/wheel publicado (não do source tree), euv synclimpoCritérios de aceite
search-rustincluídos), não só o sourceNotas
tool.uv.sourcesde path local em nenhum repositório — sub-SDK novo nasce publicado no PyPI