Skip to content

[Windows] aiox-core lag em monorepo: raiz por cwd fragmenta o banco, discovery root_only perde o workspace aninhado, e --help executa o verbo #79

Description

@rafaelspcom

Sintoma

Bootstrap do LAG (initprojectimportimport-stories) num projeto real (monorepo: workspace Rust em <workspace>/ com 15 crates + frontend Next.js + docs) produz um grafo onde a camada de dependências fica quase vazia e a camada de stories fica 100% vazia — e o caminho "óbvio" de contornar cria um segundo banco silencioso. Três defeitos verificados ao vivo, com repro exata.

Ambiente

  • OS: Windows 11 Pro (26200) · Cockpit v0.11.1 · aiox-core lag schema v5
  • Projeto: monorepo git, Cargo.toml do workspace em <workspace>/ (não na raiz), stories em layout flat docs/stories/*.md

Achado A — raiz derivada do cwd fragmenta o banco silenciosamente

lag import (e a família [root] default: cwd) resolve a raiz do projeto pelo diretório corrente, não pelo toplevel do git. Rodar lag import de dentro de <workspace>/ criou um segundo lag.db em <workspace>/.aiox/lag/ — sem aviso, sem erro. Num monorepo, cada subdiretório onde alguém rodar um verbo vira um grafo separado, e o usuário acredita estar alimentando um só.

Repro: cd <repo>/<workspace> && aiox-core lag importls <workspace>/.aiox/lag/ mostra o banco novo.
Sugestão: resolver a raiz via git rev-parse --show-toplevel (ou walk-up até um .aiox/ existente), e/ou avisar explicitamente ao criar um banco novo fora da raiz do git.

Achado B — discovery_scope: root_only deixa o coração do monorepo fora do grafo

Os importers de manifest só procuram na raiz. Resultado no projeto real: importer-js-package-json achou o package.json da raiz (4 nós), mas importer-rust-cargo-toml reportou manifest_found: false — o workspace de 15 crates (o produto em si) não entra no grafo de dependências. Combinado com o Achado A, o usuário fica sem saída: ou perde o workspace, ou fragmenta o banco.

Repro: aiox-core lag import na raiz de um repo com Cargo.toml só em subdiretório → manifest_found: false.
Sugestão: discovery recursiva (com denylist de node_modules/target) ou flag de escopo explícita que escreva no banco da raiz.

Achado C — flag desconhecida é engolida e o verbo executa (--help roda o import)

aiox-core lag import --help executou o import em vez de imprimir o uso. Em verbo de leitura é inócuo; o LAG tem gc apply (arquivamento com aprovação humana) — flag desconhecida executando o verbo é a mesma família da #76 (conductor loop --help) e vira acidente em verbo destrutivo.

Repro: aiox-core lag import --help → executa e retorna o JSON do import.
Sugestão: rejeitar flags desconhecidas com exit≠0 + suportar --help por verbo (o lag sem verbo já imprime um uso excelente — é só rotear).

Achado menor (documentação) — import-stories só suporta o layout canônico

import-stories procura docs/epics/*/stories/*.md; projetos com layout flat (docs/stories/*.md) recebem stories_scanned: 0 sem indicação do porquê. Não é pedido de suporte ao layout flat — só que o output diga o path esperado quando encontrar zero, para o usuário não achar que o grafo está quebrado.

Classificação [Confiança: ALTA — os 3 principais reproduzidos ao vivo, na sequência, no mesmo host]

Bug (A, C) + melhoria (B, menor) — o LAG funciona como projetado em repo de raiz única; em monorepo os Achados A+B o tornam quase inoperante, e o C é risco latente de segurança operacional.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions