Skip to content

feat(rust): Lexis e Codex avançados para desenvolvimento agêntico em Rust#1

Open
Fernando Seguim (fernandoseguim) wants to merge 2 commits into
mainfrom
feat/rust-agentic-guides-v2
Open

feat(rust): Lexis e Codex avançados para desenvolvimento agêntico em Rust#1
Fernando Seguim (fernandoseguim) wants to merge 2 commits into
mainfrom
feat/rust-agentic-guides-v2

Conversation

@fernandoseguim
Copy link
Copy Markdown
Contributor

Resumo

Este PR adiciona um conjunto completo de artefatos Ahrena para guiar o desenvolvimento agêntico em Rust, derivados do estudo profundo de 5 repositórios de referência da indústria e do blog de Andrew Gallant (BurntSushi).

Fontes de Conhecimento Estudadas

Repositório Padrões Extraídos
BurntSushi/ripgrep Performance extrema, regex, busca em camadas, CLI design, #[non_exhaustive]
tokio-rs/tokio Runtime assíncrono, cancellation safety, graceful shutdown, actor pattern
tikv/tikv Isolamento de unsafe, FSM, engine traits, performance critical path
meilisearch/meilisearch Task scheduling, batching, error codes estruturados, tracing
alacritty/alacritty Event loops, FairMutex, scheduler, padrões de sistema
burntsushi.net Error handling, unwrap, bstr, regex internals, FST, CSV, FOSS

Novos Artefatos

Lexis (Leis Inquebráveis)

Arquivo Lei
lex-rust-unsafe-isolation Blocos unsafe DEVEM ter comentário // SAFETY: e encapsulamento
lex-rust-no-blocking-in-async Proíbe I/O síncrono e CPU-bound em contextos assíncronos
lex-rust-library-error-types Bibliotecas DEVEM definir tipos de erro próprios; proíbe anyhow em APIs públicas
lex-rust-non-exhaustive-types Tipos públicos extensíveis DEVEM usar #[non_exhaustive]

Codex (Manuais de Referência)

Arquivo Domínio
codex-rust-async-architecture Tokio, task spawning, JoinSet, graceful shutdown, actor pattern
codex-rust-system-design Workspaces, batching, event loops, engine traits, FSM, tracing

README

Índice completo com todos os 7 Lexis e 7 Codex, incluindo os artefatos da v1 (já na main).

Checklist

  • Todos os artefatos seguem os templates do Ahrena
  • Lexis têm exemplos corretos e incorretos com código Rust real
  • Lexis têm seção de Validação Automatizada com configuração de clippy
  • Codex têm Princípios, Padrões, Decisões Vigentes, Restrições e Glossário
  • Todos os artefatos têm referências às fontes de conhecimento

Manus Agent added 2 commits March 9, 2026 23:39
Adiciona 4 Lexis e 5 Codex para guiar o desenvolvimento agêntico em Rust,
baseados nos ensinamentos de Andrew Gallant (BurntSushi) e nas melhores
práticas do ecossistema Rust.

## Lexis (Leis Inquebráveis)
- lex-rust-no-panic-in-production: proíbe unwrap/panic em erros recuperáveis
- lex-rust-no-assume-utf8-on-io: proíbe assumir UTF-8 em I/O não validado
- lex-rust-no-regex-compilation-in-loops: proíbe compilar Regex em loops
- lex-rust-library-must-define-error-type: bibliotecas devem ter tipo de erro próprio

## Codex (Manuais de Referência)
- codex-rust-error-handling: Result, Option, thiserror, anyhow, operador ?
- codex-rust-performance-and-search: busca em camadas, SIMD, NFA/DFA, FST
- codex-rust-api-design: Builder pattern, tipos genéricos, dois níveis de API
- codex-rust-burntsushi-ecosystem: mapa de crates (regex, memchr, bstr, fst, etc.)
- codex-rust-oss-maintenance: sustentabilidade OSS, SemVer, limites saudáveis

Fontes: burntsushi.net (error-handling, unwrap, bstr, regex-internals,
        ripgrep, transducers, csv, foss, projects)
…referência

Adiciona 4 novos Lexis e 2 novos Codex para desenvolvimento em Rust,
derivados do estudo profundo de 5 repositórios de referência da indústria:
ripgrep, tokio, alacritty, meilisearch e tikv.

## Novos Lexis (Leis Inquebráveis)
- lex-rust-unsafe-isolation: blocos unsafe DEVEM ter comentário SAFETY: e
  encapsulamento em Safe Abstraction (padrão TiKV/Alacritty)
- lex-rust-no-blocking-in-async: proíbe I/O síncrono e CPU-bound em
  contextos assíncronos sem spawn_blocking (padrão Tokio/Meilisearch)
- lex-rust-library-error-types: bibliotecas DEVEM definir tipos de erro
  próprios; proíbe anyhow em APIs públicas (padrão Meilisearch/Ripgrep)
- lex-rust-non-exhaustive-types: tipos públicos extensíveis DEVEM usar
  #[non_exhaustive] para evolução sem breaking changes (padrão Ripgrep)

## Novos Codex (Manuais de Referência)
- codex-rust-async-architecture: Tokio, task spawning, JoinSet, graceful
  shutdown, actor pattern, cancellation safety, select! patterns
- codex-rust-system-design: Workspaces, batching, event loops, engine
  traits, FSM, observabilidade com tracing, newtype pattern

## Atualizado
- README.md: índice completo com todos os 7 Lexis e 7 Codex

Fontes: ripgrep, tokio, alacritty, meilisearch, tikv, burntsushi.net
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

Este pull request enriquece o framework Ahrena com um conjunto abrangente de guias para o desenvolvimento agêntico em Rust. Os novos artefatos, categorizados como "Lexis" (leis inquebráveis) e "Codex" (manuais de referência), destilam as melhores práticas de projetos Rust de classe mundial e do ecossistema BurntSushi, visando elevar a qualidade, performance e sustentabilidade do código Rust, tanto para desenvolvedores humanos quanto para agentes de IA.

Highlights

  • Novos Artefatos Lexis: Foram introduzidas quatro novas 'Leis Inquebráveis' (Lexis) para o desenvolvimento em Rust, cobrindo isolamento de código unsafe, proibição de bloqueio em contextos assíncronos, uso de tipos de erro específicos em bibliotecas e extensibilidade segura com #[non_exhaustive].
  • Novos Artefatos Codex: Foram adicionados dois novos 'Manuais de Referência' (Codex) para Rust, detalhando padrões de arquitetura assíncrona e concorrência com Tokio, e princípios de design de sistemas e padrões arquiteturais de alto nível.
  • Atualização do README: O README principal foi atualizado para incluir e indexar todos os novos artefatos Lexis e Codex, fornecendo uma visão geral completa dos guias agênticos para Rust.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • framework/pt-BR/engineering/rust/README.md
    • Adicionado um README abrangente para os guias agênticos de Rust, listando todos os artefatos Lexis e Codex.
  • framework/pt-BR/engineering/rust/codex/codex-rust-async-architecture.md
    • Adicionado um Codex detalhando padrões e melhores práticas para arquitetura assíncrona e concorrência com Tokio.
  • framework/pt-BR/engineering/rust/codex/codex-rust-system-design.md
    • Adicionado um Codex sobre design de sistemas e padrões arquiteturais de alto nível em Rust.
  • framework/pt-BR/engineering/rust/lexis/lex-rust-library-error-types.md
    • Adicionada uma Lexis que exige tipos de erro específicos para bibliotecas e roteadores, proibindo anyhow::Error ou Box<dyn Error> em APIs públicas.
  • framework/pt-BR/engineering/rust/lexis/lex-rust-no-blocking-in-async.md
    • Adicionada uma Lexis que proíbe operações de bloqueio em runtimes assíncronos, com exemplos e validação automatizada.
  • framework/pt-BR/engineering/rust/lexis/lex-rust-non-exhaustive-types.md
    • Adicionada uma Lexis para garantir extensibilidade segura de tipos públicos usando #[non_exhaustive].
  • framework/pt-BR/engineering/rust/lexis/lex-rust-unsafe-isolation.md
    • Adicionada uma Lexis que impõe o isolamento obrigatório de código unsafe com documentação // SAFETY:.
Activity
  • Não houve atividade humana registrada neste pull request até o momento.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment Gemini (@gemini-code-assist) Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on Gemini (@gemini-code-assist) comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

Este PR introduz um excelente conjunto de guias (Lexis e Codex) para o desenvolvimento em Rust, baseados em práticas consolidadas da indústria. A documentação é detalhada, bem estruturada e cobre tópicos cruciais de arquitetura, performance e segurança. As leis (Lexis) são claras e os manuais (Codex) fornecem um ótimo contexto. Fiz algumas sugestões pontuais para melhorar a clareza e precisão em alguns documentos, principalmente relacionados à formulação de uma das leis e à concisão do texto. No geral, é uma adição de altíssimo valor para o framework.

Note: Security Review has been skipped due to the limited scope of the PR.

#### 3. Select e Cancellation Safety
O macro `tokio::select!` avalia múltiplas futures simultaneamente. Quando uma termina, as outras são *dropadas*. Apenas use em branches futures que são "Cancellation Safe" (ex: `mpsc::Receiver::recv`).

**Perigo:** Ler de um stream de bytes (`AsyncReadExt::read`) não é cancellation safe. Se a future for dropada no meio da leitura, bytes podem ser perdidos.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

A explicação sobre o perigo de AsyncReadExt::read não ser "cancellation safe" está correta, mas poderia ser mais construtiva. Apenas apontar o perigo sem oferecer uma solução ou um padrão mais seguro pode deixar o leitor sem saber como agir. Seria útil adicionar uma nota sobre como mitigar esse risco, por exemplo, usando leitores com buffer (tokio::io::BufReader) e métodos que operam sobre o buffer de uma forma que seja segura em caso de cancelamento, ou estruturando o código para que a operação de leitura não seja cancelada no meio.


### Princípios

1. **Arquitetura Orientada a Crates (Workspaces):** Sistemas grandes em Rust não devem ser monólitos monolíticos de código. Devem ser divididos em múltiplos *crates* usando o recurso de `[workspace]` do Cargo. Isso melhora os tempos de compilação, impõe fronteiras de dependência estritas e facilita testes isolados (ex: `ripgrep` possui crates `core`, `regex`, `searcher`; `meilisearch` possui `index-scheduler`, `milli`, etc).
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

A expressão "monólitos monolíticos" é redundante. Usar apenas "monólitos" é suficiente e torna a frase mais concisa.

Suggested change
1. **Arquitetura Orientada a Crates (Workspaces):** Sistemas grandes em Rust não devem ser monólitos monolíticos de código. Devem ser divididos em múltiplos *crates* usando o recurso de `[workspace]` do Cargo. Isso melhora os tempos de compilação, impõe fronteiras de dependência estritas e facilita testes isolados (ex: `ripgrep` possui crates `core`, `regex`, `searcher`; `meilisearch` possui `index-scheduler`, `milli`, etc).
1. **Arquitetura Orientada a Crates (Workspaces):** Sistemas grandes em Rust não devem ser monólitos de código. Devem ser divididos em múltiplos *crates* usando o recurso de `[workspace]` do Cargo. Isso melhora os tempos de compilação, impõe fronteiras de dependência estritas e facilita testes isolados (ex: `ripgrep` possui crates `core`, `regex`, `searcher`; `meilisearch` possui `index-scheduler`, `milli`, etc).

@@ -0,0 +1,70 @@
# Lexis: Tipos de Erro Específicos para Bibliotecas e Roteadores
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

O termo "Roteadores" no título parece específico demais e um pouco deslocado, já que o documento aborda um princípio geral de design de API para bibliotecas e módulos públicos, não apenas roteadores de frameworks web. Um título mais genérico, como "Tipos de Erro Específicos para APIs Públicas" ou "Tipos de Erro Específicos para Bibliotecas", estaria mais alinhado com o escopo e o conteúdo da lei.

Suggested change
# Lexis: Tipos de Erro Específicos para Bibliotecas e Roteadores
# Lexis: Tipos de Erro Específicos para APIs de Bibliotecas

A segurança de memória é a principal garantia da linguagem Rust. O uso da palavra-chave `unsafe` desativa essas garantias, transferindo a responsabilidade do compilador para o desenvolvedor. Se o código `unsafe` não for devidamente isolado e encapsulado em abstrações seguras, a integridade de toda a aplicação (como visto em sistemas críticos como TiKV e renderizadores como Alacritty) é comprometida. Esta lei garante que o `unsafe` seja auditável e não "vaze" para a API pública.

## Lei
> **Todo bloco ou função `unsafe` DEVE ser encapsulado em uma API segura (`Safe Abstraction`) e DEVE conter um comentário `// SAFETY:` documentando explicitamente por que a operação é segura e quais invariantes o chamador deve garantir.**
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

A formulação da lei, especificamente a parte "...e quais invariantes o chamador deve garantir", pode ser confusa. O objetivo de encapsular um bloco unsafe em uma API segura é justamente remover do chamador a responsabilidade de garantir invariantes. A função segura é que deve garantir que as precondições do bloco unsafe sejam atendidas. A frase atual parece mais aplicável a funções unsafe públicas, não a blocos unsafe dentro de funções seguras. Sugiro reformular para focar nos invariantes que o próprio código deve manter para que a operação seja segura.

Suggested change
> **Todo bloco ou função `unsafe` DEVE ser encapsulado em uma API segura (`Safe Abstraction`) e DEVE conter um comentário `// SAFETY:` documentando explicitamente por que a operação é segura e quais invariantes o chamador deve garantir.**
> **Todo bloco ou função `unsafe` DEVE ser encapsulado em uma API segura (`Safe Abstraction`) e DEVE conter um comentário `// SAFETY:` documentando explicitamente por que a operação é segura e quais invariantes estão sendo mantidos pelo código circundante para garantir essa segurança.**

Fernando Seguim (fernandoseguim) added a commit that referenced this pull request May 10, 2026
[en]
Two BLOCKERs and four actionable WARNINGs from Argos's PR #82
multi-axis review addressed.

BLOCKER #1 — _ensure_server_in_directives EOF-no-newline (scripts/mcp_enable.py)
  The active-block capture stopped at the first newline-terminated entry,
  causing a new server to be inserted in the middle of an existing list
  whenever the .directives file ended without a trailing newline. The
  symmetric BLOCKER #2 on _remove_server_from_directives was already
  resolved in 2d1fd4b via gemini's (?:\n|$) suggestion. Fix here:
  _ACTIVE_BLOCK_RE now also accepts (?:\n|$), and the function normalises
  the captured body to end with \n before appending the new entry, so the
  result lands at the end of the list independent of input formatting.

WARNING — install_tool shell-injection surface (scripts/preflight.py)
  Switched from subprocess.run(cmd, shell=True) to shlex.split(cmd) +
  shell=False. Today's install_hints values are framework-owned constants
  and safe; the change removes the foothold for any future consumer that
  might compose a ToolSpec from non-static input. Contract documented in
  the function docstring.

WARNING — unresolved-requires UX (scripts/mcp_enable.py)
  Argos suggested a milder default than always-fatal: keep fatal under
  --non-interactive (CI must never proceed past unknown deps), but prompt
  "Proceed anyway? [y/N]" in interactive sessions so a known-safe entry
  can still be skipped. Implemented; default answer is no.

WARNING — Python executable name testability (scripts/preflight.py)
  Extracted _python_executable_name() helper from the inline conditional
  inside the PYTHON ToolSpec, so the Windows/POSIX branches can be
  monkeypatched in tests without reloading the module.

WARNING — new code untested (tools/ahrena-mcp/tests/)
  Two new test files cover the bug fixtures Argos surfaced plus the core
  helpers that future contributions can regress: 30 tests across
  preflight (Python name resolution, parse_semver, detect_os, check_tool
  present/absent/too-old, install_tool no-hint/dry-run/shell=False) and
  mcp_enable (ensure idempotent / appends / EOF-no-newline / commented
  block / no-block; remove present/absent/EOF-no-newline; requires
  resolver known/unknown; platform-config cleanup present/absent/missing
  files). All 30 pass; existing 19 tests in test_install_mcp +
  test_parse_directives also still pass.

Out of scope for this round (Argos flagged for follow-up): ES
translation backfill in codex-mcp-{github,notion,figma} (pre-existing
gap inherited by this PR) and VM-clean bootstrap validation.

Refs #81

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@fernandoseguim Fernando Seguim (fernandoseguim) added the hold Paused / not actively pursued label May 11, 2026
Fernando Seguim (fernandoseguim) added a commit that referenced this pull request May 12, 2026
…rves history)

[en]
Per plan-046 Step 14 / Open Question #1: moves the historical archive
of completed plans (pre-ADR-002 model) to .issues/_legacy/ via git mv,
preserving git blame/log. Adds README declaring the directory as
frozen history — no editing, no new files. Plans created after ADR-002
live as GitHub Issue bodies; .plans/{N}.md (gitignored) is the AI's
working memory cache.

[pt-BR]
Per plan-046 Step 14 / OQ#1: move o histórico de planos pré-ADR-002
para .issues/_legacy/ via git mv, preservando history. README declara
o diretório como congelado.

Refs #96

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fernando Seguim (fernandoseguim) added a commit that referenced this pull request May 12, 2026
…handler (3 langs)

[en]
Per user request, redesigns the kata-pr-prepare loop into 3 explicit
stages:

- Step 6c (Phase A — Argos pre-flight cycles): up to 3 interactive
  cycles gated by AskUserQuestion. Each cycle: ask → invoke Argos →
  read findings → Athena addresses P0 (mandatory) / P1 (asked) / P2
  (note) → commit + push → next cycle. User can stop early via (b)
  skip-to-human or (c) stop entire flow.

- Step 6d (Phase B — Human nudge loop): 3 cycles via ScheduleWakeup
  (or cron / manual per option a/b/c). Each cycle fires a Slack
  notification with escalating urgency (H1 "ready", H2 "reminder
  #1", H3 "reminder #2, 2nd nudge"). Loop closes on APPROVED, merged,
  CHANGES_REQUESTED, or H3 silent exit.

- Step 6e (Phase C — CHANGES_REQUESTED handler): on changes
  requested, Athena addresses (or defers) and RESTARTS the loop from
  Phase A (new HEAD invalidates previous Argos review).

Also updates codex-agent-planning §10 summary to describe the
3-stage flow. Re-syncs .claude/ + .cursor/ from framework/en/.

[pt-BR]
Reorganiza o loop em 3 fases: Fase A (Argos cycles interativos), Fase
B (Human nudge loop com notificações Slack escalonadas), Fase C
(CHANGES_REQUESTED reseta para Fase A).

Refs #96

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hold Paused / not actively pursued

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant