Skip to content

feat(docs): CODEMAP como camada de documentação (v0.5.3) - #17

Merged
lglucas merged 3 commits into
mainfrom
feat/codemap-v0.5.3
Aug 9, 2026
Merged

feat(docs): CODEMAP como camada de documentação (v0.5.3)#17
lglucas merged 3 commits into
mainfrom
feat/codemap-v0.5.3

Conversation

@lglucas

@lglucas lglucas commented Aug 9, 2026

Copy link
Copy Markdown
Owner

O problema

Duas regras deste OS resolvem metades diferentes do mesmo problema, e até agora só uma existia.

Arquivo de código abaixo de 200 linhas (code-style) torna qualquer arquivo barato de ler. Mas barato de ler não é fácil de achar: um agente procurando "onde acontece o login" faz grep, pega resultados ambíguos, abre quatro arquivos e lê três que não queria. Os arquivos eram curtos; a busca é que foi cara.

CODEMAP.md fecha a outra metade — uma linha por arquivo de código, agrupada por diretório. Lê o mapa, abre o arquivo certo.

Decisões

Escopo: o projeto derivado, não o OS. Dentro deste repo o script sai 0 sem escrever nada, detectado pelo marcador .aios-self que o os-self-test já usava. Reaproveitar o marcador mantém um conceito de "qual repo é este" em vez de dois que podem discordar.

Gerado, nunca escrito à mão. A descrição sai do cabeçalho Purpose: que a code-style já exigia. Se fosse escrita à mão no mapa, existiriam duas fontes de verdade sobre o que um arquivo faz, e elas divergiriam na primeira refatoração. Fallback: bloco de comentário → comentário de linha → ⚠️ sem cabeçalho.

Esse último caso é de propósito, e rendeu um efeito colateral bom: arquivo sem cabeçalho aparece marcado no mapa, então o codemap fiscaliza a regra de cabeçalho — que até então ninguém verificava.

Gate de CI, não checklist. Mapa desatualizado é pior que mapa nenhum: o agente confia, pula a leitura e age com informação velha. Três session-logs deste repo registram o os-self-test não sendo rodado exatamente quando teria ajudado, na época em que dependia de alguém lembrar. Repetir isso na camada seguinte, um release depois, seria difícil de justificar.

O que entrou

Arquivo Papel
scripts/codemap.js Gerador e verificador; --check sai 1 na divergência
.claude/rules/codemap.md 12ª regra
.claude/skills/codemap/SKILL.md 28ª skill
templates/project/CODEMAP.template.md Placeholder do projeto novo
scripts/test/codemap.test.js 17 testes

Fiação: documentation-layers (regra + doc), release-check, sprint-management, ci.yml, os-self-test.js (9º grupo), WIZARD.md 5.1, phase-5-chegada.md, templates/project/CLAUDE.md, README e docs/skill-system.md.

Verificação

  • os-self-test: 70 verificações, COERENTE
  • node --test scripts/test/*.test.js: 92/92
  • codemap.js validado em projeto derivado simulado: gera, --check passa, --check falha ao divergir, skip dentro do repo do OS

Corrigido no caminho

  • templates/project/CODEMAP.template.md linkava .claude/rules/codemap.md — correto na raiz do projeto derivado, errado de templates/project/. Pego pelo próprio os-self-test. Virou caminho em texto, com a razão anotada no arquivo.
  • Numeração duplicada no checklist "Close sprint" do sprint-management.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added a generated CODEMAP.md to help locate project source files and understand their purpose.
    • Added automatic descriptions, file grouping, line-count reporting, and warnings for missing headers or oversized files.
    • Added guidance and workflow support for generating and refreshing the codemap.
  • Bug Fixes

    • Added continuous validation to detect outdated codemap content.
    • Corrected a template link and duplicate sprint numbering.
  • Tests

    • Added comprehensive coverage for codemap generation, formatting, exclusions, and validation.

Índice gerado do código, uma linha por arquivo, para a IA achar o
arquivo certo sem ler os errados. Fecha a outra metade da economia
que a regra das 200 linhas começou: arquivo curto é barato de ler,
mas sem índice continua caro de achar.

A descrição é extraída do cabeçalho `Purpose:` que a `code-style` já
exigia — uma fonte de verdade, não duas. Arquivo sem cabeçalho aparece
marcado no mapa, então o codemap fiscaliza a regra de cabeçalho de
quebra.

Escopo: o projeto derivado. Dentro do repo do OS o script sai 0 sem
escrever nada, detectado pelo marcador `.aios-self` que o os-self-test
já usava.

Enforcement em quatro lugares porque mapa desatualizado é pior que mapa
nenhum — o agente confia, pula a leitura e age com informação velha:
CI, sprint-management, release-check e os-self-test.

Novo:
- scripts/codemap.js — gerador e verificador (--check sai 1 na divergência)
- .claude/rules/codemap.md — 12ª regra
- .claude/skills/codemap/SKILL.md — 28ª skill
- templates/project/CODEMAP.template.md — placeholder do projeto novo
- scripts/test/codemap.test.js — 17 testes (92 no total)

Corrigido:
- link do CODEMAP.template.md que resolvia na raiz do destino mas não
  da origem (pego pelo próprio os-self-test)
- numeração duplicada no checklist "Close sprint"

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@lglucas, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 10 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a3555a52-828a-4c3b-bcd1-cf40f0b397ef

📥 Commits

Reviewing files that changed from the base of the PR and between db616d0 and 414d99c.

📒 Files selected for processing (10)
  • .claude/rules/codemap.md
  • .claude/skills/codemap/SKILL.md
  • CHANGELOG.md
  • README.md
  • RELEASE-NOTES-v0.5.3.md
  • WIZARD.md
  • docs/wizard/phase-5-chegada.md
  • scripts/codemap.js
  • scripts/test/codemap.test.js
  • templates/project/CODEMAP.template.md
📝 Walkthrough

Walkthrough

This change adds a generated CODEMAP.md for project code. It provides a Node.js generator, freshness checks, templates, agent guidance, CI enforcement, lifecycle integration, tests, and version 0.5.3 documentation.

Changes

CODEMAP workflow

Layer / File(s) Summary
Codemap generator and tests
scripts/codemap.js, scripts/test/codemap.test.js
The CLI discovers tracked source files, extracts descriptions, renders CODEMAP.md, checks freshness, and reports missing headers or oversized files. Unit tests cover parsing, cleaning, filtering, and path handling.
Project template and lifecycle wiring
templates/project/*, WIZARD.md, docs/wizard/*, .github/workflows/ci.yml, scripts/os-self-test.js, .claude/skills/{sprint-management,release-check}/*
Project setup creates CODEMAP.md. Sprint and release workflows regenerate and validate it. CI and self-tests check its presence and consistency.
Rules and skill guidance
.claude/rules/*, .claude/skills/codemap/*, docs/documentation-layers.md, docs/skill-system.md
Rules and skills define CODEMAP scope, required usage, regeneration commands, fallback descriptions, warnings, and generated-file handling.
Release and reference documentation
README.md, CHANGELOG.md, RELEASE-NOTES-v0.5.3.md, CLAUDE.md, session-log/*
Project documentation records the new codemap layer, inventory updates, enforcement points, tests, release details, and session outcomes.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ProjectSetup
  participant CodemapCLI
  participant Git
  participant CI
  ProjectSetup->>CodemapCLI: run generator
  CodemapCLI->>Git: read tracked project files
  Git-->>CodemapCLI: return source paths
  CodemapCLI-->>ProjectSetup: write CODEMAP.md
  CI->>CodemapCLI: run --check
  CodemapCLI-->>CI: return freshness status
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed O título identifica de forma clara e concisa a principal mudança: a adição do CODEMAP como camada de documentação.
Description check ✅ Passed A descrição explica o problema, as decisões, os arquivos alterados, a integração e os testes, cobrindo os requisitos principais do template.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/codemap-v0.5.3

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (1)
.claude/skills/codemap/SKILL.md (1)

6-77: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Complete the documented SKILL.md workflow structure.

This skill defines its trigger and main commands, but it does not define explicit Inputs, Outputs, Validation checklist, Related agents, or Failure modes. Add these sections so the workflow has a complete execution and verification contract.

As per docs/skill-system.md lines 104-115, every SKILL.md should document Purpose, When to use, Inputs, Steps, Outputs, Validation checklist, Related rules, Related agents, and Failure modes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/codemap/SKILL.md around lines 6 - 77, Complete the Codemap
SKILL.md workflow by adding explicit Purpose, When to use, Inputs, Steps,
Outputs, Validation checklist, Related rules, Related agents, and Failure modes
sections. Preserve the existing codemap commands and guidance, organizing them
under the corresponding sections and documenting the required execution and
verification behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/rules/codemap.md:
- Line 3: Atualize a descrição de CODEMAP.md para afirmar que ele lista todo
arquivo de código rastreado pelo Git, alinhando a reivindicação ao contrato
atual do gerador; não altere a lógica de coleta ou verificação de atualização.
- Around line 11-17: Update regeneration guidance in .claude/rules/codemap.md
lines 11-17, .claude/skills/codemap/SKILL.md line 37, and README.md lines
227-232 to trigger codemap generation after any line-count or Purpose: change,
as well as file creation, removal, renaming, or moving; retain 200 lines only as
a warning threshold in SKILL.md.
- Line 7: Make the read-first guidance conditional on operating in a derived
project or when the .aios-self marker is absent, rather than requiring
CODEMAP.md unconditionally. Update .claude/rules/codemap.md:7-7 and
.claude/skills/codemap/SKILL.md:8-12 consistently; both sites require direct
changes.

In `@CHANGELOG.md`:
- Line 33: Replace the unclear phrase “regra de cabeçalho de quebra” with “regra
de cabeçalho” or “regra de cabeçalho de código” in both release records:
CHANGELOG.md lines 33-33 and RELEASE-NOTES-v0.5.3.md lines 55-55.

In `@scripts/codemap.js`:
- Around line 71-75: The continuation check in the header parsing loop should
remove the applicable comment marker, including hash markers, before evaluating
indentation so wrapped `#` header lines append correctly. Update the relevant
expression in the codemap parsing logic and add a regression test covering a
wrapped `# Purpose:` header.
- Around line 99-103: Update the file-processing flow around the abs existence
check to call fs.lstatSync(abs) and skip entries whose stats identify a symbolic
link before invoking fs.readFileSync. Keep regular tracked files processed as
before, and ensure symlink targets are never read.

In `@templates/project/CODEMAP.template.md`:
- Around line 13-15: Remove the Markdown link syntax from the app.ts, login.ts,
and session.ts entries in the project codemap, leaving their filenames as plain
text while preserving the descriptions and metadata.

---

Nitpick comments:
In @.claude/skills/codemap/SKILL.md:
- Around line 6-77: Complete the Codemap SKILL.md workflow by adding explicit
Purpose, When to use, Inputs, Steps, Outputs, Validation checklist, Related
rules, Related agents, and Failure modes sections. Preserve the existing codemap
commands and guidance, organizing them under the corresponding sections and
documenting the required execution and verification behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7501a099-5358-41f0-ae74-7b71c5d7caed

📥 Commits

Reviewing files that changed from the base of the PR and between 88bcce8 and db616d0.

📒 Files selected for processing (21)
  • .claude/rules/codemap.md
  • .claude/rules/documentation-layers.md
  • .claude/skills/codemap/SKILL.md
  • .claude/skills/release-check/SKILL.md
  • .claude/skills/sprint-management/SKILL.md
  • .github/workflows/ci.yml
  • CHANGELOG.md
  • CLAUDE.md
  • README.md
  • RELEASE-NOTES-v0.5.3.md
  • WIZARD.md
  • docs/documentation-layers.md
  • docs/skill-system.md
  • docs/wizard/phase-5-chegada.md
  • scripts/codemap.js
  • scripts/os-self-test.js
  • scripts/test/codemap.test.js
  • session-log/2026-08-08-v0.5.3-codemap.md
  • session-log/INDEX.md
  • templates/project/CLAUDE.md
  • templates/project/CODEMAP.template.md

Comment thread .claude/rules/codemap.md Outdated
Comment thread .claude/rules/codemap.md
Comment thread .claude/rules/codemap.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread scripts/codemap.js
Comment thread scripts/codemap.js
Comment thread templates/project/CODEMAP.template.md Outdated
lglucas and others added 2 commits August 8, 2026 23:03
O lychee resolvia os caminhos sintéticos do exemplo (src/app.ts,
src/features/auth/*.ts) a partir de templates/project/, onde não
existem. O os-self-test não pegou porque só valida links .md.

Mesma classe do link da regra corrigido antes: o template é escrito
de um lugar e lido de outro. A tabela agora fica dentro de uma cerca
```markdown — ela ilustra a saída do gerador, não é saída. No arquivo
gerado os links são reais e resolvem.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Dois defeitos de código, ambos reproduzidos antes e depois:

- symlink rastreado era seguido na leitura. Um `secrets.js` que fosse
  link para fora do repo tinha seu primeiro comentário copiado para
  dentro do CODEMAP.md commitado. Verificado: git registra `120000
  link.js`, e o conteúdo externo aparecia no mapa. Agora `lstatSync`
  pula links.
- continuação de cabeçalho `#` era descartada. O teste de indentação
  removia só `*`, então o `#` da segunda linha bloqueava o match e
  headers Python/shell quebrados em duas linhas perdiam a metade final.

Quatro de documentação, a terceira sendo uma contradição real entre o
que a skill dizia e o que o CI faz:

- a skill afirmava "não precisa regenerar ao editar o corpo". Falso: o
  mapa grava a contagem exata de linhas, então quase toda edição o
  invalida e o --check acusa. Corrigido em 8 arquivos, com a surpresa
  explicitada em vez de escondida.
- "todo arquivo de código" → "todo arquivo de código rastreado pelo
  Git": collect() lê git ls-files, arquivo não adicionado não aparece.
- ler o CODEMAP.md era instrução incondicional, mas dentro do repo do
  OS o arquivo não existe por design. Agora a regra e a skill dizem o
  que fazer nesse caso.
- "de quebra" ficava ambíguo colado em "regra de cabeçalho". Reescrito
  como "efeito colateral".

2 testes novos (94 no total): a continuação com `#`, e um de integração
que roda o gerador num repo temporário com symlink e falha se o
conteúdo externo vazar. O segundo se auto-pula onde symlink não é
suportado.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@lglucas
lglucas merged commit 8bab74c into main Aug 9, 2026
3 checks passed
@lglucas
lglucas deleted the feat/codemap-v0.5.3 branch August 9, 2026 03:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant