Add squad: lib-forge#20
Conversation
Version: 1.0.0 Author: Victor-Cruz
📝 WalkthroughWalkthroughA comprehensive specification and orchestration system for "Lib Forge" is introduced—a five-agent automation squad that analyzes PRDs, designs Python library structures with human approval gates, generates scripts, validates quality, and publishes to a centralized repository. Includes agents, tasks, workflows, configuration, checklists, and documentation scaffolding. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Review rate limit: 0/1 reviews remaining, refill in 60 minutes.Comment |
There was a problem hiding this comment.
Actionable comments posted: 17
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
🟡 Minor comments (14)
packages/lib-forge/config/tech-stack.md-38-43 (1)
38-43:⚠️ Potential issue | 🟡 MinorAdd a language tag to the fenced block (MD040).
At Line 38, specify a fence language (e.g.,
text) to satisfy markdown linting.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/config/tech-stack.md` around lines 38 - 43, The fenced code block that shows the directory tree (the ```...``` block containing ../victor-libs/ └── {dominio}/ ...) is missing a language tag which triggers MD040; update that fence to include a language identifier such as ```text (or ```bash) so the markdown linter accepts it and the tree renders with the correct fence language.packages/lib-forge/README.md-21-67 (1)
21-67:⚠️ Potential issue | 🟡 MinorAdd fence languages to all code blocks (MD040).
Fenced blocks at Line 21, Line 40, Line 45, Line 50, Line 55, and Line 61 should declare a language (
text/bash) to avoid markdownlint warnings.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/README.md` around lines 21 - 67, The markdown fenced code blocks shown (the diagram block starting with "PRD + Conversa ..." and the subsequent command examples containing "@lib-forge", "*forge docs/meu-prd.md", "*analyze docs/meu-prd.md", "*status", and the "victor-libs/" tree) need explicit fence languages to satisfy MD040; update each opening triple-backtick to include an appropriate language tag (e.g., ```text for the diagram and tree, ```bash for the command examples) so the blocks that reference "@lib-forge", "*forge ...", "*analyze ...", and "*status" are all annotated.packages/lib-forge/README.md-7-7 (1)
7-7:⚠️ Potential issue | 🟡 MinorFix PT-BR number agreement in the value proposition sentence.
At Line 7, “uma biblioteca ... prontos, organizados” mixes singular/plural. Prefer singular agreement for clarity.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/README.md` at line 7, The PT-BR sentence mixes singular/plural agreement; change the phrase "uma biblioteca de scripts Python prontos para uso, organizados no repositório `victor-libs/`" to use feminine singular to match "uma biblioteca" (for example: "uma biblioteca de scripts Python pronta para uso, organizada no repositório `victor-libs/`") so both adjectives agree with "biblioteca" in README.md.packages/lib-forge/ARCHITECTURE.md-74-74 (1)
74-74:⚠️ Potential issue | 🟡 MinorFix typo/acentuação em texto de documentação.
Na Line 74, prefira “cópia” em vez de “copia”.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/ARCHITECTURE.md` at line 74, Corrija a acentuação na linha que contém "Cada projeto importa da pasta do seu domínio ou copia para dentro do projeto quando necessário." no arquivo ARCHITECTURE.md substituindo "copia" por "cópia" para ficar "Cada projeto importa da pasta do seu domínio ou cópia para dentro do projeto quando necessário."; atualize somente esse texto mantendo o restante do parágrafo intacto.packages/lib-forge/ARCHITECTURE.md-5-12 (1)
5-12:⚠️ Potential issue | 🟡 MinorAdd fenced-code language identifiers to satisfy Markdown linting.
Lines 5, 16, and 52 start fenced blocks without language tags, which triggers MD040.
Suggested fix
-``` +```text ENTRADA PIPELINE SAÍDA ... -``` +``` -``` +```text prd_content ──→ [analyzePRD] ──→ prd_structure (Memory) ... -``` +``` -``` +```text victor-libs/ ← repositório centralizado ... -``` +```Also applies to: 16-30, 52-72
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/ARCHITECTURE.md` around lines 5 - 12, Add language identifiers to the three fenced code blocks in ARCHITECTURE.md that currently start without them (the blocks around lines 5–12, 16–30, and 52–72); update each opening triple-backtick to include a short language tag like "text" (e.g., ```text) so the Markdown linter rule MD040 is satisfied, leaving the block contents unchanged and keeping the closing triple-backticks as-is.packages/lib-forge/agents/lib-validator.md-131-153 (1)
131-153:⚠️ Potential issue | 🟡 MinorAdd language tag to fenced example block.
Line 131 opens a fenced block without language, triggering MD040.
Suggested fix
-``` +```text VALIDAÇÃO — victor-libs/salao/disponibilidade.py ... -``` +```🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/agents/lib-validator.md` around lines 131 - 153, The fenced code/example block starting with the line "VALIDAÇÃO — victor-libs/salao/disponibilidade.py" is missing a language tag and triggers MD040; update the opening fence from ``` to a language-tagged fence such as ```text (or ```md) so the block is explicitly labeled, keeping the same content and closing fence unchanged to fix the lint warning.packages/lib-forge/agents/lib-architect.md-139-139 (1)
139-139:⚠️ Potential issue | 🟡 MinorEspecifique linguagem nos blocos de código cercados por fence.
As Lines 139 e 152 acionam MD040 por falta de linguagem.
🧹 Ajuste sugerido
-``` +```text INPUT: Mapa de Oportunidades de `@prd-analyst` ... -``` +``` -``` +```text DESIGN — victor-libs/salao/ ... -``` +```Also applies to: 152-152
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/agents/lib-architect.md` at line 139, Two fenced code blocks in lib-architect.md (the blocks containing "INPUT: Mapa de Oportunidades de `@prd-analyst`" and "DESIGN — victor-libs/salao/") are missing a language tag and trigger MD040; update each opening fence to include a language (e.g., change ``` to ```text) so the code fences become ```text ... ``` and likewise for the second block, ensuring both fenced sections declare the language.packages/lib-forge/tasks/extract-opportunities.md-21-26 (1)
21-26:⚠️ Potential issue | 🟡 MinorChecklist e steps estão desalinhados na revisão com usuário.
A checklist pede apresentação do mapa ao usuário, mas não há step explícito para isso (Lines 27–51). Vale adicionar para manter o gate auditável.
✅ Sugestão de step adicional
- id: "3" description: "Deduplicar e consolidar" actions: - "Identificar oportunidades que se sobrepõem" - "Consolidar em uma única oportunidade quando possível" - "Numerar com ID sequencial (OP001, OP002...)" + + - id: "4" + description: "Apresentar mapa ao usuário para revisão" + actions: + - "Exibir opportunities_map consolidado" + - "Coletar ajustes solicitados" + - "Aplicar ajustes e confirmar versão final"Also applies to: 27-51
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/tasks/extract-opportunities.md` around lines 21 - 26, A checklist item "Apresentar mapa ao usuário para revisão" is not implemented as an explicit step in the steps section; add a concrete step in the steps block that shows the user the consolidated opportunity map for review, include expected inputs/outputs, the review acceptance criteria (e.g., approve/reject or request changes) and the artifact to be stored as audit evidence, and ensure the new step references the checklist item so the gate is auditable.packages/lib-forge/checklists/design-approval-checklist.md-36-36 (1)
36-36:⚠️ Potential issue | 🟡 MinorMelhore a fluidez da frase de bloqueio.
Na Line 36, a frase fica mais clara com ajuste de pontuação/conjunção.
✏️ Sugestão de ajuste
-- [ ] Usuário pediu alteração mas ainda não confirmou o novo design → **BLOQUEAR** +- [ ] Usuário pediu alteração, mas ainda não confirmou o novo design → **BLOQUEAR**🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/checklists/design-approval-checklist.md` at line 36, Ajuste a fluidez da frase do item de checklist que atualmente lê "- [ ] Usuário pediu alteração mas ainda não confirmou o novo design → **BLOQUEAR**": abra e edite essa string (procure pelo texto exato "Usuário pediu alteração mas ainda não confirmou o novo design → **BLOQUEAR**") e substitua a pontuação para melhorar a leitura, por exemplo inserindo uma vírgula antes de "mas" e usando um travessão/em dash para a ação final ("Usuário pediu alteração, mas ainda não confirmou o novo design — **BLOQUEAR**"); salve a alteração no mesmo arquivo para que a frase fique mais clara e fluida.packages/lib-forge/agents/lib-forge-chief.md-157-157 (1)
157-157:⚠️ Potential issue | 🟡 MinorAdicione linguagem no fenced code block.
Na Line 157, o bloco de código sem linguagem aciona MD040.
🧹 Ajuste sugerido
-``` +```text 1. ENTRADA → PRD + conversa fornecidos pelo usuário ... 7. ENTREGA → scripts organizados em victor-libs/</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@packages/lib-forge/agents/lib-forge-chief.mdat line 157, O bloco de código
fenced em lib-forge-chief.md (linha ~157) está sem linguagem e aciona a regra
MD040; atualize aquele fence para incluir uma tag de linguagem (por exemplo use
text) para que o bloco comece comtext em vez de apenas ``` e assim
silenciar o alerta MD040 mantendo o conteúdo atual intacto.</details> </blockquote></details> <details> <summary>packages/lib-forge/tasks/publish-to-victor-libs.md-37-40 (1)</summary><blockquote> `37-40`: _⚠️ Potential issue_ | _🟡 Minor_ **Contrato de output inconsistente para `module_readme`.** Na Line 25 ele é declarado como `file`, mas nas Lines 38–40 está tipado como `string`. Padronize para evitar ambiguidade de parsing. <details> <summary>🧩 Sugestão de alinhamento</summary> ```diff - campo: module_readme - tipo: string + tipo: file destino: File - path: "victor-libs/{dominio}/README.md" + path: "{destination}/{dominio}/README.md" ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/tasks/publish-to-victor-libs.md` around lines 37 - 40, The output contract for module_readme is inconsistent: standardize the type for the module_readme output (the symbol module_readme) so both declarations use the same kind (either File/file or string). Update the later mapping where it currently reads "tipo: string" to match the earlier declaration ("tipo: file" or "tipo: File"), or conversely change the earlier declaration to "string"—prefer making module_readme a File if it maps to "destino: File" and a path ("victor-libs/{dominio}/README.md"). ``` </details> </blockquote></details> <details> <summary>packages/lib-forge/tasks/extract-opportunities.md-65-65 (1)</summary><blockquote> `65-65`: _⚠️ Potential issue_ | _🟡 Minor_ **Adicione linguagem no fenced code block.** Na Line 65, inclua linguagem para conformidade com MD040. <details> <summary>🧹 Ajuste sugerido</summary> ```diff -``` +```text ID: OP001 ... -``` +``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@packages/lib-forge/tasks/extract-opportunities.mdat line 65, O bloco de
código fenced que contém "ID: OP001" precisa de uma linguagem explicitada para
satisfazer MD040; edite o bloco começando comtext (ou outra language tag apropriada) em vez de apenase mantenha a mesma série de crases no
fechamento (```), garantindo que o conteúdo entre os marcadores permaneça
inalterado.</details> </blockquote></details> <details> <summary>packages/lib-forge/agents/prd-analyst.md-146-158 (1)</summary><blockquote> `146-158`: _⚠️ Potential issue_ | _🟡 Minor_ **Add language identifiers to fenced code blocks (MD040).** Line 146 and Line 162 open fenced blocks without language tags; this is causing markdownlint warnings. <details> <summary>Proposed fix</summary> ```diff -``` +```text INPUT: PRD (texto/markdown) + Conversa de contexto (opcional) ... -``` +``` -``` +```text OPORTUNIDADE `#1` ... -``` +``` ``` </details> Also applies to: 162-172 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@packages/lib-forge/agents/prd-analyst.mdaround lines 146 - 158, Add
explicit language identifiers (e.g., ```text) to the fenced code blocks around
the PRD template and the OPORTUNIDADE example in prd-analyst.md so markdownlint
MD040 is satisfied; locate the opening/closing fences surrounding the blocks
that start with "INPUT: PRD (texto/markdown) + Conversa de contexto (opcional)"
and "OPORTUNIDADE#1" and change the opening triple-backticks to include the
language token (and ensure the corresponding closing fences remain
triple-backticks).</details> </blockquote></details> <details> <summary>packages/lib-forge/tasks/orchestrate-pipeline.md-134-143 (1)</summary><blockquote> `134-143`: _⚠️ Potential issue_ | _🟡 Minor_ **Add language identifier to fenced block (MD040).** Line 134 starts a fenced block without language; markdownlint flags this. <details> <summary>Proposed fix</summary> ```diff -``` +```text 🔥 lib-forge Pipeline ━━━━━━━━━━━━━━━━━━━━━ ✅ PHASE_1: Recepção [concluída] ⏳ PHASE_2: Análise [em andamento] ⏸ PHASE_3: Design [aguardando] ⏸ PHASE_4: Geração [aguardando] ⏸ PHASE_5: Validação [aguardando] ⏸ PHASE_6: Entrega [aguardando] ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@packages/lib-forge/tasks/orchestrate-pipeline.mdaround lines 134 - 143, The
fenced code block that begins with "🔥 lib-forge Pipeline" is missing a language
identifier (MD040); update the opening fence fromtotext so the block
reads ```text followed by the pipeline ASCII lines, ensuring the rest of the
block remains unchanged.</details> </blockquote></details> </blockquote></details> <details> <summary>🧹 Nitpick comments (4)</summary><blockquote> <details> <summary>packages/lib-forge/checklists/script-quality-checklist.md (1)</summary><blockquote> `31-31`: **Optional wording cleanup: “Resultado” is enough.** “Resultado Final” is slightly redundant; “Resultado” reads cleaner. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/checklists/script-quality-checklist.md` at line 31, Change the markdown heading "## Resultado Final" to the shorter "## Resultado" in the file (replace the header text in the checklist where the heading string "## Resultado Final" appears) to remove the redundancy and improve wording. ``` </details> </blockquote></details> <details> <summary>packages/lib-forge/config.yaml (1)</summary><blockquote> `1-95`: **Consider a single source-of-truth for duplicated manifest fields.** `config.yaml` and `squad.yaml` duplicate most metadata (identity, requirements, profiles, counts). A lightweight generation step or strict canonical-file rule would reduce drift bugs. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/config.yaml` around lines 1 - 95, The manifest metadata (fields like name, version, requires, profiles, profiles->full/analysis-only/generate-only, workspace_integration, metadata counts) is duplicated between config.yaml and squad.yaml causing drift; pick one canonical source (e.g., keep config.yaml as the single source) and remove duplicated sections from squad.yaml (or vice‑versa), implement a small generation step or CI validation that either (a) generates squad.yaml from config.yaml (script named e.g., generate_squad_manifest) or (b) fails CI if key fields diverge; update references to unique symbols (name, version, requires, profiles, workspace_integration, metadata) so consumers read only the canonical file and document the rule in the repo README/CI config. ``` </details> </blockquote></details> <details> <summary>packages/lib-forge/agents/lib-validator.md (1)</summary><blockquote> `129-153`: **Make the validation report contract machine-readable for workflow decisions.** The sample is human-friendly, but adding explicit fields like `total_scripts`, `approved_scripts`, and `blocked_scripts` would make gating decisions deterministic for orchestrators. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/agents/lib-validator.md` around lines 129 - 153, Update the validation report output (the "Relatório de Validação" block) to be machine-readable by emitting structured JSON/YAML fields instead of only human text: include top-level keys total_scripts, approved_scripts, blocked_scripts, and a scripts array where each entry contains name, status (APPROVED/BLOCKED), missing_items (list of issues like "docstring_return", "type_hint:horario", "error_handling"), and human_readable_summary. Locate the code that produces the "Relatório de Validação" markdown in packages/lib-forge/agents/lib-validator.md (the generator that prints the validation lines such as "✅ buscar_horarios_disponiveis" and "❌ verificar_profissional_disponivel") and change it to build and emit the structured object alongside (or instead of) the current human text so orchestrators can read total/approved/blocked counts and per-script details deterministically. ``` </details> </blockquote></details> <details> <summary>packages/lib-forge/tasks/generate-scripts.md (1)</summary><blockquote> `114-115`: **Avoid broad catch + generic rethrow in the template pattern.** Catching `Exception` and rethrowing `Exception` at lines 114–115 loses error specificity and makes downstream handling harder. This pattern also appears in `packages/lib-forge/templates/script-template.py` (lines 41–42), suggesting a broader issue in how exceptions are handled across templates. Prefer exception chaining with domain-specific exceptions: <details> <summary>Suggested fix</summary> ```diff - except Exception as e: - raise Exception(f"Mensagem clara em português: {e}") + except Exception as e: + raise RuntimeError(f"Mensagem clara em português: {e}") from e ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@packages/lib-forge/tasks/generate-scripts.md` around lines 114 - 115, Replace the broad catch-and-rethrow pattern that uses "except Exception as e: raise Exception(...)" with a domain-specific exception and exception chaining; for example, introduce a TemplateGenerationError or ScriptGenerationError and in the except block rethrow using "raise TemplateGenerationError('Mensagem clara em português: ...') from e" (update both occurrences shown in the diff and the similar block in packages/lib-forge/templates/script-template.py) so the original traceback is preserved and callers can handle the specific exception type. ``` </details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against the current code and only fix it if needed.
Inline comments:
In@packages/lib-forge/agents/lib-forge-chief.md:
- Around line 66-69: The decision-matrix entries (new_request,
conversation_provided, design_approved, validation_needed) reference command
tokens like "*analyze-prd", "*extract-opportunities", "*design-lib-structure",
"*validate-scripts" that don't match the actual command names declared in the
commands list (e.g., "analyze", "extract", "design", "validate"); update the
decision matrix to use the exact command identifiers used in the commands
definition (including or removing the leading asterisk consistently), or
alternatively rename the commands in the commands array to match the matrix;
ensure tokens used in new_request, conversation_provided, design_approved and
validation_needed exactly match the corresponding command names so execution
routing will resolve correctly.In
@packages/lib-forge/agents/lib-validator.md:
- Around line 96-98: Update the IDE file-resolution base path in
lib-validator.md by changing the base_path value from "squads/lib-forge" to
"packages/lib-forge" so agent tooling can resolve tasks/checklists correctly;
keep the existing resolution_pattern and types unchanged (look for the base_path
key in the YAML block shown).In
@packages/lib-forge/agents/prd-analyst.md:
- Around line 97-100: The IDE-FILE-RESOLUTION block currently sets base_path to
"squads/lib-forge" which doesn't match where this package's files live; update
the base_path value in the IDE-FILE-RESOLUTION YAML to "packages/lib-forge"
(leave resolution_pattern and types unchanged) so the resolution_pattern
"{base_path}/{type}/{name}" correctly maps to your package layout and
command-to-file resolution will work.In
@packages/lib-forge/checklists/script-quality-checklist.md:
- Around line 3-33: Split the checklist into two clear sections "Bloqueantes"
and "Avisos": move items that must be enforced for approval (e.g., required type
hints, docstrings, error handling, consistent returns, module docstring,
adherence to approved design and signatures) into "Bloqueantes", and move
heuristic/best-practice items (e.g., naming style preferences, max lines,
single-responsibility suggestions, avoiding prints) into "Avisos"; update the
top-level headings (currently "Por Função", "Por Arquivo", "Compliance com
Design", "Resultado Final") to include/point to the new categories so reviewers
can unambiguously mark approvals vs warnings consistent with the policy
referenced in lib-validator.md:83-93.In
@packages/lib-forge/config.yaml:
- Line 9: The slashPrefix value is mismatched—change the scalar named
slashPrefix from "libForge" to the kebab-case "lib-forge" so it matches the
squad manifest name and command naming convention; update the slashPrefix entry
to "lib-forge" (ensure any code reading slashPrefix or the squad manifest will
now resolve slash commands consistently).In
@packages/lib-forge/data/error-codes.yaml:
- Around line 117-124: The MISSING_TYPE_HINTS error (code LF-E032, name
MISSING_TYPE_HINTS) is currently set to severity: warning but must be blocker;
update the entry in data/error-codes.yaml to change severity from "warning" to
"blocker" (preserving other fields like
phase/agent/user_message/technical/recovery) so it matches the gating rules
referenced by lib-validator.md; after updating, run any schema/validation tests
that consume error-codes to ensure no side effects.- Around line 15-164: Update the phase identifiers across the YAML so they match
the workflow's exact IDs (replace PHASE_1..PHASE_6 with PHASE_1_INTAKE,
PHASE_2_ANALYSIS, PHASE_3_DESIGN, PHASE_4_GENERATION, PHASE_5_VALIDATION,
PHASE_6_DELIVERY for every error entry such as LF-E002, LF-E003,
LF-E010..LF-E012, LF-E020..LF-E022, LF-E030..LF-E032, LF-E040..LF-E051) and
change the severity of LF-E032 (MISSING_TYPE_HINTS) from warning to blocker to
align with lib-validator.md; ensure you update the phase field values and the
severity field for LF-E032 only, leaving other fields (code, name, user_message,
technical, recovery) unchanged.In
@packages/lib-forge/tasks/generate-scripts.md:
- Line 37: The output path currently uses the literal string
"victor-libs/{dominio}/{modulo}.py" which conflicts with workspace manifests
that allow writes under "../victor-libs/"; update the documented path (and any
corresponding task/config/workflow that consumes it) to use the writable root
convention — e.g. change the path string to
"../victor-libs/{dominio}/{modulo}.py" or replace the hardcoded base with the
configured writable root variable so all producers (generate-scripts.md, task
definitions, and workflows) use the same base path.In
@packages/lib-forge/tasks/orchestrate-pipeline.md:
- Around line 14-18: The manifest marks the input field prd_source as required
but the orchestration logic still allows advancing when only "context material"
is present; update the pipeline precondition to match the input contract by
enforcing prd_source presence wherever the pipeline checks for context-only
progression (the decision/guard that permits "proceed with only context
material" in the orchestrate-pipeline flow). Locate the guard/validation that
evaluates context material (the step that currently permits progression without
prd_source) and either (A) add an explicit check that prd_source is
non-empty/valid before proceeding, or (B) change the manifest and downstream
validations to make prd_source optional consistently—ensure the same symbol
prd_source is validated in both the input schema and the proceed/advance logic
so downstream phases cannot run without the required product source.- Around line 69-87: The pipeline task (id "3") ignores the selected profile and
always runs PHASE_1..PHASE_6; update the task so the selected "profile" (full |
analysis-only | generate-only) controls which phases run: for "analysis-only"
execute only PHASE_1 and PHASE_2, for "generate-only" execute PHASE_1 and
PHASE_4, and for "full" execute all PHASE_1..PHASE_6 (use the validated profile
value from the earlier section), ensure the task writes which profile is active
and a brief phase summary to the user, and keep onFailure behavior
(default_to_full / halt_and_report) unchanged; modify the id "3" block that
references wf-prd-to-lib.yaml and the PHASE_* entries to perform conditional
delegation based on the profile.In
@packages/lib-forge/tasks/publish-to-victor-libs.md:
- Line 10: A entrada destination está declarada mas não utilizada — localizar
todas as ocorrências que usam o caminho fixo "victor-libs/..." (as ações/steps
que referenciamvictor-libs/...) e substituir pelo uso da variável de entrada
destination(respeitando o valor padrão "../victor-libs/"); também garanta que
qualquer leitura/parsing da entrada (ondedestinationé obtida) seja usada nas
etapas que copiam ou publicam artefatos (procure por referências concretas a
"victor-libs" no documento), atualize essas referências paradestinatione
mantenha o comportamento atual caso a entrada não seja fornecida.In
@packages/lib-forge/tasks/validate-scripts.md:
- Around line 22-25: The task output contract currently lists only
validation_report and approved_scripts; add a new top-level output key
blocked_scripts (array → Memory) to the same output section so downstream
consumers can read blocked items directly instead of parsing free-form report
text; update both occurrences of the output block (the sections that contain
validation_report and approved_scripts) to include blocked_scripts with the same
Memory type and a brief description indicating it contains scripts denied by
validation.- Around line 54-57: The checklist items "Checar que cada função do design foi
implementada", "Checar que nenhuma função extra foi adicionada sem aprovação"
and "Verificar nomes correspondem exatamente ao design" only check
presence/names; update the validation instructions to require checking parameter
lists and return types against the approved design contract as well — for each
function referenced by the checklist, describe that the validator must compare
function signatures (parameter names/types/ordering, optional params, variadic,
and return type) to the canonical design spec and fail if any mismatch is found;
also extend this signature check to the corresponding verification mentioned
around lines "91-92" so both presence/name checks and full signature equivalence
are enforced.In
@packages/lib-forge/templates/script-template.py:
- Around line 41-42: The except block that currently does "except Exception as
e: raise Exception(f'Erro ao executar {nome_da_funcao.name}: {e}')" loses
the original traceback and exception type; update the handler to raise a more
specific exception (e.g., RuntimeError or a custom ExecutionError) and chain the
original exception using "from e" so the original context is preserved — locate
the except Exception as e block around nome_da_funcao and replace the current
raise with a chained raise like "raise RuntimeError(f'Erro ao executar
{nome_da_funcao.name}: {e}') from e".In
@packages/lib-forge/workflows/wf-prd-to-lib.yaml:
- Around line 21-31: The canonical sequence is missing an explicit
design_approved artifact required by generateScripts(); update the workflow so
PHASE_3 (agent: lib-architect / action: "Projetar estrutura...") also creates
design_approved (in addition to lib_design) and PHASE_4 (agent: script-writer /
action: "Gerar scripts Python...") requires design_approved (in addition to
lib_design) so the script-writer/generateScripts() contract cannot be bypassed;
locate the entries for the lib-architect and script-writer steps (symbols:
lib_design, script-writer, generateScripts(), design_approved, PHASE_3, PHASE_4)
and add the explicit creates and requires as described.In
@packages/lib-forge/workflows/wf-validation-gate.yaml:
- Around line 12-17: The workflow uses the variables {approved_scripts},
{total_scripts}, and {blocked_scripts} in the lib-forge-chief routing step
(agent: lib-forge-chief, action: "Decidir fluxo...") but those names are not
declared as artifacts/outputs in the sequence contract, causing nondeterministic
routing; fix by adding these three artifacts/outputs to the sequence contract
(similar to how validation_report is declared with creates: validation_report)
so the workflow explicitly produces approved_scripts, total_scripts, and
blocked_scripts before the lib-forge-chief step, and ensure any task that
computes them updates/creates those artifacts (e.g., update the task that
produces validation_report to also create or update
approved_scripts/total_scripts/blocked_scripts).- Around line 19-27: Separate the correction and publish steps into explicit FIX
and PUBLISH gates so publishing cannot run when blockers remain: create a FIX
gate that runs the agent "script-writer" with action "Corrigir apenas os itens
bloqueantes..." and outputs updated validation_report or generated_scripts, and
create a PUBLISH gate that runs agent "lib-forge-chief" with action "Publicar
scripts aprovados..." but only triggers when validation_report indicates no
blockers (e.g., a clean status flag) or when FIX produced no unresolved
blockers; ensure the PUBLISH gate's requires/condition references the FIX gate
output (validation_report clean flag) rather than running unconditionally after
the FIX step.
Minor comments:
In@packages/lib-forge/agents/lib-architect.md:
- Line 139: Two fenced code blocks in lib-architect.md (the blocks containing
"INPUT: Mapa de Oportunidades de@prd-analyst" and "DESIGN —
victor-libs/salao/") are missing a language tag and trigger MD040; update each
opening fence to include a language (e.g., changetotext) so the code
fences becometext ...and likewise for the second block, ensuring both
fenced sections declare the language.In
@packages/lib-forge/agents/lib-forge-chief.md:
- Line 157: O bloco de código fenced em lib-forge-chief.md (linha ~157) está sem
linguagem e aciona a regra MD040; atualize aquele fence para incluir uma tag de
linguagem (por exemplo usetext) para que o bloco comece comtext em vez
de apenas ``` e assim silenciar o alerta MD040 mantendo o conteúdo atual
intacto.In
@packages/lib-forge/agents/lib-validator.md:
- Around line 131-153: The fenced code/example block starting with the line
"VALIDAÇÃO — victor-libs/salao/disponibilidade.py" is missing a language tag and
triggers MD040; update the opening fence fromto a language-tagged fence such astext (or ```md) so the block is explicitly labeled, keeping the same
content and closing fence unchanged to fix the lint warning.In
@packages/lib-forge/agents/prd-analyst.md:
- Around line 146-158: Add explicit language identifiers (e.g., ```text) to the
fenced code blocks around the PRD template and the OPORTUNIDADE example in
prd-analyst.md so markdownlint MD040 is satisfied; locate the opening/closing
fences surrounding the blocks that start with "INPUT: PRD (texto/markdown) +
Conversa de contexto (opcional)" and "OPORTUNIDADE#1" and change the opening
triple-backticks to include the language token (and ensure the corresponding
closing fences remain triple-backticks).In
@packages/lib-forge/ARCHITECTURE.md:
- Line 74: Corrija a acentuação na linha que contém "Cada projeto importa da
pasta do seu domínio ou copia para dentro do projeto quando necessário." no
arquivo ARCHITECTURE.md substituindo "copia" por "cópia" para ficar "Cada
projeto importa da pasta do seu domínio ou cópia para dentro do projeto quando
necessário."; atualize somente esse texto mantendo o restante do parágrafo
intacto.- Around line 5-12: Add language identifiers to the three fenced code blocks in
ARCHITECTURE.md that currently start without them (the blocks around lines 5–12,
16–30, and 52–72); update each opening triple-backtick to include a short
language tag like "text" (e.g., ```text) so the Markdown linter rule MD040 is
satisfied, leaving the block contents unchanged and keeping the closing
triple-backticks as-is.In
@packages/lib-forge/checklists/design-approval-checklist.md:
- Line 36: Ajuste a fluidez da frase do item de checklist que atualmente lê "- [
] Usuário pediu alteração mas ainda não confirmou o novo design → BLOQUEAR":
abra e edite essa string (procure pelo texto exato "Usuário pediu alteração mas
ainda não confirmou o novo design → BLOQUEAR") e substitua a pontuação para
melhorar a leitura, por exemplo inserindo uma vírgula antes de "mas" e usando um
travessão/em dash para a ação final ("Usuário pediu alteração, mas ainda não
confirmou o novo design — BLOQUEAR"); salve a alteração no mesmo arquivo
para que a frase fique mais clara e fluida.In
@packages/lib-forge/config/tech-stack.md:
- Around line 38-43: The fenced code block that shows the directory tree (the
...block containing ../victor-libs/ └── {dominio}/ ...) is missing a
language tag which triggers MD040; update that fence to include a language
identifier such astext (orbash) so the markdown linter accepts it and
the tree renders with the correct fence language.In
@packages/lib-forge/README.md:
- Around line 21-67: The markdown fenced code blocks shown (the diagram block
starting with "PRD + Conversa ..." and the subsequent command examples
containing "@lib-forge", "*forge docs/meu-prd.md", "*analyze docs/meu-prd.md",
"*status", and the "victor-libs/" tree) need explicit fence languages to satisfy
MD040; update each opening triple-backtick to include an appropriate language
tag (e.g.,text for the diagram and tree,bash for the command examples)
so the blocks that reference "@lib-forge", "*forge ...", "*analyze ...", and
"*status" are all annotated.- Line 7: The PT-BR sentence mixes singular/plural agreement; change the phrase
"uma biblioteca de scripts Python prontos para uso, organizados no repositório
victor-libs/" to use feminine singular to match "uma biblioteca" (for example:
"uma biblioteca de scripts Python pronta para uso, organizada no repositório
victor-libs/") so both adjectives agree with "biblioteca" in README.md.In
@packages/lib-forge/tasks/extract-opportunities.md:
- Around line 21-26: A checklist item "Apresentar mapa ao usuário para revisão"
is not implemented as an explicit step in the steps section; add a concrete step
in the steps block that shows the user the consolidated opportunity map for
review, include expected inputs/outputs, the review acceptance criteria (e.g.,
approve/reject or request changes) and the artifact to be stored as audit
evidence, and ensure the new step references the checklist item so the gate is
auditable.- Line 65: O bloco de código fenced que contém "ID: OP001" precisa de uma
linguagem explicitada para satisfazer MD040; edite o bloco começando comtext (ou outra language tag apropriada) em vez de apenase mantenha a mesma série
de crases no fechamento (```), garantindo que o conteúdo entre os marcadores
permaneça inalterado.In
@packages/lib-forge/tasks/orchestrate-pipeline.md:
- Around line 134-143: The fenced code block that begins with "🔥 lib-forge
Pipeline" is missing a language identifier (MD040); update the opening fence
fromtotext so the block reads ```text followed by the pipeline ASCII
lines, ensuring the rest of the block remains unchanged.In
@packages/lib-forge/tasks/publish-to-victor-libs.md:
- Around line 37-40: The output contract for module_readme is inconsistent:
standardize the type for the module_readme output (the symbol module_readme) so
both declarations use the same kind (either File/file or string). Update the
later mapping where it currently reads "tipo: string" to match the earlier
declaration ("tipo: file" or "tipo: File"), or conversely change the earlier
declaration to "string"—prefer making module_readme a File if it maps to
"destino: File" and a path ("victor-libs/{dominio}/README.md").
Nitpick comments:
In@packages/lib-forge/agents/lib-validator.md:
- Around line 129-153: Update the validation report output (the "Relatório de
Validação" block) to be machine-readable by emitting structured JSON/YAML fields
instead of only human text: include top-level keys total_scripts,
approved_scripts, blocked_scripts, and a scripts array where each entry contains
name, status (APPROVED/BLOCKED), missing_items (list of issues like
"docstring_return", "type_hint:horario", "error_handling"), and
human_readable_summary. Locate the code that produces the "Relatório de
Validação" markdown in packages/lib-forge/agents/lib-validator.md (the generator
that prints the validation lines such as "✅ buscar_horarios_disponiveis" and "❌
verificar_profissional_disponivel") and change it to build and emit the
structured object alongside (or instead of) the current human text so
orchestrators can read total/approved/blocked counts and per-script details
deterministically.In
@packages/lib-forge/checklists/script-quality-checklist.md:
- Line 31: Change the markdown heading "## Resultado Final" to the shorter "##
Resultado" in the file (replace the header text in the checklist where the
heading string "## Resultado Final" appears) to remove the redundancy and
improve wording.In
@packages/lib-forge/config.yaml:
- Around line 1-95: The manifest metadata (fields like name, version, requires,
profiles, profiles->full/analysis-only/generate-only, workspace_integration,
metadata counts) is duplicated between config.yaml and squad.yaml causing drift;
pick one canonical source (e.g., keep config.yaml as the single source) and
remove duplicated sections from squad.yaml (or vice‑versa), implement a small
generation step or CI validation that either (a) generates squad.yaml from
config.yaml (script named e.g., generate_squad_manifest) or (b) fails CI if key
fields diverge; update references to unique symbols (name, version, requires,
profiles, workspace_integration, metadata) so consumers read only the canonical
file and document the rule in the repo README/CI config.In
@packages/lib-forge/tasks/generate-scripts.md:
- Around line 114-115: Replace the broad catch-and-rethrow pattern that uses
"except Exception as e: raise Exception(...)" with a domain-specific exception
and exception chaining; for example, introduce a TemplateGenerationError or
ScriptGenerationError and in the except block rethrow using "raise
TemplateGenerationError('Mensagem clara em português: ...') from e" (update both
occurrences shown in the diff and the similar block in
packages/lib-forge/templates/script-template.py) so the original traceback is
preserved and callers can handle the specific exception type.</details> <details> <summary>🪄 Autofix (Beta)</summary> Fix all unresolved CodeRabbit comments on this PR: - [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended) - [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes </details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro **Run ID**: `e9a2d4fe-7551-4445-bb05-593d06822ff4` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 66118db856ef655b8cf5ba44eda963ad4d0b1d78 and 71d8b1cb233bb7493cc73e4b311002a7d5d804ae. </details> <details> <summary>📒 Files selected for processing (29)</summary> * `packages/lib-forge/ARCHITECTURE.md` * `packages/lib-forge/CHANGELOG.md` * `packages/lib-forge/README.md` * `packages/lib-forge/agents/lib-architect.md` * `packages/lib-forge/agents/lib-forge-chief.md` * `packages/lib-forge/agents/lib-validator.md` * `packages/lib-forge/agents/prd-analyst.md` * `packages/lib-forge/agents/script-writer.md` * `packages/lib-forge/checklists/design-approval-checklist.md` * `packages/lib-forge/checklists/prd-analysis-checklist.md` * `packages/lib-forge/checklists/script-quality-checklist.md` * `packages/lib-forge/config.yaml` * `packages/lib-forge/config/tech-stack.md` * `packages/lib-forge/data/agent-registry.yaml` * `packages/lib-forge/data/error-codes.yaml` * `packages/lib-forge/data/heuristics.yaml` * `packages/lib-forge/squad.yaml` * `packages/lib-forge/tasks/analyze-prd.md` * `packages/lib-forge/tasks/design-lib-structure.md` * `packages/lib-forge/tasks/extract-opportunities.md` * `packages/lib-forge/tasks/generate-scripts.md` * `packages/lib-forge/tasks/orchestrate-pipeline.md` * `packages/lib-forge/tasks/publish-to-victor-libs.md` * `packages/lib-forge/tasks/validate-scripts.md` * `packages/lib-forge/templates/lib-readme-template.md` * `packages/lib-forge/templates/script-template.py` * `packages/lib-forge/workflows/wf-prd-to-lib.yaml` * `packages/lib-forge/workflows/wf-validation-gate.yaml` * `registry.json` </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
| new_request: "IF PRD fornecido → *analyze-prd → *extract-opportunities → aguarda aprovação" | ||
| conversation_provided: "IF conversa fornecida → enriquece análise com contexto" | ||
| design_approved: "IF lista aprovada → *design-lib-structure → *generate-scripts" | ||
| validation_needed: "IF scripts gerados → *validate-scripts → relatório ao usuário" |
There was a problem hiding this comment.
Comandos na matriz de decisão não batem com os comandos declarados.
Nas Lines 66–69, a matriz referencia comandos diferentes dos definidos em commands (ex.: *analyze-prd vs analyze). Isso pode quebrar roteamento de execução.
🔧 Sugestão de alinhamento
- new_request: "IF PRD fornecido → *analyze-prd → *extract-opportunities → aguarda aprovação"
+ new_request: "IF PRD fornecido → *analyze → aguarda aprovação"
conversation_provided: "IF conversa fornecida → enriquece análise com contexto"
- design_approved: "IF lista aprovada → *design-lib-structure → *generate-scripts"
- validation_needed: "IF scripts gerados → *validate-scripts → relatório ao usuário"
+ design_approved: "IF lista aprovada → *design → *generate"
+ validation_needed: "IF scripts gerados → *validate → relatório ao usuário"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| new_request: "IF PRD fornecido → *analyze-prd → *extract-opportunities → aguarda aprovação" | |
| conversation_provided: "IF conversa fornecida → enriquece análise com contexto" | |
| design_approved: "IF lista aprovada → *design-lib-structure → *generate-scripts" | |
| validation_needed: "IF scripts gerados → *validate-scripts → relatório ao usuário" | |
| new_request: "IF PRD fornecido → *analyze → aguarda aprovação" | |
| conversation_provided: "IF conversa fornecida → enriquece análise com contexto" | |
| design_approved: "IF lista aprovada → *design → *generate" | |
| validation_needed: "IF scripts gerados → *validate → relatório ao usuário" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/agents/lib-forge-chief.md` around lines 66 - 69, The
decision-matrix entries (new_request, conversation_provided, design_approved,
validation_needed) reference command tokens like "*analyze-prd",
"*extract-opportunities", "*design-lib-structure", "*validate-scripts" that
don't match the actual command names declared in the commands list (e.g.,
"analyze", "extract", "design", "validate"); update the decision matrix to use
the exact command identifiers used in the commands definition (including or
removing the leading asterisk consistently), or alternatively rename the
commands in the commands array to match the matrix; ensure tokens used in
new_request, conversation_provided, design_approved and validation_needed
exactly match the corresponding command names so execution routing will resolve
correctly.
| base_path: "squads/lib-forge" | ||
| resolution_pattern: "{base_path}/{type}/{name}" | ||
| types: [tasks, checklists] |
There was a problem hiding this comment.
Fix IDE file-resolution base path.
Line 96 points to squads/lib-forge, but this squad lives under packages/lib-forge. This can break task/checklist lookup in agent tooling.
Suggested fix
- base_path: "squads/lib-forge"
+ base_path: "packages/lib-forge"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| base_path: "squads/lib-forge" | |
| resolution_pattern: "{base_path}/{type}/{name}" | |
| types: [tasks, checklists] | |
| base_path: "packages/lib-forge" | |
| resolution_pattern: "{base_path}/{type}/{name}" | |
| types: [tasks, checklists] |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/agents/lib-validator.md` around lines 96 - 98, Update the
IDE file-resolution base path in lib-validator.md by changing the base_path
value from "squads/lib-forge" to "packages/lib-forge" so agent tooling can
resolve tasks/checklists correctly; keep the existing resolution_pattern and
types unchanged (look for the base_path key in the YAML block shown).
| IDE-FILE-RESOLUTION: | ||
| base_path: "squads/lib-forge" | ||
| resolution_pattern: "{base_path}/{type}/{name}" | ||
| types: [tasks, templates, checklists, data] |
There was a problem hiding this comment.
Fix base_path to match actual package location.
Line 98 points to squads/lib-forge, but this PR structures files under packages/lib-forge. This can break command-to-file resolution.
Proposed fix
IDE-FILE-RESOLUTION:
- base_path: "squads/lib-forge"
+ base_path: "packages/lib-forge"
resolution_pattern: "{base_path}/{type}/{name}"
types: [tasks, templates, checklists, data]📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| IDE-FILE-RESOLUTION: | |
| base_path: "squads/lib-forge" | |
| resolution_pattern: "{base_path}/{type}/{name}" | |
| types: [tasks, templates, checklists, data] | |
| IDE-FILE-RESOLUTION: | |
| base_path: "packages/lib-forge" | |
| resolution_pattern: "{base_path}/{type}/{name}" | |
| types: [tasks, templates, checklists, data] |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/agents/prd-analyst.md` around lines 97 - 100, The
IDE-FILE-RESOLUTION block currently sets base_path to "squads/lib-forge" which
doesn't match where this package's files live; update the base_path value in the
IDE-FILE-RESOLUTION YAML to "packages/lib-forge" (leave resolution_pattern and
types unchanged) so the resolution_pattern "{base_path}/{type}/{name}" correctly
maps to your package layout and command-to-file resolution will work.
| ## Por Função (verificar cada uma) | ||
| - [ ] Nome da função é autoexplicativo sem precisar de comentário | ||
| - [ ] Nome em snake_case | ||
| - [ ] Nome em português se domínio é em português | ||
| - [ ] Todos os parâmetros têm type hints (`: tipo`) | ||
| - [ ] Retorno tem type hint (`-> tipo`) | ||
| - [ ] Docstring presente logo após `def` | ||
| - [ ] Docstring em português | ||
| - [ ] Docstring documenta: o que faz, cada parâmetro, o retorno, possíveis exceções | ||
| - [ ] Tratamento de erro presente se faz chamada externa (API, banco, arquivo) | ||
| - [ ] Mensagem de exceção em português e explicativa | ||
| - [ ] Retorno consistente em todos os paths (não retorna None em um e dict em outro) | ||
| - [ ] Função não tem `print()` interno | ||
| - [ ] Função faz apenas uma coisa (um verbo de ação) | ||
| - [ ] Função tem máximo ~30 linhas de código real | ||
|
|
||
| ## Por Arquivo | ||
| - [ ] Docstring de módulo no topo do arquivo | ||
| - [ ] Apenas imports de dependências listadas no design | ||
| - [ ] Estrutura segue o design aprovado | ||
| - [ ] Nenhuma função extra não prevista no design | ||
|
|
||
| ## Compliance com Design | ||
| - [ ] Todas as funções do design foram implementadas | ||
| - [ ] Nenhuma função extra sem aprovação do usuário | ||
| - [ ] Nomes exatamente como no design aprovado | ||
| - [ ] Assinaturas (parâmetros + retorno) conforme design | ||
|
|
||
| ## Resultado Final | ||
| - [ ] APROVADO: script pode ir para victor-libs/ | ||
| - [ ] BLOQUEADO: lista de itens a corrigir com explicação e solução |
There was a problem hiding this comment.
Split checklist into “Bloqueantes” vs “Avisos”.
Current items mix hard requirements and heuristics in one bucket. This conflicts with packages/lib-forge/agents/lib-validator.md:83-93, which explicitly separates blocking from warning criteria, and can cause inconsistent approval decisions.
🧰 Tools
🪛 LanguageTool
[style] ~31-~31: “Resultado Final” é um pleonasmo. É preferível dizer “resultado”
Context: ...râmetros + retorno) conforme design ## Resultado Final - [ ] APROVADO: script pode ir para vic...
(PT_REDUNDANCY_REPLACE_RESULTADO_FINAL)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/checklists/script-quality-checklist.md` around lines 3 -
33, Split the checklist into two clear sections "Bloqueantes" and "Avisos": move
items that must be enforced for approval (e.g., required type hints, docstrings,
error handling, consistent returns, module docstring, adherence to approved
design and signatures) into "Bloqueantes", and move heuristic/best-practice
items (e.g., naming style preferences, max lines, single-responsibility
suggestions, avoiding prints) into "Avisos"; update the top-level headings
(currently "Por Função", "Por Arquivo", "Compliance com Design", "Resultado
Final") to include/point to the new categories so reviewers can unambiguously
mark approvals vs warnings consistent with the policy referenced in
lib-validator.md:83-93.
| e gerar bibliotecas de scripts Python organizadas, prontas para uso em qualquer projeto. | ||
| author: Victor Cruz | ||
| license: MIT | ||
| slashPrefix: libForge |
There was a problem hiding this comment.
Normalize slashPrefix to match squad manifest and kebab-case commands.
Line 9 uses libForge, but packages/lib-forge/squad.yaml uses lib-forge. This mismatch can break slash-command resolution depending on which manifest is loaded.
Suggested fix
-slashPrefix: libForge
+slashPrefix: lib-forge📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| slashPrefix: libForge | |
| slashPrefix: lib-forge |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/config.yaml` at line 9, The slashPrefix value is
mismatched—change the scalar named slashPrefix from "libForge" to the kebab-case
"lib-forge" so it matches the squad manifest name and command naming convention;
update the slashPrefix entry to "lib-forge" (ensure any code reading slashPrefix
or the squad manifest will now resolve slash commands consistently).
| - "Checar que cada função do design foi implementada" | ||
| - "Checar que nenhuma função extra foi adicionada sem aprovação" | ||
| - "Verificar nomes correspondem exatamente ao design" | ||
|
|
There was a problem hiding this comment.
Validate function signatures against design, not just names.
Line 54 through Line 57 enforce function existence/naming, but miss parameter and return signature equivalence. This can approve scripts that still violate the approved design contract.
Proposed fix
- id: "2"
description: "Validar compliance com design"
actions:
- "Checar que cada função do design foi implementada"
- "Checar que nenhuma função extra foi adicionada sem aprovação"
- "Verificar nomes correspondem exatamente ao design"
+ - "Verificar assinaturas (parâmetros + tipos + retorno) exatamente conforme o design aprovado"Also applies to: 91-92
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/tasks/validate-scripts.md` around lines 54 - 57, The
checklist items "Checar que cada função do design foi implementada", "Checar que
nenhuma função extra foi adicionada sem aprovação" and "Verificar nomes
correspondem exatamente ao design" only check presence/names; update the
validation instructions to require checking parameter lists and return types
against the approved design contract as well — for each function referenced by
the checklist, describe that the validator must compare function signatures
(parameter names/types/ordering, optional params, variadic, and return type) to
the canonical design spec and fail if any mismatch is found; also extend this
signature check to the corresponding verification mentioned around lines "91-92"
so both presence/name checks and full signature equivalence are enforced.
| except Exception as e: | ||
| raise Exception(f"Erro ao executar {nome_da_funcao.__name__}: {e}") |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n packages/lib-forge/templates/script-template.py | head -50Repository: SynkraAI/aiox-squads
Length of output: 1534
Preserve exception context with explicit chaining.
Lines 41-42 drop the original exception's traceback and type by using raise Exception(...) without chaining. This weakens diagnostics and violates PEP 3134. Use exception chaining with a more specific exception type:
Suggested fix
except Exception as e:
- raise Exception(f"Erro ao executar {nome_da_funcao.__name__}: {e}")
+ raise RuntimeError(
+ f"Erro ao executar {nome_da_funcao.__name__}: {e}"
+ ) from e📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| except Exception as e: | |
| raise Exception(f"Erro ao executar {nome_da_funcao.__name__}: {e}") | |
| except Exception as e: | |
| raise RuntimeError( | |
| f"Erro ao executar {nome_da_funcao.__name__}: {e}" | |
| ) from e |
🧰 Tools
🪛 Ruff (0.15.12)
[warning] 41-41: Do not catch blind exception: Exception
(BLE001)
[warning] 42-42: Within an except clause, raise exceptions with raise ... from err or raise ... from None to distinguish them from errors in exception handling
(B904)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/templates/script-template.py` around lines 41 - 42, The
except block that currently does "except Exception as e: raise Exception(f'Erro
ao executar {nome_da_funcao.__name__}: {e}')" loses the original traceback and
exception type; update the handler to raise a more specific exception (e.g.,
RuntimeError or a custom ExecutionError) and chain the original exception using
"from e" so the original context is preserved — locate the except Exception as e
block around nome_da_funcao and replace the current raise with a chained raise
like "raise RuntimeError(f'Erro ao executar {nome_da_funcao.__name__}: {e}')
from e".
| - agent: lib-architect | ||
| action: "Projetar estrutura da biblioteca (funções, pastas, type hints) — aguarda aprovação humana" | ||
| requires: opportunities_map | ||
| creates: lib_design | ||
| human_gate: true | ||
| checkpoint: CP_003 | ||
|
|
||
| - agent: script-writer | ||
| action: "Gerar scripts Python seguindo exatamente o design aprovado" | ||
| requires: lib_design | ||
| creates: generated_scripts |
There was a problem hiding this comment.
Propagate design_approved explicitly in the canonical sequence.
generateScripts() requires design_approved as mandatory input, but the sequence only passes lib_design to script-writer. Add explicit creation at PHASE_3 and requirement at PHASE_4 to prevent gate bypass/contract failures.
Suggested fix
- agent: lib-architect
action: "Projetar estrutura da biblioteca (funções, pastas, type hints) — aguarda aprovação humana"
requires: opportunities_map
- creates: lib_design
+ creates: [lib_design, design_approved]
human_gate: true
checkpoint: CP_003
- agent: script-writer
action: "Gerar scripts Python seguindo exatamente o design aprovado"
- requires: lib_design
+ requires: [lib_design, design_approved]
creates: generated_scripts
checkpoint: CP_004🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/workflows/wf-prd-to-lib.yaml` around lines 21 - 31, The
canonical sequence is missing an explicit design_approved artifact required by
generateScripts(); update the workflow so PHASE_3 (agent: lib-architect /
action: "Projetar estrutura...") also creates design_approved (in addition to
lib_design) and PHASE_4 (agent: script-writer / action: "Gerar scripts
Python...") requires design_approved (in addition to lib_design) so the
script-writer/generateScripts() contract cannot be bypassed; locate the entries
for the lib-architect and script-writer steps (symbols: lib_design,
script-writer, generateScripts(), design_approved, PHASE_3, PHASE_4) and add the
explicit creates and requires as described.
| creates: validation_report | ||
|
|
||
| - agent: lib-forge-chief | ||
| action: "Decidir fluxo: se todos aprovados → PUBLISH; se bloqueados e iterações < max → FIX; senão escalar" | ||
| requires: validation_report | ||
| updates: iteration_count |
There was a problem hiding this comment.
Align workflow variables with declared outputs.
Line 31 through Line 36 use {approved_scripts}, {total_scripts}, and {blocked_scripts}, but these are not declared as artifacts in the sequence contract. This makes routing nondeterministic.
Proposed fix
- agent: lib-validator
action: "Validar todos os scripts gerados e produzir relatório com APROVADO/BLOQUEADO por script"
- creates: validation_report
+ creates:
+ - validation_report
+ - approved_scripts
+ - blocked_scripts
+ - total_scriptsAlso applies to: 31-36
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/workflows/wf-validation-gate.yaml` around lines 12 - 17,
The workflow uses the variables {approved_scripts}, {total_scripts}, and
{blocked_scripts} in the lib-forge-chief routing step (agent: lib-forge-chief,
action: "Decidir fluxo...") but those names are not declared as
artifacts/outputs in the sequence contract, causing nondeterministic routing;
fix by adding these three artifacts/outputs to the sequence contract (similar to
how validation_report is declared with creates: validation_report) so the
workflow explicitly produces approved_scripts, total_scripts, and
blocked_scripts before the lib-forge-chief step, and ensure any task that
computes them updates/creates those artifacts (e.g., update the task that
produces validation_report to also create or update
approved_scripts/total_scripts/blocked_scripts).
| - agent: script-writer | ||
| action: "Corrigir apenas os itens bloqueantes listados no relatório — sem adicionar nem remover funções" | ||
| requires: validation_report | ||
| updates: generated_scripts | ||
|
|
||
| - agent: lib-forge-chief | ||
| action: "Publicar scripts aprovados em victor-libs/ após ciclo de validação concluído" | ||
| requires: validation_report | ||
| creates: delivery_summary |
There was a problem hiding this comment.
Gate FIX vs PUBLISH explicitly to avoid invalid execution paths.
Line 19 through Line 27 currently run correction and publishing in the same loop sequence. That can trigger publish when blockers still exist (or unnecessary rewrites when all scripts are already approved).
Proposed fix
sequence:
- agent: lib-validator
action: "Validar todos os scripts gerados e produzir relatório com APROVADO/BLOQUEADO por script"
creates: validation_report
- agent: lib-forge-chief
action: "Decidir fluxo: se todos aprovados → PUBLISH; se bloqueados e iterações < max → FIX; senão escalar"
requires: validation_report
- updates: iteration_count
+ updates: iteration_count
+ creates: next_action
- agent: script-writer
action: "Corrigir apenas os itens bloqueantes listados no relatório — sem adicionar nem remover funções"
requires: validation_report
updates: generated_scripts
+ when: "next_action == FIX"
- agent: lib-forge-chief
action: "Publicar scripts aprovados em victor-libs/ após ciclo de validação concluído"
requires: validation_report
creates: delivery_summary
+ when: "next_action == PUBLISH"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/lib-forge/workflows/wf-validation-gate.yaml` around lines 19 - 27,
Separate the correction and publish steps into explicit FIX and PUBLISH gates so
publishing cannot run when blockers remain: create a FIX gate that runs the
agent "script-writer" with action "Corrigir apenas os itens bloqueantes..." and
outputs updated validation_report or generated_scripts, and create a PUBLISH
gate that runs agent "lib-forge-chief" with action "Publicar scripts
aprovados..." but only triggers when validation_report indicates no blockers
(e.g., a clean status flag) or when FIX produced no unresolved blockers; ensure
the PUBLISH gate's requires/condition references the FIX gate output
(validation_report clean flag) rather than running unconditionally after the FIX
step.
New Squad: lib-forge
Version: 1.0.0
Author: Victor Cruz
Category: community
Description: Analisa PRDs e conversas de contexto para extrair oportunidades de automação e gerar bibliotecas de scripts Python organizadas, prontas para uso em qualquer projeto.
Components
Pipeline
PRD + conversa de contexto → análise → design (human gate) → geração → validação → entrega em
victor-libs/Agents
@lib-forge-chief(Forge)@prd-analyst(Ana)@lib-architect(Arco)@script-writer(Script)@lib-validator(Val)Pre-submission Checklist
Result: VALID(0 errors, 0 warnings)sequence+handoff_promptsTesting
Submitted via
*publish-squadfrom AIOX Squad CreatorSummary by CodeRabbit
New Features
Documentation