<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CrabPascal</title>
    <description>The latest articles on DEV Community by CrabPascal (@crabpascal).</description>
    <link>https://dev.to/crabpascal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3961523%2F0a606a6e-762d-4f75-9bc8-225ab7919cc7.jpg</url>
      <title>DEV Community: CrabPascal</title>
      <link>https://dev.to/crabpascal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/crabpascal"/>
    <language>en</language>
    <item>
      <title>Docs, Blog, and 2027: Closing the Loop | Docs, blog e 2027: fechando o ciclo</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 17:00:27 +0000</pubDate>
      <link>https://dev.to/crabpascal/docs-blog-and-2027-closing-the-loop-docs-blog-e-2027-fechando-o-ciclo-27ia</link>
      <guid>https://dev.to/crabpascal/docs-blog-and-2027-closing-the-loop-docs-blog-e-2027-fechando-o-ciclo-27ia</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Docs, Blog, and 2027: Closing the Loop
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2 (finale):&lt;/strong&gt; Previous: &lt;em&gt;Changelog 2026: A Year of Sprints&lt;/em&gt; (&lt;code&gt;060-changelog-2026-year-review&lt;/code&gt;). Maps: &lt;code&gt;essentials/documentation-map&lt;/code&gt;, &lt;code&gt;roadmap/squad&lt;/code&gt;, &lt;code&gt;roadmap/review-360&lt;/code&gt;, &lt;code&gt;essentials/project-status&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Sixty-one blog posts. Hundreds of Mintlify pages. Fourteen sprint releases in 2026. This finale connects the &lt;strong&gt;documentation site&lt;/strong&gt;, the &lt;strong&gt;Dev.to campaign&lt;/strong&gt;, and the &lt;strong&gt;2027 horizon&lt;/strong&gt; — so newcomers know where to land after Part 2 ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built in Part 2 (posts 032–061)
&lt;/h2&gt;

&lt;p&gt;Part 1 (001–031) taught CrabPascal fundamentals: CLI, pipeline, sprints 1–13 themes, contributing.&lt;/p&gt;

&lt;p&gt;Part 2 walked reorganized Mintlify docs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigation and onboarding paths (032–033)&lt;/li&gt;
&lt;li&gt;IDE, VS Code marketplace, Postman (034–036)&lt;/li&gt;
&lt;li&gt;Architecture deep dives (037–040)&lt;/li&gt;
&lt;li&gt;Sprint review series (041–048)&lt;/li&gt;
&lt;li&gt;v2.22.0 and technical debt transparency (048–049)&lt;/li&gt;
&lt;li&gt;Five-audit deep dive Lucas → Bruno → Helena → Marina → Rafael (050–054)&lt;/li&gt;
&lt;li&gt;Education and migration (055–059)&lt;/li&gt;
&lt;li&gt;Year wrap (060–061)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each post links backward and carries &lt;code&gt;doc_refs&lt;/code&gt; in &lt;code&gt;meta.json&lt;/code&gt; — the blog is an &lt;strong&gt;index into docs&lt;/strong&gt;, not a duplicate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mintlify: start here in 2027
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;essentials/documentation-map&lt;/code&gt; is the historical quick router. For current truth, prefer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;essentials/project-status&lt;/code&gt;&lt;/strong&gt; — v2.22.0 snapshot, what works, open gaps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;getting-started/leia-primeiro&lt;/code&gt;&lt;/strong&gt; — three onboarding paths (user, contributor, auditor)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;roadmap/sprints-overview&lt;/code&gt;&lt;/strong&gt; — next sprint targets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;technical-debt/backlog&lt;/code&gt;&lt;/strong&gt; — living TD-IDs from audits&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Archive pages (v1.5 status, old test reports) remain for history — do not treat them as current baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Squad governance continues
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;roadmap/squad&lt;/code&gt; defines roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rafael&lt;/strong&gt; — release rhythm, IDE/CI/docs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Helena&lt;/strong&gt; — architecture, RTL, Unicode, properties&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bruno&lt;/strong&gt; — parser, semantic, execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marina&lt;/strong&gt; — QA, fixtures, parity harness&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lucas&lt;/strong&gt; — backend run/build, codegen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every 2027 task must answer: Does this help real Delphi code compile, reduce run/build surprise, improve DX, or add a regression test?&lt;/p&gt;

&lt;h2&gt;
  
  
  Review 360° as north star
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;roadmap/review-360&lt;/code&gt; remains the compatibility checklist. Blog posts translate sections for humans; the review is the engineer's spreadsheet. Update it when sprints close Priority 0 items.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blog workflow going forward
&lt;/h2&gt;

&lt;p&gt;Posts stay &lt;strong&gt;&lt;code&gt;pending_review&lt;/code&gt; until you approve&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;blog&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scripts/approve.mjs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;061-year-end-docs-blog-2027&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;publish:draft&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;061-year-end-docs-blog-2027&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# optional preview&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;publish&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;061-year-end-docs-blog-2027&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--publish&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;# when ready&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Phase 3 planning (2027) might shift to release notes + shorter devlogs — but the bilingual pattern stays: English and Português in one Dev.to article.&lt;/p&gt;

&lt;h2&gt;
  
  
  2027 priorities (inferred from status + audits)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codegen parity&lt;/td&gt;
&lt;td&gt;Properties, methods, exceptions (real lowering)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDE&lt;/td&gt;
&lt;td&gt;Problems panel, correct &lt;code&gt;build&lt;/code&gt; command&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RTL&lt;/td&gt;
&lt;td&gt;IO encoding, generics enumerators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA&lt;/td&gt;
&lt;td&gt;run/build parity suites, offline Horse smoke&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docs&lt;/td&gt;
&lt;td&gt;Sync test README, reduce version drift&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sprint 15+ entries in &lt;code&gt;sprints-overview&lt;/code&gt; will name owners — watch kickoff posts for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank you / loop closed
&lt;/h2&gt;

&lt;p&gt;If you read from post 001 to 061, you traced CrabPascal from &lt;strong&gt;hello world&lt;/strong&gt; to &lt;strong&gt;technical audit honesty&lt;/strong&gt;. The loop closes where it opened: real Pascal code on your machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://bitbucket.org/alphatecnologia/crabpascal.git
&lt;span class="nb"&gt;cd &lt;/span&gt;crabpascal
cargo build &lt;span class="nt"&gt;--release&lt;/span&gt;
crab-pascal run examples/crud/crud.dpr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open Mintlify locally or browse docs when hosted — paths in &lt;code&gt;doc_refs&lt;/code&gt; match &lt;code&gt;mintlify/&lt;/code&gt; folder structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stay connected
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/crabpascal"&gt;@crabpascal on Dev.to&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bitbucket: &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;alphatecnologia/crabpascal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Comment on any post — maintainer responses feed sprint planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Part 2 complete.&lt;/strong&gt; Part 3 awaits your roadmap choices in 2027.&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Docs, blog e 2027: fechando o ciclo
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2 (finale):&lt;/strong&gt; Anterior: &lt;em&gt;Changelog 2026: um ano de sprints&lt;/em&gt; (&lt;code&gt;060-changelog-2026-year-review&lt;/code&gt;). Mapas: &lt;code&gt;essentials/documentation-map&lt;/code&gt;, &lt;code&gt;roadmap/squad&lt;/code&gt;, &lt;code&gt;roadmap/review-360&lt;/code&gt;, &lt;code&gt;essentials/project-status&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Sessenta e um posts de blog. Centenas de páginas Mintlify. Quatorze releases sprint em 2026. Este finale conecta &lt;strong&gt;site de documentação&lt;/strong&gt;, &lt;strong&gt;campanha Dev.to&lt;/strong&gt; e &lt;strong&gt;horizonte 2027&lt;/strong&gt; — para newcomers saberem onde pousar após Parte 2 terminar.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que construímos na Parte 2 (posts 032–061)
&lt;/h2&gt;

&lt;p&gt;Parte 1 (001–031) ensinou fundamentos CrabPascal: CLI, pipeline, temas sprints 1–13, contribuição.&lt;/p&gt;

&lt;p&gt;Parte 2 percorreu docs Mintlify reorganizados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navegação e trilhas onboarding (032–033)&lt;/li&gt;
&lt;li&gt;IDE, marketplace VS Code, Postman (034–036)&lt;/li&gt;
&lt;li&gt;Deep dives arquitetura (037–040)&lt;/li&gt;
&lt;li&gt;Série sprint reviews (041–048)&lt;/li&gt;
&lt;li&gt;v2.22.0 e transparência débito técnico (048–049)&lt;/li&gt;
&lt;li&gt;Deep dive cinco auditorias Lucas → Bruno → Helena → Marina → Rafael (050–054)&lt;/li&gt;
&lt;li&gt;Educação e migração (055–059)&lt;/li&gt;
&lt;li&gt;Wrap-up anual (060–061)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada post liga para trás e carrega &lt;code&gt;doc_refs&lt;/code&gt; no &lt;code&gt;meta.json&lt;/code&gt; — o blog é &lt;strong&gt;índice para docs&lt;/strong&gt;, não duplicata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mintlify: comece aqui em 2027
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;essentials/documentation-map&lt;/code&gt; é roteador rápido histórico. Para verdade atual, prefira:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;essentials/project-status&lt;/code&gt;&lt;/strong&gt; — snapshot v2.22.0, o que funciona, gaps abertos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;getting-started/leia-primeiro&lt;/code&gt;&lt;/strong&gt; — três trilhas (usuário, contribuidor, auditor)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;roadmap/sprints-overview&lt;/code&gt;&lt;/strong&gt; — alvos próximo sprint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;technical-debt/backlog&lt;/code&gt;&lt;/strong&gt; — TD-IDs vivos das auditorias&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Páginas arquivo (status v1.5, relatórios teste antigos) permanecem como histórico — não trate como baseline atual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Governança squad continua
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;roadmap/squad&lt;/code&gt; define papéis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rafael&lt;/strong&gt; — ritmo release, IDE/CI/docs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Helena&lt;/strong&gt; — arquitetura, RTL, Unicode, properties&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bruno&lt;/strong&gt; — parser, semântica, execução&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marina&lt;/strong&gt; — QA, fixtures, harness paridade&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lucas&lt;/strong&gt; — backend run/build, codegen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Toda tarefa 2027 deve responder: Isso ajuda código Delphi real a compilar, reduz surpresa run/build, melhora DX ou adiciona teste de regressão?&lt;/p&gt;

&lt;h2&gt;
  
  
  Review 360° como north star
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;roadmap/review-360&lt;/code&gt; permanece checklist de compatibilidade. Posts blog traduzem seções para humanos; review é planilha do engenheiro. Atualize quando sprints fecharem itens Prioridade 0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow blog daqui pra frente
&lt;/h2&gt;

&lt;p&gt;Posts ficam &lt;strong&gt;&lt;code&gt;pending_review&lt;/code&gt; até você aprovar&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;blog&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scripts/approve.mjs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;061-year-end-docs-blog-2027&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;publish:draft&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;061-year-end-docs-blog-2027&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# preview opcional&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;publish&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;061-year-end-docs-blog-2027&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--publish&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;# quando pronto&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Planejamento Fase 3 (2027) pode shift para release notes + devlogs curtos — mas padrão bilíngue permanece: English e Português no mesmo artigo Dev.to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prioridades 2027 (inferidas de status + auditorias)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Área&lt;/th&gt;
&lt;th&gt;Direção&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Paridade codegen&lt;/td&gt;
&lt;td&gt;Properties, métodos, exceptions (lowering real)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDE&lt;/td&gt;
&lt;td&gt;Painel Problems, comando &lt;code&gt;build&lt;/code&gt; correto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RTL&lt;/td&gt;
&lt;td&gt;IO encoding, enumerators generics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA&lt;/td&gt;
&lt;td&gt;Suítes paridade run/build, smoke Horse offline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docs&lt;/td&gt;
&lt;td&gt;Sync README testes, reduzir drift versão&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Entradas Sprint 15+ em &lt;code&gt;sprints-overview&lt;/code&gt; nomearão donos — watch posts kickoff para detalhes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Obrigado / ciclo fechado
&lt;/h2&gt;

&lt;p&gt;Se leu do post 001 ao 061, traceou CrabPascal de &lt;strong&gt;hello world&lt;/strong&gt; até &lt;strong&gt;honestidade de auditoria técnica&lt;/strong&gt;. O ciclo fecha onde abriu: código Pascal real na sua máquina.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://bitbucket.org/alphatecnologia/crabpascal.git
&lt;span class="nb"&gt;cd &lt;/span&gt;crabpascal
cargo build &lt;span class="nt"&gt;--release&lt;/span&gt;
crab-pascal run examples/crud/crud.dpr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois abra Mintlify local ou browse docs quando hosted — paths em &lt;code&gt;doc_refs&lt;/code&gt; batem com estrutura pasta &lt;code&gt;mintlify/&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fique conectado
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/crabpascal"&gt;@crabpascal no Dev.to&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bitbucket: &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;alphatecnologia/crabpascal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Comente em qualquer post — respostas maintainers alimentam planejamento sprint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parte 2 completa.&lt;/strong&gt; Parte 3 aguarda suas escolhas de roadmap em 2027.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>documentation</category>
      <category>opensource</category>
      <category>roadmap</category>
    </item>
    <item>
      <title>Changelog 2026: A Year of Sprints | Changelog 2026: um ano de sprints</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 16:45:24 +0000</pubDate>
      <link>https://dev.to/crabpascal/changelog-2026-a-year-of-sprints-changelog-2026-um-ano-de-sprints-56gp</link>
      <guid>https://dev.to/crabpascal/changelog-2026-a-year-of-sprints-changelog-2026-um-ano-de-sprints-56gp</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Changelog 2026: A Year of Sprints
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2:&lt;/strong&gt; Previous: &lt;em&gt;Teaching Pascal in 2026 with CrabPascal&lt;/em&gt; (&lt;code&gt;059-teaching-pascal-with-crabpascal&lt;/code&gt;). Sources: &lt;code&gt;essentials/changelog&lt;/code&gt;, &lt;code&gt;roadmap/sprints-overview&lt;/code&gt;, &lt;code&gt;releases/release-v2-22-0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;2026 transformed CrabPascal from a capable interpreter into a &lt;strong&gt;governed, sprint-tagged compiler&lt;/strong&gt; approaching Delphi parity in measured steps. This year-end review walks the changelog — not every micro-commit, but the &lt;strong&gt;release arc&lt;/strong&gt; that defined the project. Current binary: &lt;strong&gt;v2.22.0&lt;/strong&gt; per &lt;code&gt;essentials/project-status&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  January–May: Foundation before the sprint wave
&lt;/h2&gt;

&lt;p&gt;Early 2026 consolidated v2.x internals: runtime heap, VMT, preprocessor FPC alignment, VS Code integration docs. Blog Part 1 (posts 001–031) covered fundamentals for Dev.to readers joining mid-year.&lt;/p&gt;

&lt;p&gt;The sprint convention — &lt;strong&gt;one sprint, one version, one review&lt;/strong&gt; — formalized in &lt;code&gt;roadmap/sprints-overview&lt;/code&gt;, setting up the release train starting v2.9.9.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sprint releases (2026 arc)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sprint&lt;/th&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Headline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;v2.9.9&lt;/td&gt;
&lt;td&gt;Real diagnostic spans in &lt;code&gt;check&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;v2.10.0&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;System.*&lt;/code&gt; namespace resolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;v2.11.0&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;System.Classes&lt;/code&gt; minimum surface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;v2.12.0&lt;/td&gt;
&lt;td&gt;Exception handling in runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;v2.13.0&lt;/td&gt;
&lt;td&gt;Delphi string helpers (&lt;code&gt;pascal_*&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;v2.14.0&lt;/td&gt;
&lt;td&gt;OO properties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;v2.15.0&lt;/td&gt;
&lt;td&gt;Generics.Collections + &lt;code&gt;var&lt;/code&gt; params&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;v2.16.0&lt;/td&gt;
&lt;td&gt;Unicode UTF-16 groundwork&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;v2.17.0&lt;/td&gt;
&lt;td&gt;Run/build parity initiative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;v2.18.0&lt;/td&gt;
&lt;td&gt;String semantics in C codegen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;v2.19.0&lt;/td&gt;
&lt;td&gt;Parser hardening&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;v2.20.0&lt;/td&gt;
&lt;td&gt;Method-based properties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;v2.21.0&lt;/td&gt;
&lt;td&gt;Honest build (no fake exceptions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;v2.22.0&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;System.IOUtils&lt;/code&gt;, dotted unit names&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each row has a matching &lt;code&gt;sprint-N-review.md&lt;/code&gt; and &lt;code&gt;release-v2-XX-0.md&lt;/code&gt; in Mintlify — blog Part 2 posts 041–048 narrated several of these.&lt;/p&gt;

&lt;h2&gt;
  
  
  Themes across the year
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Diagnostics you can trust
&lt;/h3&gt;

&lt;p&gt;Sprint 1 replaced placeholder &lt;code&gt;1:1&lt;/code&gt; errors with file/line/column spans. IDE integration still catching up (Rafael audit TD-IDE-001), but CLI &lt;code&gt;check&lt;/code&gt; became classroom-ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  RTL as product surface
&lt;/h3&gt;

&lt;p&gt;Sprints 2, 3, 7, and 14 expanded &lt;code&gt;rtl/sys/&lt;/code&gt; — the layer Delphi developers feel first. IOUtils in v2.22.0 unblocks file-centric Horse modules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Honest dual-mode
&lt;/h3&gt;

&lt;p&gt;Sprints 9–13 attacked the dangerous gap where &lt;strong&gt;&lt;code&gt;run&lt;/code&gt; succeeded&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;build-exe&lt;/code&gt; lied&lt;/strong&gt;. v2.21.0 refuses exception codegen instead of emitting fake C — a philosophy win documented in blog post 024.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parser maturity
&lt;/h3&gt;

&lt;p&gt;Sprint 11 closed enum/multi-field/inherited class of bugs reminiscent of v2.8.3 hotfixes — now with regression tests in &lt;code&gt;parser_hardening.rs&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  v2.22.0 — Current state of the art
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;releases/release-v2-22-0&lt;/code&gt; highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimal &lt;code&gt;System.IOUtils&lt;/code&gt; RTL&lt;/li&gt;
&lt;li&gt;Parser: &lt;code&gt;unit System.X&lt;/code&gt; dotted names&lt;/li&gt;
&lt;li&gt;Semantic resolver finds &lt;code&gt;System.*&lt;/code&gt; via RTL files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still open per audits: full Unicode IO, property codegen parity, IDE Problems panel, Horse CI harness offline mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical debt transparency
&lt;/h2&gt;

&lt;p&gt;Posts 049–054 translated &lt;code&gt;technical-debt/audit-overview&lt;/code&gt; into Dev.to narrative. The changelog shows &lt;strong&gt;what shipped&lt;/strong&gt;; audits show &lt;strong&gt;what remains&lt;/strong&gt; — together they replace marketing fog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Metrics that matter (qualitative)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Examples:&lt;/strong&gt; &lt;code&gt;examples/crud&lt;/code&gt; remains flagship; new e2e fixtures added in sprints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests:&lt;/strong&gt; parity gates when GCC present; Marina audit drives build coverage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; Mintlify reorganization (posts 032–033) mapped to live paths&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community:&lt;/strong&gt; 61 bilingual blog posts staged — education + ops + audits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Looking at the full changelog
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;essentials/changelog&lt;/code&gt; spans v1.0 through v2.22.0 — thousands of lines. For daily work, prefer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;essentials/project-status&lt;/code&gt; — consolidated snapshot&lt;/li&gt;
&lt;li&gt;Latest sprint review for your version&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/backlog&lt;/code&gt; — open TD-IDs&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Contributor reflection
&lt;/h2&gt;

&lt;p&gt;If you merged a PR in 2026, you likely tied it to a sprint acceptance bullet. That discipline is the year's legacy — compiler construction as &lt;strong&gt;sequence of shippable wins&lt;/strong&gt;, not a mythical v3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;2026 was the year CrabPascal learned to &lt;strong&gt;release honestly&lt;/strong&gt;. From v2.9.9 diagnostics to v2.22.0 IOUtils, each tag tells a story in Mintlify. Read the changelog when debugging version skew; read sprint reviews when planning upgrades.&lt;/p&gt;

&lt;p&gt;Final post in series: &lt;em&gt;Docs, Blog, and 2027&lt;/em&gt; (&lt;code&gt;061-year-end-docs-blog-2027&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Changelog 2026: um ano de sprints
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2:&lt;/strong&gt; Anterior: &lt;em&gt;Ensinando Pascal em 2026&lt;/em&gt; (&lt;code&gt;059-teaching-pascal-with-crabpascal&lt;/code&gt;). Fontes: &lt;code&gt;essentials/changelog&lt;/code&gt;, &lt;code&gt;roadmap/sprints-overview&lt;/code&gt;, &lt;code&gt;releases/release-v2-22-0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;2026 transformou CrabPascal de interpretador capaz em &lt;strong&gt;compilador governado com tags sprint&lt;/strong&gt; aproximando paridade Delphi em passos medidos. Este review de fim de ano percorre o changelog — não cada micro-commit, mas o &lt;strong&gt;arco de releases&lt;/strong&gt; que definiu o projeto. Binário atual: &lt;strong&gt;v2.22.0&lt;/strong&gt; segundo &lt;code&gt;essentials/project-status&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Janeiro–Maio: fundação antes da onda sprint
&lt;/h2&gt;

&lt;p&gt;Início de 2026 consolidou internals v2.x: heap runtime, VMT, alinhamento preprocessor FPC, docs integração VS Code. Blog Parte 1 (posts 001–031) cobriu fundamentos para leitores Dev.to entrando mid-year.&lt;/p&gt;

&lt;p&gt;A convenção sprint — &lt;strong&gt;um sprint, uma versão, um review&lt;/strong&gt; — formalizou em &lt;code&gt;roadmap/sprints-overview&lt;/code&gt;, preparando trem de releases a partir de v2.9.9.&lt;/p&gt;

&lt;h2&gt;
  
  
  Releases sprint (arco 2026)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sprint&lt;/th&gt;
&lt;th&gt;Versão&lt;/th&gt;
&lt;th&gt;Manchete&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;v2.9.9&lt;/td&gt;
&lt;td&gt;Spans de diagnóstico reais no &lt;code&gt;check&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;v2.10.0&lt;/td&gt;
&lt;td&gt;Resolução namespace &lt;code&gt;System.*&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;v2.11.0&lt;/td&gt;
&lt;td&gt;Surface mínima &lt;code&gt;System.Classes&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;v2.12.0&lt;/td&gt;
&lt;td&gt;Tratamento de exceptions no runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;v2.13.0&lt;/td&gt;
&lt;td&gt;Helpers string Delphi (&lt;code&gt;pascal_*&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;v2.14.0&lt;/td&gt;
&lt;td&gt;Properties OO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;v2.15.0&lt;/td&gt;
&lt;td&gt;Generics.Collections + params &lt;code&gt;var&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;v2.16.0&lt;/td&gt;
&lt;td&gt;Base Unicode UTF-16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;v2.17.0&lt;/td&gt;
&lt;td&gt;Iniciativa paridade run/build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;v2.18.0&lt;/td&gt;
&lt;td&gt;Semântica string no codegen C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;v2.19.0&lt;/td&gt;
&lt;td&gt;Parser hardening&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;v2.20.0&lt;/td&gt;
&lt;td&gt;Properties por método&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;v2.21.0&lt;/td&gt;
&lt;td&gt;Build honesto (sem exceptions falsas)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;v2.22.0&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;System.IOUtils&lt;/code&gt;, unit names com ponto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cada linha tem &lt;code&gt;sprint-N-review.md&lt;/code&gt; e &lt;code&gt;release-v2-XX-0.md&lt;/code&gt; correspondentes no Mintlify — posts 041–048 da Parte 2 blog narraram vários.&lt;/p&gt;

&lt;h2&gt;
  
  
  Temas ao longo do ano
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Diagnósticos confiáveis
&lt;/h3&gt;

&lt;p&gt;Sprint 1 substituiu erros placeholder &lt;code&gt;1:1&lt;/code&gt; por spans arquivo/linha/coluna. Integração IDE ainda alcançando (auditoria Rafael TD-IDE-001), mas &lt;code&gt;check&lt;/code&gt; CLI ficou pronto para sala de aula.&lt;/p&gt;

&lt;h3&gt;
  
  
  RTL como surface de produto
&lt;/h3&gt;

&lt;p&gt;Sprints 2, 3, 7 e 14 expandiram &lt;code&gt;rtl/sys/&lt;/code&gt; — camada que desenvolvedores Delphi sentem primeiro. IOUtils em v2.22.0 desbloqueia módulos Horse centrados em arquivo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dual-mode honesto
&lt;/h3&gt;

&lt;p&gt;Sprints 9–13 atacaram gap perigoso onde &lt;strong&gt;&lt;code&gt;run&lt;/code&gt; passava&lt;/strong&gt; e &lt;strong&gt;&lt;code&gt;build-exe&lt;/code&gt; mentia&lt;/strong&gt;. v2.21.0 recusa codegen de exception em vez de emitir C falso — vitória de filosofia documentada no blog post 024.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maturidade de parser
&lt;/h3&gt;

&lt;p&gt;Sprint 11 fechou classe de bugs enum/multi-field/inherited lembrando hotfixes v2.8.3 — agora com testes de regressão em &lt;code&gt;parser_hardening.rs&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  v2.22.0 — Estado da arte atual
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;releases/release-v2-22-0&lt;/code&gt; destaca:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RTL mínimo &lt;code&gt;System.IOUtils&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Parser: unit names com ponto &lt;code&gt;unit System.X&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Resolver semântico acha &lt;code&gt;System.*&lt;/code&gt; via arquivos RTL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ainda aberto por auditorias: IO Unicode completo, paridade codegen properties, painel Problems IDE, modo offline harness CI Horse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transparência de débito técnico
&lt;/h2&gt;

&lt;p&gt;Posts 049–054 traduziram &lt;code&gt;technical-debt/audit-overview&lt;/code&gt; em narrativa Dev.to. Changelog mostra &lt;strong&gt;o que shipou&lt;/strong&gt;; auditorias mostram &lt;strong&gt;o que resta&lt;/strong&gt; — juntos substituem neblina de marketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Métricas que importam (qualitativo)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exemplos:&lt;/strong&gt; &lt;code&gt;examples/crud&lt;/code&gt; permanece flagship; fixtures e2e novos em sprints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testes:&lt;/strong&gt; gates paridade com GCC; auditoria Marina drive cobertura build&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; reorganização Mintlify (posts 032–033) mapeada a paths vivos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comunidade:&lt;/strong&gt; 61 posts bilíngues staged — educação + ops + auditorias&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Olhando changelog completo
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;essentials/changelog&lt;/code&gt; abrange v1.0 até v2.22.0 — milhares de linhas. Para trabalho diário, prefira:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;essentials/project-status&lt;/code&gt; — snapshot consolidado&lt;/li&gt;
&lt;li&gt;Sprint review mais recente da sua versão&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/backlog&lt;/code&gt; — TD-IDs abertos&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Reflexão para contribuidores
&lt;/h2&gt;

&lt;p&gt;Se você mergeou PR em 2026, provavelmente ligou a bullet de aceitação de sprint. Essa disciplina é legado do ano — construção de compilador como &lt;strong&gt;sequência de wins shippáveis&lt;/strong&gt;, não v3 mítico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;2026 foi o ano em que CrabPascal aprendeu a &lt;strong&gt;release honesto&lt;/strong&gt;. De diagnósticos v2.9.9 a IOUtils v2.22.0, cada tag conta história no Mintlify. Leia changelog ao debugar skew de versão; leia sprint reviews ao planejar upgrades.&lt;/p&gt;

&lt;p&gt;Post final da série: &lt;em&gt;Docs, blog e 2027&lt;/em&gt; (&lt;code&gt;061-year-end-docs-blog-2027&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>opensource</category>
      <category>compiler</category>
      <category>devops</category>
    </item>
    <item>
      <title>Teaching Pascal in 2026 with CrabPascal | Ensinando Pascal em 2026</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 16:30:23 +0000</pubDate>
      <link>https://dev.to/crabpascal/teaching-pascal-in-2026-with-crabpascal-ensinando-pascal-em-2026-kkg</link>
      <guid>https://dev.to/crabpascal/teaching-pascal-in-2026-with-crabpascal-ensinando-pascal-em-2026-kkg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Teaching Pascal in 2026 with CrabPascal
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2:&lt;/strong&gt; Previous: &lt;em&gt;From Delphi Developer to CrabPascal&lt;/em&gt; (&lt;code&gt;058-delphi-dev-migration-guide&lt;/code&gt;). Resources: &lt;code&gt;resources/readme&lt;/code&gt;, &lt;code&gt;getting-started/quickstart&lt;/code&gt;, &lt;code&gt;examples/crud&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Pascal is still taught — algorithms courses, legacy maintenance, competitive programming in some regions, and Delphi shops training juniors. &lt;strong&gt;Free Pascal and Delphi IDEs&lt;/strong&gt; dominate classrooms, but they carry install weight and licensing friction. CrabPascal offers a &lt;strong&gt;zero-cost, CLI-first, open-source&lt;/strong&gt; path with modern examples (REST, JSON) students actually care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why CrabPascal in the classroom?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;CrabPascal answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free for all OS&lt;/td&gt;
&lt;td&gt;MIT license, no seat limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast feedback&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;check&lt;/code&gt; with real diagnostic spans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modern relevance&lt;/td&gt;
&lt;td&gt;Horse CRUD API example&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visible compiler internals&lt;/td&gt;
&lt;td&gt;Rust codebase for advanced modules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Honest errors&lt;/td&gt;
&lt;td&gt;No silent fake features&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;resources/readme&lt;/code&gt; lists handbooks (Object Pascal Handbook) for instructor reference while students run CrabPascal labs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Curriculum outline (8-week sample)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Weeks 1–2 — Syntax and control flow
&lt;/h3&gt;

&lt;p&gt;Topics: variables, types, if/for/while, procedures.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;program&lt;/span&gt; &lt;span class="n"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;begin&lt;/span&gt;
  &lt;span class="k"&gt;WriteLn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hello, Pascal 2026'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lab commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check hello.dpr
crab-pascal run hello.dpr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;getting-started/quickstart&lt;/code&gt; as student handout.&lt;/p&gt;

&lt;h3&gt;
  
  
  Weeks 3–4 — Records and OOP intro
&lt;/h3&gt;

&lt;p&gt;Topics: records, classes, constructors, &lt;code&gt;WriteLn&lt;/code&gt; formatting.&lt;/p&gt;

&lt;p&gt;Start with runtime path only — exceptions and properties work in &lt;code&gt;run&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Weeks 5–6 — Units and APIs
&lt;/h3&gt;

&lt;p&gt;Topics: &lt;code&gt;uses&lt;/code&gt;, namespaces, &lt;code&gt;System.SysUtils&lt;/code&gt; basics.&lt;/p&gt;

&lt;p&gt;Capstone: run &lt;code&gt;examples/crud/crud.dpr&lt;/code&gt; — discuss HTTP verbs, JSON, separation of concerns. Students see Pascal beyond console homework.&lt;/p&gt;

&lt;h3&gt;
  
  
  Weeks 7–8 — Optional compiler module
&lt;/h3&gt;

&lt;p&gt;For CS tracks: map lexer/parser phases using &lt;code&gt;resources/curso-compiladores-crabpascal&lt;/code&gt;. Students trace one fixture through &lt;code&gt;check&lt;/code&gt; output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Classroom setup tips
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Minimal lab machine:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rust toolchain (build once, distribute binary)&lt;/li&gt;
&lt;li&gt;Or prebuilt &lt;code&gt;crab-pascal.exe&lt;/code&gt; on lab images&lt;/li&gt;
&lt;li&gt;VS Code + CrabPascal extension optional&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoid:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requiring GCC for introductory courses (save &lt;code&gt;build-exe&lt;/code&gt; for advanced week)&lt;/li&gt;
&lt;li&gt;Horse HTTP labs without explaining port 9000 conflicts — use scripted start/stop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Offline-friendly:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unlike cloud IDEs, CrabPascal runs air-gapped after clone — important for schools with restricted networks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assessment ideas
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Diagnostic reading&lt;/strong&gt; — given &lt;code&gt;check&lt;/code&gt; output, explain the bug (teaches real tooling)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unit extraction&lt;/strong&gt; — refactor monolithic program into &lt;code&gt;.pas&lt;/code&gt; units&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API extension&lt;/strong&gt; — add CRUD endpoint in Horse example&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parity essay&lt;/strong&gt; — compare Delphi string model vs CrabPascal (advanced)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Inclusive pedagogy
&lt;/h2&gt;

&lt;p&gt;Bilingual blog posts (English + Português) mirror Brazil/Latin America Delphi communities still active in 2026. Assign posts 001–010 as reading — fundamentals without textbook cost.&lt;/p&gt;

&lt;p&gt;Link sprint history (post 025) for students interested in open source contribution credit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations to disclose upfront
&lt;/h2&gt;

&lt;p&gt;Teachers should state clearly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not a GUI RAD environment — no form designer&lt;/li&gt;
&lt;li&gt;Native build supports language subset&lt;/li&gt;
&lt;li&gt;RTL growing — document version pinned for semester (&lt;code&gt;essentials/project-status&lt;/code&gt; shows v2.22.0)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honesty prevents student frustration — aligns with project philosophy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instructor resource bundle
&lt;/h2&gt;

&lt;p&gt;Mintlify paths to bundle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;getting-started/quickstart&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;examples/crud&lt;/code&gt; (source walkthrough)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resources/readme&lt;/code&gt; (external PDF references)&lt;/li&gt;
&lt;li&gt;Blog 029 CRUD walkthrough (Part 1)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Pascal education does not require 1990s tooling. CrabPascal gives instructors a reproducible, honest, modern stack — console to REST in one semester. Start with &lt;code&gt;check&lt;/code&gt; and &lt;code&gt;run&lt;/code&gt;; let curious students dive into the compiler repo.&lt;/p&gt;

&lt;p&gt;Next: &lt;em&gt;Changelog 2026: A Year of Sprints&lt;/em&gt; (&lt;code&gt;060-changelog-2026-year-review&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Ensinando Pascal em 2026
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2:&lt;/strong&gt; Anterior: &lt;em&gt;Do desenvolvedor Delphi ao CrabPascal&lt;/em&gt; (&lt;code&gt;058-delphi-dev-migration-guide&lt;/code&gt;). Recursos: &lt;code&gt;resources/readme&lt;/code&gt;, &lt;code&gt;getting-started/quickstart&lt;/code&gt;, &lt;code&gt;examples/crud&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Pascal ainda é ensinado — cursos de algoritmos, manutenção legada, competição em algumas regiões, e shops Delphi treinando juniores. &lt;strong&gt;Free Pascal e IDEs Delphi&lt;/strong&gt; dominam salas de aula, mas trazem peso de instalação e fricção de licenciamento. CrabPascal oferece caminho &lt;strong&gt;zero-custo, CLI-first, open-source&lt;/strong&gt; com exemplos modernos (REST, JSON) que estudantes realmente valorizam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que CrabPascal na sala de aula?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requisito&lt;/th&gt;
&lt;th&gt;Resposta CrabPascal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Grátis em todo OS&lt;/td&gt;
&lt;td&gt;Licença MIT, sem limite de assentos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feedback rápido&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;check&lt;/code&gt; com spans de diagnóstico reais&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relevância moderna&lt;/td&gt;
&lt;td&gt;Exemplo CRUD Horse API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internals visíveis&lt;/td&gt;
&lt;td&gt;Codebase Rust para módulos avançados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Erros honestos&lt;/td&gt;
&lt;td&gt;Sem features falsas silenciosas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;resources/readme&lt;/code&gt; lista handbooks (Object Pascal Handbook) como referência do instrutor enquanto alunos rodam labs CrabPascal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outline curricular (amostra 8 semanas)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Semanas 1–2 — Sintaxe e fluxo de controle
&lt;/h3&gt;

&lt;p&gt;Tópicos: variáveis, tipos, if/for/while, procedures.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;program&lt;/span&gt; &lt;span class="n"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;begin&lt;/span&gt;
  &lt;span class="k"&gt;WriteLn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Olá, Pascal 2026'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Comandos de lab:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check hello.dpr
crab-pascal run hello.dpr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;getting-started/quickstart&lt;/code&gt; como handout estudantil.&lt;/p&gt;

&lt;h3&gt;
  
  
  Semanas 3–4 — Records e intro OOP
&lt;/h3&gt;

&lt;p&gt;Tópicos: records, classes, constructors, formatação &lt;code&gt;WriteLn&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Comece só com caminho runtime — exceptions e properties funcionam em &lt;code&gt;run&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Semanas 5–6 — Units e APIs
&lt;/h3&gt;

&lt;p&gt;Tópicos: &lt;code&gt;uses&lt;/code&gt;, namespaces, básicos de &lt;code&gt;System.SysUtils&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Capstone: rode &lt;code&gt;examples/crud/crud.dpr&lt;/code&gt; — discuta verbos HTTP, JSON, separação de concerns. Alunos veem Pascal além de homework de console.&lt;/p&gt;

&lt;h3&gt;
  
  
  Semanas 7–8 — Módulo compiladores opcional
&lt;/h3&gt;

&lt;p&gt;Para trilhas CC: mapeie fases lexer/parser usando &lt;code&gt;resources/curso-compiladores-crabpascal&lt;/code&gt;. Alunos traceiam fixture pelo output de &lt;code&gt;check&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dicas de setup em sala
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Lab mínimo:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Toolchain Rust (build once, distribua binário)&lt;/li&gt;
&lt;li&gt;Ou &lt;code&gt;crab-pascal.exe&lt;/code&gt; prebuilt nas imagens&lt;/li&gt;
&lt;li&gt;VS Code + extensão CrabPascal opcional&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Evite:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exigir GCC em cursos introdutórios (deixe &lt;code&gt;build-exe&lt;/code&gt; para semana avançada)&lt;/li&gt;
&lt;li&gt;Labs HTTP Horse sem explicar conflitos na porta 9000 — use start/stop scriptado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Offline-friendly:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Diferente de IDEs cloud, CrabPascal roda air-gapped após clone — importante para escolas com rede restrita.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ideias de avaliação
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Leitura de diagnóstico&lt;/strong&gt; — dado output de &lt;code&gt;check&lt;/code&gt;, explique o bug (ensina tooling real)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extração de unit&lt;/strong&gt; — refatore programa monolítico em units &lt;code&gt;.pas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensão de API&lt;/strong&gt; — adicione endpoint CRUD no exemplo Horse&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Essay de paridade&lt;/strong&gt; — compare modelo string Delphi vs CrabPascal (avançado)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pedagogia inclusiva
&lt;/h2&gt;

&lt;p&gt;Posts bilíngues do blog (English + Português) espelham comunidades Delphi Brasil/LATAM ainda ativas em 2026. Assign posts 001–010 como leitura — fundamentos sem custo de textbook.&lt;/p&gt;

&lt;p&gt;Ligue histórico de sprints (post 025) para alunos interessados em crédito de contribuição open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitações a declarar upfront
&lt;/h2&gt;

&lt;p&gt;Professores devem state claramente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não é ambiente RAD GUI — sem form designer&lt;/li&gt;
&lt;li&gt;Build nativo suporta subconjunto da linguagem&lt;/li&gt;
&lt;li&gt;RTL crescendo — documente versão pinned do semestre (&lt;code&gt;essentials/project-status&lt;/code&gt; mostra v2.22.0)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestidade previne frustração estudantil — alinha com filosofia do projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bundle de recursos para instrutor
&lt;/h2&gt;

&lt;p&gt;Paths Mintlify para agrupar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;getting-started/quickstart&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;examples/crud&lt;/code&gt; (walkthrough do source)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resources/readme&lt;/code&gt; (referências PDF externas)&lt;/li&gt;
&lt;li&gt;Blog 029 walkthrough CRUD (Parte 1)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Educação Pascal não exige tooling dos anos 90. CrabPascal dá a instrutores stack reproduzível, honesta e moderna — console a REST em um semestre. Comece com &lt;code&gt;check&lt;/code&gt; e &lt;code&gt;run&lt;/code&gt;; deixe alunos curiosos mergulharem no repo do compilador.&lt;/p&gt;

&lt;p&gt;Próximo: &lt;em&gt;Changelog 2026: um ano de sprints&lt;/em&gt; (&lt;code&gt;060-changelog-2026-year-review&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>education</category>
    </item>
    <item>
      <title>From Delphi Developer to CrabPascal | Do desenvolvedor Delphi ao CrabPascal</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 16:15:25 +0000</pubDate>
      <link>https://dev.to/crabpascal/from-delphi-developer-to-crabpascal-do-desenvolvedor-delphi-ao-crabpascal-jeg</link>
      <guid>https://dev.to/crabpascal/from-delphi-developer-to-crabpascal-do-desenvolvedor-delphi-ao-crabpascal-jeg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  From Delphi Developer to CrabPascal
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2:&lt;/strong&gt; Previous: &lt;em&gt;The v2.8 Hotfix Story&lt;/em&gt; (&lt;code&gt;057-v28-hotfix-story&lt;/code&gt;). Philosophy: &lt;code&gt;essentials/project-philosophy&lt;/code&gt;. Compatibility: &lt;code&gt;roadmap/review-360&lt;/code&gt;. Quick start: &lt;code&gt;usage/guia-rapido&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You know Delphi. You have &lt;code&gt;.pas&lt;/code&gt; files, &lt;code&gt;.dpr&lt;/code&gt; projects, maybe Horse APIs or legacy VCL units. &lt;strong&gt;CrabPascal is not a replacement IDE&lt;/strong&gt; — it is a modern Pascal toolchain written in Rust with honest parity boundaries. This migration guide respects your experience and tells you exactly what changes — and what does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mindset shift: three truths
&lt;/h2&gt;

&lt;p&gt;From &lt;code&gt;essentials/project-philosophy&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No gambiarra&lt;/strong&gt; — CrabPascal prefers failing loudly over fake support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual paths&lt;/strong&gt; — &lt;code&gt;run&lt;/code&gt; (interpreter) vs &lt;code&gt;build-exe&lt;/code&gt; (native C) are not identical yet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sprint-evolving RTL&lt;/strong&gt; — &lt;code&gt;System.*&lt;/code&gt; shims grow release by release&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your unit uses exceptions, method properties, or generics iteration, start with &lt;strong&gt;&lt;code&gt;run&lt;/code&gt;&lt;/strong&gt; until sprint reviews confirm native parity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day-one setup (Delphi developer edition)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://bitbucket.org/alphatecnologia/crabpascal.git
&lt;span class="nb"&gt;cd &lt;/span&gt;crabpascal
cargo build &lt;span class="nt"&gt;--release&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows shortcut: VS Code extension &lt;code&gt;crabpascal.crabpascal&lt;/code&gt; with optional auto-install of &lt;code&gt;crab-pascal.exe&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;See &lt;code&gt;usage/guia-rapido&lt;/code&gt; for PATH configuration and platform notes.&lt;/p&gt;

&lt;h3&gt;
  
  
  First commands (map from Delphi IDE)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Delphi habit&lt;/th&gt;
&lt;th&gt;CrabPascal equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compile (syntax)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;crab-pascal check Project.dpr&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run without full IDE&lt;/td&gt;
&lt;td&gt;&lt;code&gt;crab-pascal run Project.dpr&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build native exe&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;crab-pascal build-exe Project.dpr&lt;/code&gt; (subset of language)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preprocessor view&lt;/td&gt;
&lt;td&gt;&lt;code&gt;crab-pascal preproc Unit.pas&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check examples/crud/crud.dpr
crab-pascal run examples/crud/crud.dpr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CRUD demo is the modern Horse REST reference — closer to today's Delphi backend work than VCL hello world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Namespace and uses clause
&lt;/h2&gt;

&lt;p&gt;Delphi XE+ style:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;uses&lt;/span&gt;
  &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SysUtils&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Classes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CrabPascal resolves these via &lt;code&gt;rtl/sys/&lt;/code&gt; shims (Sprint 2+). If a unit is missing, &lt;code&gt;check&lt;/code&gt; reports it — add shim or refactor uses temporarily.&lt;/p&gt;

&lt;p&gt;Dotted unit names (&lt;code&gt;unit System.IOUtils&lt;/code&gt;) landed in v2.22.0 — verify your version in &lt;code&gt;essentials/project-status&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What migrates easily
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Procedures, functions, records&lt;/li&gt;
&lt;li&gt;Classes with inheritance (runtime path)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;try/except/finally&lt;/code&gt; in &lt;strong&gt;&lt;code&gt;run&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Properties with backing fields&lt;/li&gt;
&lt;li&gt;Generics &lt;code&gt;TList&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;TDictionary&amp;lt;K,V&amp;gt;&lt;/code&gt; basic operations&lt;/li&gt;
&lt;li&gt;Horse-style HTTP handlers in examples&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What needs attention
&lt;/h2&gt;

&lt;p&gt;Check &lt;code&gt;roadmap/review-360&lt;/code&gt; Priority 0/1 before bulk porting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;String semantics&lt;/strong&gt; — UTF-8 internal vs Delphi UTF-16; watch indexing and &lt;code&gt;PChar&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RTL gaps&lt;/strong&gt; — IO, encoding, satellite units&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codegen parity&lt;/strong&gt; — exceptions and some OOP constructs refuse native build honestly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VCL/FMX&lt;/strong&gt; — not supported; keep UI in Delphi, port logic units&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Incremental migration strategy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Phase A — Static analysis&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check EachUnit.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Collect errors; group by parser vs RTL vs semantic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase B — Runtime validation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal run EachUnit.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or compile a thin &lt;code&gt;.dpr&lt;/code&gt; driver importing your units.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase C — Native build (optional)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only after &lt;code&gt;run&lt;/code&gt; passes and you confirm no blocked constructs (exceptions in hot paths, etc.).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase D — Contribute back&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Minimal fixture for your blocker → sprint PR. Your pain becomes everyone's test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;crabpascal.toml&lt;/code&gt; (see blog post 007) sets search paths, defines, and build preferences — analogous to Delphi project options stripped to essentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community and support
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Blog series Part 1 (001–031) — fundamentals&lt;/li&gt;
&lt;li&gt;Part 2 (032–061) — Mintlify docs tour and audits&lt;/li&gt;
&lt;li&gt;Bitbucket issues with smallest repro win fastest fixes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Delphi skills transfer directly — syntax is home. What changes is &lt;strong&gt;tooling honesty&lt;/strong&gt; and &lt;strong&gt;RTL coverage cadence&lt;/strong&gt;. Start with &lt;code&gt;check&lt;/code&gt; + &lt;code&gt;run&lt;/code&gt;, read the 360° review for your dependencies, and ship one unit before betting a whole codebase.&lt;/p&gt;

&lt;p&gt;Next: &lt;em&gt;Teaching Pascal in 2026 with CrabPascal&lt;/em&gt; (&lt;code&gt;059-teaching-pascal-with-crabpascal&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Do desenvolvedor Delphi ao CrabPascal
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2:&lt;/strong&gt; Anterior: &lt;em&gt;História dos hotfixes v2.8&lt;/em&gt; (&lt;code&gt;057-v28-hotfix-story&lt;/code&gt;). Filosofia: &lt;code&gt;essentials/project-philosophy&lt;/code&gt;. Compatibilidade: &lt;code&gt;roadmap/review-360&lt;/code&gt;. Quick start: &lt;code&gt;usage/guia-rapido&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Você conhece Delphi. Tem arquivos &lt;code&gt;.pas&lt;/code&gt;, projetos &lt;code&gt;.dpr&lt;/code&gt;, talvez APIs Horse ou units VCL legadas. &lt;strong&gt;CrabPascal não é IDE substituta&lt;/strong&gt; — é toolchain Pascal moderna escrita em Rust com limites de paridade honestos. Este guia de migração respeita sua experiência e diz exatamente o que muda — e o que não muda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mudança de mindset: três verdades
&lt;/h2&gt;

&lt;p&gt;De &lt;code&gt;essentials/project-philosophy&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sem gambiarra&lt;/strong&gt; — CrabPascal prefere falhar alto a suporte falso&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual paths&lt;/strong&gt; — &lt;code&gt;run&lt;/code&gt; (interpretador) vs &lt;code&gt;build-exe&lt;/code&gt; (C nativo) ainda não são idênticos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RTL evoluindo por sprint&lt;/strong&gt; — shims &lt;code&gt;System.*&lt;/code&gt; crescem release a release&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Se sua unit usa exceptions, properties por método ou iteração generics, comece com &lt;strong&gt;&lt;code&gt;run&lt;/code&gt;&lt;/strong&gt; até reviews de sprint confirmarem paridade nativa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup dia um (edição desenvolvedor Delphi)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Instalar CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://bitbucket.org/alphatecnologia/crabpascal.git
&lt;span class="nb"&gt;cd &lt;/span&gt;crabpascal
cargo build &lt;span class="nt"&gt;--release&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Atalho Windows: extensão VS Code &lt;code&gt;crabpascal.crabpascal&lt;/code&gt; com auto-instalação opcional de &lt;code&gt;crab-pascal.exe&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Veja &lt;code&gt;usage/guia-rapido&lt;/code&gt; para PATH e notas de plataforma.&lt;/p&gt;

&lt;h3&gt;
  
  
  Primeiros comandos (mapa da IDE Delphi)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hábito Delphi&lt;/th&gt;
&lt;th&gt;Equivalente CrabPascal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compilar (sintaxe)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;crab-pascal check Project.dpr&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rodar sem IDE completa&lt;/td&gt;
&lt;td&gt;&lt;code&gt;crab-pascal run Project.dpr&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build exe nativo&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;crab-pascal build-exe Project.dpr&lt;/code&gt; (subconjunto da linguagem)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visão preprocessor&lt;/td&gt;
&lt;td&gt;&lt;code&gt;crab-pascal preproc Unit.pas&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check examples/crud/crud.dpr
crab-pascal run examples/crud/crud.dpr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Demo CRUD é referência Horse REST moderna — mais próxima de backend Delphi atual que hello world VCL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Namespace e uses
&lt;/h2&gt;

&lt;p&gt;Estilo Delphi XE+:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;uses&lt;/span&gt;
  &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SysUtils&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Classes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CrabPascal resolve via shims &lt;code&gt;rtl/sys/&lt;/code&gt; (Sprint 2+). Se unit falta, &lt;code&gt;check&lt;/code&gt; reporta — adicione shim ou refatore uses temporariamente.&lt;/p&gt;

&lt;p&gt;Unit names com ponto (&lt;code&gt;unit System.IOUtils&lt;/code&gt;) chegou em v2.22.0 — verifique versão em &lt;code&gt;essentials/project-status&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que migra fácil
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Procedures, functions, records&lt;/li&gt;
&lt;li&gt;Classes com herança (caminho runtime)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;try/except/finally&lt;/code&gt; em &lt;strong&gt;&lt;code&gt;run&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Properties com backing fields&lt;/li&gt;
&lt;li&gt;Generics &lt;code&gt;TList&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;TDictionary&amp;lt;K,V&amp;gt;&lt;/code&gt; operações básicas&lt;/li&gt;
&lt;li&gt;Handlers HTTP estilo Horse nos exemplos&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que precisa atenção
&lt;/h2&gt;

&lt;p&gt;Consulte &lt;code&gt;roadmap/review-360&lt;/code&gt; Prioridade 0/1 antes de port em massa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Semântica de strings&lt;/strong&gt; — UTF-8 interno vs UTF-16 Delphi; cuidado com indexação e &lt;code&gt;PChar&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gaps RTL&lt;/strong&gt; — IO, encoding, units satélite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paridade codegen&lt;/strong&gt; — exceptions e alguns construtos OOP recusam build nativo honestamente&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VCL/FMX&lt;/strong&gt; — não suportado; mantenha UI no Delphi, porte units de lógica&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Estratégia de migração incremental
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fase A — Análise estática&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check CadaUnit.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Colete erros; agrupe por parser vs RTL vs semântica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fase B — Validação runtime&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal run CadaUnit.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou compile driver &lt;code&gt;.dpr&lt;/code&gt; fino importando suas units.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fase C — Build nativo (opcional)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Só após &lt;code&gt;run&lt;/code&gt; passar e confirmar ausência de construtos bloqueados (exceptions em hot paths, etc.).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fase D — Contribua de volta&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fixture mínimo do seu blocker → PR de sprint. Sua dor vira teste de todos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuração
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;crabpascal.toml&lt;/code&gt; (veja blog post 007) define search paths, defines e preferências de build — análogo a opções de projeto Delphi reduzidas ao essencial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comunidade e suporte
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Série blog Parte 1 (001–031) — fundamentos&lt;/li&gt;
&lt;li&gt;Parte 2 (032–061) — tour docs Mintlify e auditorias&lt;/li&gt;
&lt;li&gt;Issues Bitbucket com menor repro ganham fixes mais rápidos&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Skills Delphi transferem direto — sintaxe é casa. O que muda é &lt;strong&gt;honestidade do tooling&lt;/strong&gt; e &lt;strong&gt;cadência de cobertura RTL&lt;/strong&gt;. Comece com &lt;code&gt;check&lt;/code&gt; + &lt;code&gt;run&lt;/code&gt;, leia review 360° para suas dependências, e ship uma unit antes de apostar codebase inteiro.&lt;/p&gt;

&lt;p&gt;Próximo: &lt;em&gt;Ensinando Pascal em 2026&lt;/em&gt; (&lt;code&gt;059-teaching-pascal-with-crabpascal&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>delphi</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The v2.8 Hotfix Story: Security and Stability | História dos hotfixes v2.8</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 16:00:27 +0000</pubDate>
      <link>https://dev.to/crabpascal/the-v28-hotfix-story-security-and-stability-historia-dos-hotfixes-v28-2a5n</link>
      <guid>https://dev.to/crabpascal/the-v28-hotfix-story-security-and-stability-historia-dos-hotfixes-v28-2a5n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  The v2.8 Hotfix Story: Security and Stability
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2:&lt;/strong&gt; Previous: &lt;em&gt;Mapping the Delphi Bible to CrabPascal&lt;/em&gt; (&lt;code&gt;056-delphi-bible-analysis&lt;/code&gt;). Release notes: &lt;code&gt;releases/release-v2-8-3-hotfix-critico&lt;/code&gt;, &lt;code&gt;releases/release-v2-8-4-hotfix-seguranca&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Before sprint governance and Mintlify audits, CrabPascal shipped &lt;strong&gt;v2.8.x&lt;/strong&gt; — a turbulent week that fixed eight parser/runtime blockers &lt;em&gt;and&lt;/em&gt; exposed a credential leak in the VS Code extension pipeline. This post tells that story transparently: what broke, what we fixed, and why it still matters for contributors in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  v2.8.3 — When executables finally stayed open
&lt;/h2&gt;

&lt;p&gt;The VS Code extension promised native builds. Reality: generated &lt;code&gt;.exe&lt;/code&gt; files &lt;strong&gt;opened and closed instantly&lt;/strong&gt;. Loops using &lt;code&gt;ReadLn&lt;/code&gt; spun forever because input was simulated. Enums, multi-field declarations, constructors in implementation sections, and &lt;code&gt;inherited&lt;/code&gt; — all parser failures blocking real projects.&lt;/p&gt;

&lt;p&gt;v2.8.3 (October 27, 2025) addressed &lt;strong&gt;eight critical bugs&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Enums inline&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expected type, found LeftParen&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;parse_enum_type()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-fields&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expected Colon, found Comma&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multi-name field parsing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constructors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expected End, found Constructor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Implementation section tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inherited&lt;/td&gt;
&lt;td&gt;Statement parse failure&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;inherited;&lt;/code&gt; support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grouping parens&lt;/td&gt;
&lt;td&gt;Double advance skipped &lt;code&gt;and&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Remove redundant &lt;code&gt;advance()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;While loops&lt;/td&gt;
&lt;td&gt;Double advance on &lt;code&gt;do&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Same class of bug&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ReadLn&lt;/td&gt;
&lt;td&gt;Infinite loops&lt;/td&gt;
&lt;td&gt;Real stdin read&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Executable lifetime&lt;/td&gt;
&lt;td&gt;Immediate exit&lt;/td&gt;
&lt;td&gt;Runtime entry fix&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This was the &lt;strong&gt;first truly usable extension build&lt;/strong&gt; for many Windows users — a stability milestone predating the 2026 sprint wave.&lt;/p&gt;

&lt;h2&gt;
  
  
  v2.8.4–v2.8.6 — Security hotfix chain
&lt;/h2&gt;

&lt;p&gt;Publishing v2.8.3 triggered the VS Code Marketplace &lt;strong&gt;secret scanner&lt;/strong&gt;. An Azure DevOps Personal Access Token appeared in &lt;code&gt;vscode-extension/SEGURANCA_TOKEN.md&lt;/code&gt; line 48 — bundled inside the &lt;code&gt;.vsix&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk:&lt;/strong&gt; Anyone with the token could publish malicious extension versions under our publisher identity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Timeline
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v2.8.3&lt;/strong&gt; — Token exposed in documentation shipped with package&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2.8.4&lt;/strong&gt; — Token redacted; &lt;code&gt;.env*&lt;/code&gt; files still packaged incorrectly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2.8.5&lt;/strong&gt; — Real token accidentally placed in &lt;code&gt;.env.example&lt;/code&gt; (user error during rotation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2.8.6&lt;/strong&gt; — Definitive fix: &lt;code&gt;.vscodeignore&lt;/code&gt; excludes secrets; token revoked and rotated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Marketplace rejection message (paraphrased):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your package contains secrets...
'…DO1XJv' is an apparent Azure DevOps PAT
in extension/SEGURANCA_TOKEN.md (Line 48)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Lessons learned (still enforced)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Never commit tokens&lt;/strong&gt; — even in "internal" markdown. Use placeholders and secret stores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.vscodeignore&lt;/code&gt; is security boundary&lt;/strong&gt; — audit what enters &lt;code&gt;.vsix&lt;/code&gt; like production artifacts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated scanners help&lt;/strong&gt; — Marketplace blocked a bad publish before wide distribution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document hotfixes&lt;/strong&gt; — Mintlify release pages preserve context when git history is noisy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These lessons feed Rafael's CI/docs audit (TD-DOCS, release governance) and squad release checklist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relationship to 2026 sprints
&lt;/h2&gt;

&lt;p&gt;v2.8.x predates v2.9.9+ sprint releases but explains &lt;strong&gt;parser hardening debt&lt;/strong&gt; Bruno closed in Sprint 11 (v2.19.0). Many v2.8.3 fixes were point patches; sprints systematized them with fixtures and reviews.&lt;/p&gt;

&lt;p&gt;Security practices from v2.8.6 carry forward: extension publishing docs now assume rotation, ignore rules, and no PATs in tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  For users on old extension versions
&lt;/h2&gt;

&lt;p&gt;If you still run a pre-v2.8.6 VS Code extension:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update to current marketplace build&lt;/li&gt;
&lt;li&gt;Revoke any tokens you may have copied from old docs&lt;/li&gt;
&lt;li&gt;Prefer CLI &lt;code&gt;crab-pascal&lt;/code&gt; from project releases for reproducible builds&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  For contributors shipping extensions
&lt;/h2&gt;

&lt;p&gt;Before &lt;code&gt;vsce package&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify no secrets in package contents&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;vsce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"env|token|SEGURANCA"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cross-check &lt;code&gt;usage/guia-publicacao-vscode-marketplace&lt;/code&gt; for current workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why blog about old hotfixes?
&lt;/h2&gt;

&lt;p&gt;Transparency builds trust. Delphi developers evaluating CrabPascal ask: &lt;em&gt;"Will this team hide production issues?"&lt;/em&gt; v2.8 shows we ship fixes fast &lt;strong&gt;and&lt;/strong&gt; document failures — including embarrassing leaks.&lt;/p&gt;

&lt;p&gt;The 2026 audit series continues that honesty at compiler depth; v2.8 is the shipping and security chapter.&lt;/p&gt;

&lt;p&gt;Next: &lt;em&gt;From Delphi Developer to CrabPascal&lt;/em&gt; (&lt;code&gt;058-delphi-dev-migration-guide&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  História dos hotfixes v2.8
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2:&lt;/strong&gt; Anterior: &lt;em&gt;Mapeando a Bíblia Delphi no CrabPascal&lt;/em&gt; (&lt;code&gt;056-delphi-bible-analysis&lt;/code&gt;). Release notes: &lt;code&gt;releases/release-v2-8-3-hotfix-critico&lt;/code&gt;, &lt;code&gt;releases/release-v2-8-4-hotfix-seguranca&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Antes da governança por sprints e auditorias Mintlify, CrabPascal shipou &lt;strong&gt;v2.8.x&lt;/strong&gt; — semana turbulenta que corrigiu oito blockers parser/runtime &lt;strong&gt;e&lt;/strong&gt; expôs vazamento de credencial no pipeline da extensão VS Code. Este post conta essa história com transparência: o que quebrou, o que corrigimos e por que ainda importa para contribuidores em 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  v2.8.3 — Quando executáveis finalmente ficaram abertos
&lt;/h2&gt;

&lt;p&gt;A extensão VS Code prometia builds nativos. Realidade: &lt;code&gt;.exe&lt;/code&gt; gerados &lt;strong&gt;abriam e fechavam na hora&lt;/strong&gt;. Loops com &lt;code&gt;ReadLn&lt;/code&gt; rodavam forever porque input era simulado. Enums, multi-fields, constructors na implementation e &lt;code&gt;inherited&lt;/code&gt; — falhas de parser bloqueando projetos reais.&lt;/p&gt;

&lt;p&gt;v2.8.3 (27/out/2025) endereçou &lt;strong&gt;oito bugs críticos&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Área&lt;/th&gt;
&lt;th&gt;Sintoma&lt;/th&gt;
&lt;th&gt;Correção&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Enums inline&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expected type, found LeftParen&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;parse_enum_type()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-fields&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expected Colon, found Comma&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Parsing multi-nome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constructors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expected End, found Constructor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tokens na implementation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inherited&lt;/td&gt;
&lt;td&gt;Falha no parse de statement&lt;/td&gt;
&lt;td&gt;Suporte a &lt;code&gt;inherited;&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parênteses grouping&lt;/td&gt;
&lt;td&gt;Double advance pulava &lt;code&gt;and&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Remover &lt;code&gt;advance()&lt;/code&gt; redundante&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;While loops&lt;/td&gt;
&lt;td&gt;Double advance no &lt;code&gt;do&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Mesma classe de bug&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ReadLn&lt;/td&gt;
&lt;td&gt;Loops infinitos&lt;/td&gt;
&lt;td&gt;Leitura real de stdin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lifetime do exe&lt;/td&gt;
&lt;td&gt;Exit imediato&lt;/td&gt;
&lt;td&gt;Fix de entry no runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Foi o &lt;strong&gt;primeiro build de extensão verdadeiramente usável&lt;/strong&gt; para muitos usuários Windows — marco de estabilidade anterior à onda de sprints 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  v2.8.4–v2.8.6 — Cadeia de hotfix de segurança
&lt;/h2&gt;

&lt;p&gt;Publicar v2.8.3 disparou o &lt;strong&gt;scanner de secrets&lt;/strong&gt; do VS Code Marketplace. Personal Access Token do Azure DevOps apareceu em &lt;code&gt;vscode-extension/SEGURANCA_TOKEN.md&lt;/code&gt; linha 48 — empacotado dentro do &lt;code&gt;.vsix&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risco:&lt;/strong&gt; Qualquer um com o token poderia publicar versões maliciosas da extensão sob nossa identidade de publisher.&lt;/p&gt;

&lt;h3&gt;
  
  
  Timeline
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v2.8.3&lt;/strong&gt; — Token exposto em documentação shipped com pacote&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2.8.4&lt;/strong&gt; — Token redigido; arquivos &lt;code&gt;.env*&lt;/code&gt; ainda empacotados errado&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2.8.5&lt;/strong&gt; — Token real colocado acidentalmente em &lt;code&gt;.env.example&lt;/code&gt; (erro humano na rotação)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2.8.6&lt;/strong&gt; — Correção definitiva: &lt;code&gt;.vscodeignore&lt;/code&gt; exclui secrets; token revogado e rotacionado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mensagem de rejeição do Marketplace (parafraseada):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your package contains secrets...
'…DO1XJv' is an apparent Azure DevOps PAT
in extension/SEGURANCA_TOKEN.md (Line 48)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Lições aprendidas (ainda enforced)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nunca commitar tokens&lt;/strong&gt; — mesmo em markdown "interno". Use placeholders e secret stores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.vscodeignore&lt;/code&gt; é boundary de segurança&lt;/strong&gt; — audite o que entra no &lt;code&gt;.vsix&lt;/code&gt; como artefato de produção.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scanners automáticos ajudam&lt;/strong&gt; — Marketplace bloqueou publish ruim antes de distribuição ampla.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentar hotfixes&lt;/strong&gt; — páginas de release Mintlify preservam contexto quando histórico git é ruidoso.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Essas lições alimentam auditoria CI/docs do Rafael (TD-DOCS, governança de release) e checklist de release da squad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relação com sprints 2026
&lt;/h2&gt;

&lt;p&gt;v2.8.x é anterior a releases sprint v2.9.9+, mas explica &lt;strong&gt;débito de parser hardening&lt;/strong&gt; que Bruno fechou na Sprint 11 (v2.19.0). Muitos fixes v2.8.3 foram patches pontuais; sprints sistematizaram com fixtures e reviews.&lt;/p&gt;

&lt;p&gt;Práticas de segurança de v2.8.6 seguem: docs de publicação da extensão assumem rotação, ignore rules e zero PATs na árvore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Para usuários em versões antigas da extensão
&lt;/h2&gt;

&lt;p&gt;Se ainda roda extensão VS Code pré-v2.8.6:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Atualize para build atual do marketplace&lt;/li&gt;
&lt;li&gt;Revogue tokens que possam ter copiado de docs antigos&lt;/li&gt;
&lt;li&gt;Prefira CLI &lt;code&gt;crab-pascal&lt;/code&gt; dos releases do projeto para builds reproduzíveis&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Para contribuidores publicando extensão
&lt;/h2&gt;

&lt;p&gt;Antes de &lt;code&gt;vsce package&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verifique ausência de secrets no conteúdo do pacote&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;vsce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Pattern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"env|token|SEGURANCA"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confira &lt;code&gt;usage/guia-publicacao-vscode-marketplace&lt;/code&gt; para workflow atual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que blogar hotfixes antigos?
&lt;/h2&gt;

&lt;p&gt;Transparência constrói confiança. Desenvolvedores Delphi avaliando CrabPascal perguntam: &lt;em&gt;"Esse time esconde issues de produção?"&lt;/em&gt; v2.8 mostra que shipamos fixes rápido &lt;strong&gt;e&lt;/strong&gt; documentamos falhas — incluindo leaks embaraçosos.&lt;/p&gt;

&lt;p&gt;A série de auditoria 2026 continua essa honestidade em profundidade de compilador; v2.8 é o capítulo shipping e segurança.&lt;/p&gt;

&lt;p&gt;Próximo: &lt;em&gt;Do desenvolvedor Delphi ao CrabPascal&lt;/em&gt; (&lt;code&gt;058-delphi-dev-migration-guide&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>opensource</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>Mapping the Delphi Bible to CrabPascal | Mapeando a Bíblia Delphi no CrabPascal</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 15:45:22 +0000</pubDate>
      <link>https://dev.to/crabpascal/mapping-the-delphi-bible-to-crabpascal-mapeando-a-biblia-delphi-no-crabpascal-lko</link>
      <guid>https://dev.to/crabpascal/mapping-the-delphi-bible-to-crabpascal-mapeando-a-biblia-delphi-no-crabpascal-lko</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Mapping the Delphi Bible to CrabPascal
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2:&lt;/strong&gt; Previous: &lt;em&gt;Learn Compilers Using CrabPascal&lt;/em&gt; (&lt;code&gt;055-compiler-course-with-crabpascal&lt;/code&gt;). Analysis doc: &lt;code&gt;resources/analise-biblia-delphi-v1-7&lt;/code&gt;. Compatibility map: &lt;code&gt;roadmap/review-360&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Every Delphi team has a shelf weight: reference material spanning decades. CrabPascal's &lt;strong&gt;&lt;code&gt;analise-biblia-delphi-v1-7&lt;/code&gt;&lt;/strong&gt; document maps one such source — &lt;em&gt;BibliaDelphi8.md&lt;/em&gt; (75,000+ lines) — against compiler capabilities. This post explains how we use "Bible-scale" references without drowning in scope, and how you can do the same for your migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why map a Delphi reference to CrabPascal?
&lt;/h2&gt;

&lt;p&gt;Compatibility is not a vibe — it is a &lt;strong&gt;checklist&lt;/strong&gt;. The 360° review (&lt;code&gt;roadmap/review-360&lt;/code&gt;) lists pipeline gaps; the Bible analysis adds &lt;strong&gt;frequency-weighted language features&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What 90% of Delphi code uses (&lt;code&gt;case&lt;/code&gt;, &lt;code&gt;repeat&lt;/code&gt;, &lt;code&gt;with&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What blocks enterprise units (generics edge cases, RTTI)&lt;/li&gt;
&lt;li&gt;What already shipped in v1.5.x–v2.22.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The analysis dated October 2025 remains a template: pick a chapter, grep CrabPascal, assign sprint priority.&lt;/p&gt;

&lt;h2&gt;
  
  
  Already implemented (baseline)
&lt;/h2&gt;

&lt;p&gt;When the analysis was written, these were confirmed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;CrabPascal status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;if/for/while&lt;/td&gt;
&lt;td&gt;Core from v1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Classes, inheritance, virtual/override&lt;/td&gt;
&lt;td&gt;v1.5+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;try/except/finally&lt;/td&gt;
&lt;td&gt;v1.4+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Properties, Self, Result, Exit&lt;/td&gt;
&lt;td&gt;v1.4+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preprocessor &lt;code&gt;{$IFDEF}&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;v1.5.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;as&lt;/code&gt; / &lt;code&gt;is&lt;/code&gt; operators&lt;/td&gt;
&lt;td&gt;v1.5.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14 numeric types including Double&lt;/td&gt;
&lt;td&gt;v1.5.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sprints 1–14 added namespaces, generics collections, Unicode groundwork, parser hardening, and IOUtils — closing many Bible gaps post-analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  High-priority gaps identified
&lt;/h2&gt;

&lt;p&gt;The analysis flagged essentials many codebases use daily:&lt;/p&gt;

&lt;h3&gt;
  
  
  CASE OF
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;Grade&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt;
  &lt;span class="s"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;WriteLn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Excellent'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="s"&gt;'B'&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="s"&gt;' '&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="s"&gt;': WriteLn('&lt;/span&gt;&lt;span class="n"&gt;Pass&lt;/span&gt;&lt;span class="s"&gt;');
else
  WriteLn('&lt;/span&gt;&lt;span class="n"&gt;Fail&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Importance:&lt;/strong&gt; Very high. &lt;strong&gt;Difficulty:&lt;/strong&gt; Low (similar to if chains). Parser sprint candidate.&lt;/p&gt;

&lt;h3&gt;
  
  
  REPEAT-UNTIL
&lt;/h3&gt;

&lt;p&gt;Post-check loop common in legacy code. Similar to while with inverted test — low implementation cost, high adoption impact.&lt;/p&gt;

&lt;h3&gt;
  
  
  WITH statement
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;Customer&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="k"&gt;begin&lt;/span&gt;
  &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;'Acme'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;Active&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;True&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Still partially runtime-only in C codegen (TD-CODEGEN-004). &lt;code&gt;run&lt;/code&gt; path priority for teaching material.&lt;/p&gt;

&lt;h3&gt;
  
  
  SET types and advanced constructs
&lt;/h3&gt;

&lt;p&gt;Lower frequency in modern code but appear in older units — backlog after P0 parity items.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Bible analysis feeds sprints
&lt;/h2&gt;

&lt;p&gt;Each candidate feature gets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Importance stars&lt;/strong&gt; — derived from handbook usage patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Difficulty estimate&lt;/strong&gt; — parser vs runtime vs codegen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time box&lt;/strong&gt; — prevents eternal research threads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Squad rule from &lt;code&gt;roadmap/squad&lt;/code&gt;: if it does not help a real Delphi project compile better, it waits. Bible mapping filters noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical workflow for your unit
&lt;/h2&gt;

&lt;p&gt;Migrating &lt;code&gt;LegacyModule.pas&lt;/code&gt;?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;roadmap/review-360&lt;/code&gt; — check Priority 0/1 blockers&lt;/li&gt;
&lt;li&gt;Cross-reference constructs in your unit against &lt;code&gt;analise-biblia-delphi-v1-7&lt;/code&gt; tables&lt;/li&gt;
&lt;li&gt;Run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check LegacyModule.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;For each error, classify: parser, RTL shim, runtime, or codegen parity&lt;/li&gt;
&lt;li&gt;File minimal fixture — one construct per file&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Resources beyond the Bible
&lt;/h2&gt;

&lt;p&gt;Mintlify &lt;code&gt;resources/readme&lt;/code&gt; lists handbooks and external PDFs (Object Pascal Handbook Sydney). Use them the same way: syntax validation, semantic rules, missing builtin discovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;p&gt;CrabPascal will not implement every Delphi feature at once. The Bible map prioritizes &lt;strong&gt;language surface&lt;/strong&gt;; VCL/FMX UI is out of scope. Horse REST demos replace GUI for killer-app narratives.&lt;/p&gt;

&lt;p&gt;Native codegen still refuses unsupported constructs honestly (exceptions in build-exe until real lowering exists).&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Reference tomes are not roadmaps alone — they are &lt;strong&gt;input to a prioritized backlog&lt;/strong&gt;. The BibliaDelphi analysis shows how CrabPascal turns 75k lines into sprint-sized bullets tied to real developer pain. Use the same method on your codebase before blaming "the compiler."&lt;/p&gt;

&lt;p&gt;Next: &lt;em&gt;The v2.8 Hotfix Story&lt;/em&gt; (&lt;code&gt;057-v28-hotfix-story&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Mapeando a Bíblia Delphi no CrabPascal
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2:&lt;/strong&gt; Anterior: &lt;em&gt;Aprenda compiladores com CrabPascal&lt;/em&gt; (&lt;code&gt;055-compiler-course-with-crabpascal&lt;/code&gt;). Análise: &lt;code&gt;resources/analise-biblia-delphi-v1-7&lt;/code&gt;. Mapa de compatibilidade: &lt;code&gt;roadmap/review-360&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Todo time Delphi tem peso de prateleira: material de referência de décadas. O documento &lt;strong&gt;&lt;code&gt;analise-biblia-delphi-v1-7&lt;/code&gt;&lt;/strong&gt; do CrabPascal mapeia uma dessas fontes — &lt;em&gt;BibliaDelphi8.md&lt;/em&gt; (75.000+ linhas) — contra capacidades do compilador. Este post explica como usamos referências "escala Bíblia" sem afogar em escopo, e como você pode fazer o mesmo na migração.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que mapear referência Delphi no CrabPascal?
&lt;/h2&gt;

&lt;p&gt;Compatibilidade não é feeling — é &lt;strong&gt;checklist&lt;/strong&gt;. O review 360° (&lt;code&gt;roadmap/review-360&lt;/code&gt;) lista gaps do pipeline; a análise da Bíblia adiciona features de linguagem &lt;strong&gt;ponderadas por frequência&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que 90% do código Delphi usa (&lt;code&gt;case&lt;/code&gt;, &lt;code&gt;repeat&lt;/code&gt;, &lt;code&gt;with&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;O que bloqueia units enterprise (edge cases de generics, RTTI)&lt;/li&gt;
&lt;li&gt;O que já shipou em v1.5.x–v2.22.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A análise datada de outubro/2025 permanece template: escolha capítulo, grep CrabPascal, assign prioridade de sprint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Já implementado (baseline)
&lt;/h2&gt;

&lt;p&gt;Quando a análise foi escrita, estes estavam confirmados:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Status CrabPascal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;if/for/while&lt;/td&gt;
&lt;td&gt;Core desde v1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Classes, herança, virtual/override&lt;/td&gt;
&lt;td&gt;v1.5+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;try/except/finally&lt;/td&gt;
&lt;td&gt;v1.4+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Properties, Self, Result, Exit&lt;/td&gt;
&lt;td&gt;v1.4+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preprocessor &lt;code&gt;{$IFDEF}&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;v1.5.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operadores &lt;code&gt;as&lt;/code&gt; / &lt;code&gt;is&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;v1.5.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14 tipos numéricos incluindo Double&lt;/td&gt;
&lt;td&gt;v1.5.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sprints 1–14 adicionaram namespaces, generics collections, base Unicode, parser hardening e IOUtils — fechando muitos gaps pós-análise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gaps de alta prioridade identificados
&lt;/h2&gt;

&lt;p&gt;A análise sinalizou essenciais que codebases usam diariamente:&lt;/p&gt;

&lt;h3&gt;
  
  
  CASE OF
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;Nota&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt;
  &lt;span class="s"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;WriteLn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Excelente'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="s"&gt;'B'&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="s"&gt;'D'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;WriteLn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Aprovado'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
  &lt;span class="k"&gt;WriteLn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Reprovado'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Importância:&lt;/strong&gt; Muito alta. &lt;strong&gt;Dificuldade:&lt;/strong&gt; Baixa (similar a cadeias if). Candidato a sprint de parser.&lt;/p&gt;

&lt;h3&gt;
  
  
  REPEAT-UNTIL
&lt;/h3&gt;

&lt;p&gt;Loop pós-condição comum em código legado. Similar a while com teste invertido — baixo custo, alto impacto de adoção.&lt;/p&gt;

&lt;h3&gt;
  
  
  WITH statement
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;Cliente&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="k"&gt;begin&lt;/span&gt;
  &lt;span class="n"&gt;Nome&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;'Acme'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;Ativo&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;True&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ainda parcialmente runtime-only no codegen C (TD-CODEGEN-004). Prioridade do caminho &lt;code&gt;run&lt;/code&gt; para material didático.&lt;/p&gt;

&lt;h3&gt;
  
  
  SET types e construtos avançados
&lt;/h3&gt;

&lt;p&gt;Menor frequência em código moderno, mas aparecem em units antigas — backlog após itens P0 de paridade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como a análise da Bíblia alimenta sprints
&lt;/h2&gt;

&lt;p&gt;Cada feature candidata recebe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Estrelas de importância&lt;/strong&gt; — derivadas de padrões de uso no handbook&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estimativa de dificuldade&lt;/strong&gt; — parser vs runtime vs codegen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time box&lt;/strong&gt; — evita threads eternas de pesquisa&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Regra da squad em &lt;code&gt;roadmap/squad&lt;/code&gt;: se não ajuda projeto Delphi real a compilar melhor, espera. Mapeamento da Bíblia filtra ruído.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow prático para sua unit
&lt;/h2&gt;

&lt;p&gt;Migrando &lt;code&gt;ModuloLegado.pas&lt;/code&gt;?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abra &lt;code&gt;roadmap/review-360&lt;/code&gt; — cheque blockers Prioridade 0/1&lt;/li&gt;
&lt;li&gt;Cruze construtos da unit com tabelas de &lt;code&gt;analise-biblia-delphi-v1-7&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Rode:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check ModuloLegado.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Para cada erro, classifique: parser, shim RTL, runtime ou paridade codegen&lt;/li&gt;
&lt;li&gt;Arquivo fixture mínimo — um construto por arquivo&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Recursos além da Bíblia
&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;resources/readme&lt;/code&gt; Mintlify lista handbooks e PDFs externos (Object Pascal Handbook Sydney). Use da mesma forma: validação de sintaxe, regras semânticas, descoberta de builtin faltante.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limites honestos
&lt;/h2&gt;

&lt;p&gt;CrabPascal não implementará toda feature Delphi de uma vez. O mapa da Bíblia prioriza &lt;strong&gt;surface de linguagem&lt;/strong&gt;; UI VCL/FMX está fora de escopo. Demos Horse REST substituem GUI para narrativas killer-app.&lt;/p&gt;

&lt;p&gt;Codegen nativo ainda recusa construtos não suportados honestamente (exceptions em build-exe até lowering real existir).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Tomos de referência não são roadmap sozinhos — são &lt;strong&gt;input para backlog priorizado&lt;/strong&gt;. A análise BibliaDelphi mostra como CrabPascal transforma 75k linhas em bullets tamanho sprint ligados a dor real de desenvolvedor. Use o mesmo método no seu codebase antes de culpar "o compilador."&lt;/p&gt;

&lt;p&gt;Próximo: &lt;em&gt;História dos hotfixes v2.8&lt;/em&gt; (&lt;code&gt;057-v28-hotfix-story&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>delphi</category>
      <category>compiler</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Learn Compilers Using CrabPascal | Aprenda compiladores com CrabPascal</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 15:30:20 +0000</pubDate>
      <link>https://dev.to/crabpascal/learn-compilers-using-crabpascal-aprenda-compiladores-com-crabpascal-1p7p</link>
      <guid>https://dev.to/crabpascal/learn-compilers-using-crabpascal-aprenda-compiladores-com-crabpascal-1p7p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Learn Compilers Using CrabPascal
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2:&lt;/strong&gt; Previous: &lt;em&gt;Audit Deep Dive: IDE, CI, and Docs&lt;/em&gt; (&lt;code&gt;054-audit-ide-ci-docs&lt;/code&gt;). Course doc: &lt;code&gt;resources/curso-compiladores-crabpascal&lt;/code&gt;. Technical depth: &lt;code&gt;architecture/technical/tecnico-detalhado&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Textbooks teach compilers with toy languages — CALC, MiniJava, IMP. Useful, but abstract. &lt;strong&gt;CrabPascal is a real compiler&lt;/strong&gt;: lexer, parser, semantic analyzer, dual backends, RTL shims, and a sprint history you can read in git. The Mintlify course &lt;code&gt;resources/curso-compiladores-crabpascal&lt;/code&gt; turns that codebase into a one-hour guided tour. This post explains why that matters and how to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why learn compilers through a real project?
&lt;/h2&gt;

&lt;p&gt;Compiler courses often stop at code generation for a language with ten constructs. Production compilers add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error recovery and diagnostic spans&lt;/li&gt;
&lt;li&gt;Namespace resolution and unit loading&lt;/li&gt;
&lt;li&gt;Object layout, VMT, and properties&lt;/li&gt;
&lt;li&gt;Two execution modes (interpret vs native C)&lt;/li&gt;
&lt;li&gt;A runtime with 65+ builtins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CrabPascal exposes all of this in Rust, with Pascal fixtures you already understand if you know Delphi. You are not learning &lt;em&gt;a&lt;/em&gt; compiler — you are learning &lt;strong&gt;how Delphi-like semantics get implemented&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Course structure (six modules)
&lt;/h2&gt;

&lt;p&gt;The course in Mintlify walks six chapters:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Introduction&lt;/strong&gt; — Why translation is fascinating; compilers as protectors and optimizers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anatomy&lt;/strong&gt; — Frontend (lexer, parser, semantic) vs backend (codegen, linker)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lifecycle&lt;/strong&gt; — Source to executable; where CrabPascal's dual-mode fits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CrabPascal case study&lt;/strong&gt; — Concrete file map and pipeline phases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-world compilers&lt;/strong&gt; — GCC, LLVM, Rustc comparisons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next steps&lt;/strong&gt; — How to contribute after the tour&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each section links theory to files you can open today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Map theory to repository paths
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;CrabPascal location&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lexical analysis&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/lexer/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parsing / AST&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;src/parser/&lt;/code&gt;, &lt;code&gt;src/ast/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semantic analysis&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/semantic/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interpretation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/complete_runtime.rs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C code generation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/codegen/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preprocessor&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/preprocessor/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit graph&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/unit_resolver.rs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delphi RTL surface&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rtl/sys/*.pas&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read &lt;code&gt;architecture/technical/tecnico-detalhado&lt;/code&gt; alongside the course for VMT, heap layout, and builtin dispatch tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hands-on exercises (self-paced)
&lt;/h2&gt;

&lt;p&gt;After each module, try one small task:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After lexer module&lt;/strong&gt; — Add a token trace to a failing fixture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check tests/fixtures/your_file.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After parser module&lt;/strong&gt; — Read a &lt;code&gt;parser_hardening.rs&lt;/code&gt; test; find the AST node it asserts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After semantic module&lt;/strong&gt; — Introduce an undefined variable; confirm Sprint 1 span format in output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After backend module&lt;/strong&gt; — Compare &lt;code&gt;run&lt;/code&gt; vs &lt;code&gt;build-exe&lt;/code&gt; on a string fixture; note honest failures post-v2.21.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After runtime module&lt;/strong&gt; — Trace a property read in &lt;code&gt;complete_runtime.rs&lt;/code&gt; starting from a three-line class.&lt;/p&gt;

&lt;p&gt;These exercises mirror what sprint contributors do — not exams, but navigation practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is this course for?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Delphi developers&lt;/strong&gt; curious why their code behaves differently in CrabPascal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust developers&lt;/strong&gt; wanting a large, readable compiler codebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CS students&lt;/strong&gt; past the dragon book who need a maintained case study&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributors&lt;/strong&gt; preparing for RTL, parser, or codegen sprints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Intermediate level assumed: you should read Pascal and basic Rust syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connection to the audit series
&lt;/h2&gt;

&lt;p&gt;Posts 050–054 documented technical debt honestly. The course does not hide gaps — it shows &lt;strong&gt;where&lt;/strong&gt; in the pipeline each feature lives so you can fix TD-IDs with context. Learning and contributing converge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suggested reading order
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;getting-started/quickstart&lt;/code&gt; — run hello world&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resources/curso-compiladores-crabpascal&lt;/code&gt; — full course&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;architecture/technical/arquitetura-design&lt;/code&gt; — design decisions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;009-compiler-pipeline-five-phases&lt;/code&gt; (blog Part 1) — pipeline overview&lt;/li&gt;
&lt;li&gt;Pick one sprint review matching your interest (generics, exceptions, strings)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Compiler education does not require starting from zero. CrabPascal offers a bilingual, open, sprint-documented laboratory. Work through the course, then claim one backlog item — parser fixture, RTL shim, or parity test. That is how compiler engineers are made in 2026.&lt;/p&gt;

&lt;p&gt;Next: &lt;em&gt;Mapping the Delphi Bible to CrabPascal&lt;/em&gt; (&lt;code&gt;056-delphi-bible-analysis&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Aprenda compiladores com CrabPascal
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2:&lt;/strong&gt; Anterior: &lt;em&gt;Auditoria: IDE, CI e documentação&lt;/em&gt; (&lt;code&gt;054-audit-ide-ci-docs&lt;/code&gt;). Curso: &lt;code&gt;resources/curso-compiladores-crabpascal&lt;/code&gt;. Profundidade técnica: &lt;code&gt;architecture/technical/tecnico-detalhado&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Livros ensinam compiladores com linguagens de brinquedo — CALC, MiniJava, IMP. Útil, mas abstrato. &lt;strong&gt;CrabPascal é um compilador real&lt;/strong&gt;: lexer, parser, analisador semântico, dual backends, shims RTL e histórico de sprints legível no git. O curso Mintlify em &lt;code&gt;resources/curso-compiladores-crabpascal&lt;/code&gt; transforma esse codebase em tour guiado de uma hora. Este post explica por que importa e como usar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que aprender compiladores via projeto real?
&lt;/h2&gt;

&lt;p&gt;Cursos de compiladores often param em codegen para linguagem com dez construtos. Compiladores de produção adicionam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recuperação de erro e spans de diagnóstico&lt;/li&gt;
&lt;li&gt;Resolução de namespaces e carregamento de units&lt;/li&gt;
&lt;li&gt;Layout de objetos, VMT e properties&lt;/li&gt;
&lt;li&gt;Dois modos de execução (interpretar vs C nativo)&lt;/li&gt;
&lt;li&gt;Runtime com 65+ builtins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CrabPascal expõe tudo isso em Rust, com fixtures Pascal que você já entende se conhece Delphi. Você não aprende &lt;em&gt;um&lt;/em&gt; compilador — aprende &lt;strong&gt;como semântica Delphi-like é implementada&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura do curso (seis módulos)
&lt;/h2&gt;

&lt;p&gt;O curso no Mintlify percorre seis capítulos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Introdução&lt;/strong&gt; — Por que tradução fascina; compiladores como protetores e otimizadores&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anatomia&lt;/strong&gt; — Frontend (lexer, parser, semântica) vs backend (codegen, linker)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ciclo de vida&lt;/strong&gt; — Fonte ao executável; onde dual-mode do CrabPascal encaixa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estudo de caso CrabPascal&lt;/strong&gt; — Mapa concreto de arquivos e fases do pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compiladores reais&lt;/strong&gt; — Comparações GCC, LLVM, Rustc&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Próximos passos&lt;/strong&gt; — Como contribuir após o tour&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cada seção liga teoria a arquivos que você pode abrir hoje.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mapeie teoria para paths do repositório
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Conceito&lt;/th&gt;
&lt;th&gt;Local no CrabPascal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Análise léxica&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/lexer/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parsing / AST&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;src/parser/&lt;/code&gt;, &lt;code&gt;src/ast/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Análise semântica&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/semantic/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interpretação&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/complete_runtime.rs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codegen C&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/codegen/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preprocessor&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/preprocessor/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grafo de units&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/unit_resolver.rs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Surface RTL Delphi&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rtl/sys/*.pas&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Leia &lt;code&gt;architecture/technical/tecnico-detalhado&lt;/code&gt; junto com o curso para VMT, layout de heap e tabelas de dispatch de builtins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exercícios práticos (auto-ritmo)
&lt;/h2&gt;

&lt;p&gt;Após cada módulo, tente uma tarefa pequena:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Após módulo lexer&lt;/strong&gt; — Adicione trace de token a fixture que falha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crab-pascal check tests/fixtures/seu_arquivo.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Após módulo parser&lt;/strong&gt; — Leia teste em &lt;code&gt;parser_hardening.rs&lt;/code&gt;; ache o nó AST que ele asserta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Após módulo semântica&lt;/strong&gt; — Introduza variável indefinida; confirme formato de span Sprint 1 na saída.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Após módulo backend&lt;/strong&gt; — Compare &lt;code&gt;run&lt;/code&gt; vs &lt;code&gt;build-exe&lt;/code&gt; em fixture de string; note falhas honestas pós-v2.21.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Após módulo runtime&lt;/strong&gt; — Trace leitura de property em &lt;code&gt;complete_runtime.rs&lt;/code&gt; partindo de classe de três linhas.&lt;/p&gt;

&lt;p&gt;Esses exercícios espelham o que contribuidores de sprint fazem — não provas, mas prática de navegação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Para quem é o curso?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desenvolvedores Delphi&lt;/strong&gt; curiosos por que código se comporta diferente no CrabPascal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desenvolvedores Rust&lt;/strong&gt; querendo codebase de compilador grande e legível&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estudantes de CC&lt;/strong&gt; pós-dragon book que precisam de case study mantido&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contribuidores&lt;/strong&gt; se preparando para sprints RTL, parser ou codegen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nível intermediário assumido: leia Pascal e sintaxe Rust básica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conexão com série de auditoria
&lt;/h2&gt;

&lt;p&gt;Posts 050–054 documentaram débito técnico honestamente. O curso não esconde gaps — mostra &lt;strong&gt;onde&lt;/strong&gt; no pipeline cada feature vive para você corrigir TD-IDs com contexto. Aprender e contribuir convergem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ordem de leitura sugerida
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;getting-started/quickstart&lt;/code&gt; — rode hello world&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resources/curso-compiladores-crabpascal&lt;/code&gt; — curso completo&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;architecture/technical/arquitetura-design&lt;/code&gt; — decisões de design&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;009-compiler-pipeline-five-phases&lt;/code&gt; (blog Parte 1) — visão do pipeline&lt;/li&gt;
&lt;li&gt;Escolha um sprint review alinhado ao seu interesse (generics, exceptions, strings)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Educação em compiladores não exige começar do zero. CrabPascal oferece laboratório bilíngue, aberto e documentado por sprint. Faça o curso, depois claim um item do backlog — fixture de parser, shim RTL ou teste de paridade. Assim se formam engenheiros de compiladores em 2026.&lt;/p&gt;

&lt;p&gt;Próximo: &lt;em&gt;Mapeando a Bíblia Delphi no CrabPascal&lt;/em&gt; (&lt;code&gt;056-delphi-bible-analysis&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>compiler</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Audit Deep Dive: IDE, CI, and Docs | Auditoria: IDE, CI e documentação</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 15:15:20 +0000</pubDate>
      <link>https://dev.to/crabpascal/audit-deep-dive-ide-ci-and-docs-auditoria-ide-ci-e-documentacao-4peh</link>
      <guid>https://dev.to/crabpascal/audit-deep-dive-ide-ci-and-docs-auditoria-ide-ci-e-documentacao-4peh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Audit Deep Dive: IDE, CI, and Docs
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2:&lt;/strong&gt; Previous: &lt;em&gt;Audit Deep Dive: Tests and Harness&lt;/em&gt; (&lt;code&gt;053-audit-tests-harness&lt;/code&gt;). Report: &lt;code&gt;technical-debt/audit/05-rafael-ide-ci-docs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Rafael's audit closes the five-part technical review with the surfaces users touch daily: &lt;strong&gt;VS Code/Cursor extension&lt;/strong&gt;, &lt;strong&gt;CI harness&lt;/strong&gt;, and &lt;strong&gt;documentation governance&lt;/strong&gt;. Compiler internals can be brilliant; if Problems panel stays empty and docs claim v2.8.0, adoption stalls.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Rafael audited
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vscode-extension/extension.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Problem matcher declarations vs actual diagnostic parsing&lt;/li&gt;
&lt;li&gt;Version drift between docs, extension, and test README&lt;/li&gt;
&lt;li&gt;CI fragility overlapping Marina's HTTP harness findings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full details: &lt;code&gt;technical-debt/audit/05-rafael-ide-ci-docs&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-IDE-001 — Problems panel not populated (P1)
&lt;/h2&gt;

&lt;p&gt;The extension runs &lt;code&gt;crab-pascal check&lt;/code&gt; but leaves a TODO at lines 185–190: parse stdout and show problems. Today it &lt;strong&gt;&lt;code&gt;console.log&lt;/code&gt;s output&lt;/strong&gt; — useful for developers with DevTools open, invisible for everyone else.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;package.json&lt;/code&gt; declares &lt;code&gt;problemMatchers&lt;/code&gt; with regex for &lt;code&gt;file:line:col: severity message&lt;/code&gt;, yet no &lt;code&gt;DiagnosticCollection&lt;/code&gt; integration was found in extension code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Users miss structured errors in-editor. The IDE feels broken compared to Delphi or Rust analyzer UX.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target:&lt;/strong&gt; Sprint 16 (v2.24.0) — Rafael + Marina acceptance test: failing &lt;code&gt;check&lt;/code&gt; must appear in Problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-IDE-002 — Extension "build" calls build-exe (P1)
&lt;/h2&gt;

&lt;p&gt;Commands &lt;code&gt;crabpascal.build&lt;/code&gt; and &lt;code&gt;crabpascal.compile&lt;/code&gt; map to &lt;strong&gt;&lt;code&gt;build-exe&lt;/code&gt;&lt;/strong&gt;, not &lt;code&gt;build&lt;/code&gt;. Users clicking "Build" never exercise the C codegen path the CLI documents as &lt;code&gt;build&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Parity gaps between &lt;code&gt;run&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt;, and &lt;code&gt;build-exe&lt;/code&gt; stay hidden. Extension users assume native build parity that CI never validates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Align command mapping; add CI step calling &lt;code&gt;crab-pascal build&lt;/code&gt; directly (Sprint 10/S16).&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-IDE-003 — Problem matcher without parser bridge (P2)
&lt;/h2&gt;

&lt;p&gt;Manifest regex exists; extension does not transform compiler output into VS Code diagnostic objects. Even when stdout contains valid spans (post-Sprint 1), UI integration fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-CI-001 — HTTP-dependent example harness (P1)
&lt;/h2&gt;

&lt;p&gt;Same root cause as TD-TEST-002: &lt;code&gt;test_exemplos_completo.ps1&lt;/code&gt; requires live Horse server on port 9001. Rafael's audit frames this as &lt;strong&gt;governance&lt;/strong&gt; — release gates should not depend on localhost timing.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-DOCS-001 — Test docs version drift (P3)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;tests/README.md&lt;/code&gt; header still says v2.8.0. Stakeholders reading docs get a false baseline; overlaps Marina's TD-TEST-004.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer experience today
&lt;/h2&gt;

&lt;p&gt;What works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;contributes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tasks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;problemMatcher&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;schema&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"problemMatchers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"owner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crabpascal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"pattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// extension.js — check runs, but diagnostics don't reach UI yet&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runCrabPascal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;check&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fsPath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// TODO: Parse e mostre problemas&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What users expect after Sprint 1 diagnostics investment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;.pas&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Save triggers &lt;code&gt;check&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Red squiggles on exact line/column&lt;/li&gt;
&lt;li&gt;Problems panel lists all issues&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We are between steps 2 and 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  CI governance recommendations
&lt;/h2&gt;

&lt;p&gt;Rafael's audit reinforces squad rules from &lt;code&gt;roadmap/squad&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No release tag without acceptance tests passing&lt;/li&gt;
&lt;li&gt;Harness flakes get &lt;code&gt;skip&lt;/code&gt; + issue, not ignored red builds&lt;/li&gt;
&lt;li&gt;Extension version bumps track binary &lt;code&gt;Cargo.toml&lt;/code&gt; version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suggested pipeline layers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Runs&lt;/th&gt;
&lt;th&gt;Environment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cargo test&lt;/code&gt;, &lt;code&gt;crab-pascal check&lt;/code&gt; fixtures&lt;/td&gt;
&lt;td&gt;Every PR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parity&lt;/td&gt;
&lt;td&gt;&lt;code&gt;run_build_parity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Agents with GCC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;Horse HTTP harness&lt;/td&gt;
&lt;td&gt;Manual / nightly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Mintlify cross-links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;usage/integracao-ide-completa-v2-0-0&lt;/code&gt; — target IDE feature set&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;usage/guia-integracao-vscode-cursor&lt;/code&gt; — setup guide&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit-overview&lt;/code&gt; — full P0/P1 matrix&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;roadmap/squad&lt;/code&gt; — Rafael's squad lead responsibilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaway for users
&lt;/h2&gt;

&lt;p&gt;Install the extension for command palette integration and optional auto-install of &lt;code&gt;crab-pascal.exe&lt;/code&gt;. Until Sprint 16 lands, &lt;strong&gt;run &lt;code&gt;check&lt;/code&gt; in terminal&lt;/strong&gt; for reliable diagnostics with real spans. Do not assume Problems panel parity with Delphi yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway for contributors
&lt;/h2&gt;

&lt;p&gt;IDE and docs debt is highly visible — fixes improve every user immediately. Pick TD-IDE-001 with a small PR wiring &lt;code&gt;vscode.Diagnostic&lt;/code&gt; from existing &lt;code&gt;check&lt;/code&gt; JSON or regex output.&lt;/p&gt;

&lt;p&gt;Next: &lt;em&gt;Learn Compilers Using CrabPascal&lt;/em&gt; (&lt;code&gt;055-compiler-course-with-crabpascal&lt;/code&gt;) — shifting from audit to education.&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Auditoria: IDE, CI e documentação
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2:&lt;/strong&gt; Anterior: &lt;em&gt;Auditoria: testes e harness&lt;/em&gt; (&lt;code&gt;053-audit-tests-harness&lt;/code&gt;). Relatório: &lt;code&gt;technical-debt/audit/05-rafael-ide-ci-docs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A auditoria do Rafael fecha a revisão técnica em cinco partes com as superfícies que usuários tocam diariamente: &lt;strong&gt;extensão VS Code/Cursor&lt;/strong&gt;, &lt;strong&gt;harness de CI&lt;/strong&gt; e &lt;strong&gt;governança de documentação&lt;/strong&gt;. Internals brilhantes não adiantam se o painel Problems fica vazio e docs claimam v2.8.0 — adoção trava.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que o Rafael auditou
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vscode-extension/extension.js&lt;/code&gt; e &lt;code&gt;package.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Declarações de problem matcher vs parsing real de diagnósticos&lt;/li&gt;
&lt;li&gt;Drift de versão entre docs, extensão e README de testes&lt;/li&gt;
&lt;li&gt;Fragilidade de CI sobrepondo achados HTTP da Marina&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Detalhes completos: &lt;code&gt;technical-debt/audit/05-rafael-ide-ci-docs&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-IDE-001 — Painel Problems não populado (P1)
&lt;/h2&gt;

&lt;p&gt;A extensão roda &lt;code&gt;crab-pascal check&lt;/code&gt; mas deixa TODO nas linhas 185–190: parsear stdout e mostrar problemas. Hoje faz &lt;strong&gt;&lt;code&gt;console.log&lt;/code&gt; da saída&lt;/strong&gt; — útil para quem abre DevTools, invisível para o resto.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;package.json&lt;/code&gt; declara &lt;code&gt;problemMatchers&lt;/code&gt; com regex para &lt;code&gt;file:line:col: severity message&lt;/code&gt;, porém nenhuma integração com &lt;code&gt;DiagnosticCollection&lt;/code&gt; foi encontrada no código da extensão.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Usuários perdem erros estruturados no editor. A IDE parece quebrada comparada a Delphi ou Rust analyzer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alvo:&lt;/strong&gt; Sprint 16 (v2.24.0) — teste de aceitação Rafael + Marina: &lt;code&gt;check&lt;/code&gt; falhando deve aparecer em Problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-IDE-002 — "Build" da extensão chama build-exe (P1)
&lt;/h2&gt;

&lt;p&gt;Comandos &lt;code&gt;crabpascal.build&lt;/code&gt; e &lt;code&gt;crabpascal.compile&lt;/code&gt; mapeiam para &lt;strong&gt;&lt;code&gt;build-exe&lt;/code&gt;&lt;/strong&gt;, não &lt;code&gt;build&lt;/code&gt;. Usuários clicando "Build" nunca exercitam o caminho de codegen C que a CLI documenta como &lt;code&gt;build&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Gaps de paridade entre &lt;code&gt;run&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt; e &lt;code&gt;build-exe&lt;/code&gt; ficam escondidos. Usuários da extensão assumem paridade de build nativo que o CI nunca valida.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correção:&lt;/strong&gt; Alinhar mapeamento de comandos; adicionar passo de CI chamando &lt;code&gt;crab-pascal build&lt;/code&gt; diretamente (Sprint 10/S16).&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-IDE-003 — Problem matcher sem ponte de parser (P2)
&lt;/h2&gt;

&lt;p&gt;Regex no manifest existe; extensão não transforma saída do compilador em objetos &lt;code&gt;Diagnostic&lt;/code&gt; do VS Code. Mesmo com stdout contendo spans válidos (pós-Sprint 1), integração na UI falha.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-CI-001 — Harness de exemplos dependente de HTTP (P1)
&lt;/h2&gt;

&lt;p&gt;Mesma causa raiz de TD-TEST-002: &lt;code&gt;test_exemplos_completo.ps1&lt;/code&gt; exige servidor Horse ao vivo na porta 9001. A auditoria do Rafael enquadra como &lt;strong&gt;governança&lt;/strong&gt; — gates de release não devem depender de timing em localhost.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-DOCS-001 — Drift de versão em docs de testes (P3)
&lt;/h2&gt;

&lt;p&gt;Cabeçalho de &lt;code&gt;tests/README.md&lt;/code&gt; ainda diz v2.8.0. Stakeholders lendo docs recebem baseline falso; sobrepõe TD-TEST-004 da Marina.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experiência do desenvolvedor hoje
&lt;/h2&gt;

&lt;p&gt;O que funciona:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;contribui&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tasks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;schema&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;de&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;problemMatcher&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"problemMatchers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"owner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crabpascal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"pattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// extension.js — check roda, mas diagnósticos não chegam na UI&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runCrabPascal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;check&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fsPath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// TODO: Parse e mostre problemas&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que usuários esperam após investimento Sprint 1 em diagnósticos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abrir arquivo &lt;code&gt;.pas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Save dispara &lt;code&gt;check&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Squiggles vermelhos na linha/coluna exata&lt;/li&gt;
&lt;li&gt;Painel Problems lista todos os issues&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Estamos entre os passos 2 e 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recomendações de governança CI
&lt;/h2&gt;

&lt;p&gt;A auditoria do Rafael reforça regras da squad em &lt;code&gt;roadmap/squad&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sem tag de release sem testes de aceitação passando&lt;/li&gt;
&lt;li&gt;Flakes de harness ganham &lt;code&gt;skip&lt;/code&gt; + issue, não builds vermelhos ignorados&lt;/li&gt;
&lt;li&gt;Bumps de versão da extensão acompanham versão binária em &lt;code&gt;Cargo.toml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Camadas sugeridas de pipeline:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camada&lt;/th&gt;
&lt;th&gt;Roda&lt;/th&gt;
&lt;th&gt;Ambiente&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rápida&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cargo test&lt;/code&gt;, &lt;code&gt;crab-pascal check&lt;/code&gt; fixtures&lt;/td&gt;
&lt;td&gt;Todo PR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paridade&lt;/td&gt;
&lt;td&gt;&lt;code&gt;run_build_parity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Agents com GCC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integração&lt;/td&gt;
&lt;td&gt;Harness HTTP Horse&lt;/td&gt;
&lt;td&gt;Manual / nightly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Cross-links Mintlify
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;usage/integracao-ide-completa-v2-0-0&lt;/code&gt; — feature set alvo da IDE&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;usage/guia-integracao-vscode-cursor&lt;/code&gt; — guia de setup&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit-overview&lt;/code&gt; — matriz P0/P1 completa&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;roadmap/squad&lt;/code&gt; — responsabilidades do Rafael como squad lead&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão para usuários
&lt;/h2&gt;

&lt;p&gt;Instale a extensão para palette de comandos e auto-instalação opcional de &lt;code&gt;crab-pascal.exe&lt;/code&gt;. Até Sprint 16, &lt;strong&gt;rode &lt;code&gt;check&lt;/code&gt; no terminal&lt;/strong&gt; para diagnósticos confiáveis com spans reais. Não assuma paridade do painel Problems com Delphi ainda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão para contribuidores
&lt;/h2&gt;

&lt;p&gt;Débito de IDE e docs é altamente visível — correções melhoram todo usuário imediatamente. Pegue TD-IDE-001 com PR pequeno ligando &lt;code&gt;vscode.Diagnostic&lt;/code&gt; à saída JSON ou regex existente do &lt;code&gt;check&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Próximo: &lt;em&gt;Aprenda compiladores com CrabPascal&lt;/em&gt; (&lt;code&gt;055-compiler-course-with-crabpascal&lt;/code&gt;) — da auditoria para educação.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>vscode</category>
      <category>documentation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Audit Deep Dive: Tests and Harness | Auditoria: testes e harness</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 15:00:25 +0000</pubDate>
      <link>https://dev.to/crabpascal/audit-deep-dive-tests-and-harness-auditoria-testes-e-harness-c66</link>
      <guid>https://dev.to/crabpascal/audit-deep-dive-tests-and-harness-auditoria-testes-e-harness-c66</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Audit Deep Dive: Tests and Harness
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2:&lt;/strong&gt; Previous: &lt;em&gt;Audit Deep Dive: RTL, Unicode, Properties&lt;/em&gt; (&lt;code&gt;052-audit-rtl-unicode-properties&lt;/code&gt;). Report: &lt;code&gt;technical-debt/audit/04-marina-tests-harness&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Marina's audit asks a blunt question: &lt;strong&gt;do our tests tell the truth?&lt;/strong&gt; A compiler can pass &lt;code&gt;cargo test&lt;/code&gt; while hiding run/build divergence, flaky Horse harnesses, and outdated README claims. For CrabPascal's sprint-driven roadmap, QA is not a checkbox — it is the contract that each release actually works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope of the audit
&lt;/h2&gt;

&lt;p&gt;Marina reviewed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rust test suites under &lt;code&gt;tests/*.rs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Pascal fixtures in &lt;code&gt;tests/fixtures/*.pas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Example harness scripts, especially &lt;code&gt;tests/test_exemplos_completo.ps1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Baseline health via &lt;code&gt;cargo test&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full evidence table is in Mintlify at &lt;code&gt;technical-debt/audit/04-marina-tests-harness&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-TEST-001 — No run vs build parity tests (P1)
&lt;/h2&gt;

&lt;p&gt;Most integration tests invoke &lt;strong&gt;&lt;code&gt;run&lt;/code&gt;&lt;/strong&gt;, not &lt;strong&gt;&lt;code&gt;build&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;build-exe&lt;/code&gt;&lt;/strong&gt;. Example: &lt;code&gt;tests/properties_runtime.rs&lt;/code&gt; uses &lt;code&gt;.arg("run")&lt;/code&gt; exclusively. The same pattern appears in &lt;code&gt;string_conformance.rs&lt;/code&gt;, &lt;code&gt;unicode_conformance.rs&lt;/code&gt;, and related suites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Codegen regressions — incomplete properties, fake exception stubs (pre-v2.21.0), wrong string helpers — would not fail CI. Developers trust green builds that only exercise the interpreter path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix direction:&lt;/strong&gt; Sprint 10 (v2.18.0) introduced &lt;code&gt;run_build_parity&lt;/code&gt; gates where GCC exists. The audit confirms we need this pattern everywhere parity matters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Today: most fixtures only do this&lt;/span&gt;
crab-pascal run tests/fixtures/properties_runtime.pas

&lt;span class="c"&gt;# Needed: explicit build parity where toolchain available&lt;/span&gt;
crab-pascal build-exe tests/fixtures/properties_runtime.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  TD-TEST-002 — Horse harness depends on live HTTP (P1)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;tests/test_exemplos_completo.ps1&lt;/code&gt; starts background jobs running CrabPascal servers, then calls &lt;code&gt;Invoke-WebRequest&lt;/code&gt; against &lt;code&gt;http://localhost:9001/api/...&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; CI fails offline. Timing flakes when the server is slow to bind. Reproducing failures requires Windows, PowerShell, and a free port.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix direction:&lt;/strong&gt; Offline smoke tests, mock endpoints, or explicit &lt;code&gt;skip&lt;/code&gt; with reason when HTTP is unavailable — targeted for Sprint 16.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-TEST-003 — Baseline cargo test not fully green (P2)
&lt;/h2&gt;

&lt;p&gt;A unit test in &lt;code&gt;src/semantic/mod.rs&lt;/code&gt; (&lt;code&gt;test_undefined_variable&lt;/code&gt;) expects error messages containing &lt;code&gt;"Undefined variable"&lt;/code&gt;. The actual diagnostic text drifted, breaking the assert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; When baseline tests fail for message wording, teams ignore CI noise — and real regressions slip through.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix direction:&lt;/strong&gt; Sprint 9 (v2.17.0) alignment — either update the expected string or standardize semantic error formatting.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-TEST-004 — tests/README.md version drift (P3)
&lt;/h2&gt;

&lt;p&gt;The tests README still references &lt;strong&gt;CrabPascal v2.8.0&lt;/strong&gt; coverage claims. Post-v2.16.0 reality includes dozens of new fixtures, sprint gates, and parity tests not reflected there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Contributors and stakeholders assume coverage that no longer matches the tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  How tests run today (evidence snapshot)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Suite&lt;/th&gt;
&lt;th&gt;Command used&lt;/th&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;properties_runtime.rs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No build comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;string_conformance.rs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;C stubs untested in CI without gcc gate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test_exemplos_completo.ps1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;run + HTTP&lt;/td&gt;
&lt;td&gt;Fragile in headless CI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No existing suite was found calling &lt;code&gt;crab-pascal build&lt;/code&gt; as a first-class CI step outside optional parity gates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommended test philosophy
&lt;/h2&gt;

&lt;p&gt;Marina's audit aligns with the squad principle in &lt;code&gt;roadmap/squad&lt;/code&gt;: &lt;strong&gt;a test must fail if behavior regresses&lt;/strong&gt;. That means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Parity tests&lt;/strong&gt; where &lt;code&gt;run&lt;/code&gt; and &lt;code&gt;build-exe&lt;/code&gt; should match — skip with explicit reason when GCC is absent, never fake success.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal fixtures&lt;/strong&gt; — one &lt;code&gt;.pas&lt;/code&gt; file per bug, checked into &lt;code&gt;tests/fixtures/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Harness isolation&lt;/strong&gt; — Horse demos get offline smoke; full HTTP integration runs manually or in a dedicated pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Living docs&lt;/strong&gt; — update &lt;code&gt;tests/README.md&lt;/code&gt; when sprint acceptance criteria change.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Contributor quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;test&lt;/span&gt;                          &lt;span class="c"&gt;# Rust unit + integration&lt;/span&gt;
crab-pascal check examples/crud/crud.dpr
crab-pascal run tests/fixtures/your_new_fixture.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adding a test? Link the PR to a TD-ID (e.g. TD-TEST-001) and the sprint that owns it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mintlify reading path
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit-overview&lt;/code&gt; — consolidated risk matrix&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit/04-marina-tests-harness&lt;/code&gt; — Marina's full report&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;roadmap/sprints/sprint-10-review&lt;/code&gt; — string parity gates&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/README.md&lt;/code&gt; — local harness docs (needs refresh per TD-TEST-004)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Green tests that only exercise &lt;code&gt;run&lt;/code&gt; create false confidence in native build paths. Marina's audit turns that into actionable backlog items with owners and recommended fixtures. Honest QA is what makes sprint releases trustworthy.&lt;/p&gt;

&lt;p&gt;Next: &lt;em&gt;Audit Deep Dive: IDE, CI, and Docs&lt;/em&gt; (&lt;code&gt;054-audit-ide-ci-docs&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Auditoria: testes e harness
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2:&lt;/strong&gt; Anterior: &lt;em&gt;Auditoria: RTL, Unicode, properties&lt;/em&gt; (&lt;code&gt;052-audit-rtl-unicode-properties&lt;/code&gt;). Relatório: &lt;code&gt;technical-debt/audit/04-marina-tests-harness&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A auditoria da Marina faz uma pergunta direta: &lt;strong&gt;nossos testes dizem a verdade?&lt;/strong&gt; Um compilador pode passar &lt;code&gt;cargo test&lt;/code&gt; enquanto esconde divergência run/build, harness Horse instável e claims desatualizados no README. Para o roadmap por sprints do CrabPascal, QA não é checkbox — é o contrato de que cada release realmente funciona.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escopo da auditoria
&lt;/h2&gt;

&lt;p&gt;A Marina revisou:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suítes Rust em &lt;code&gt;tests/*.rs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fixtures Pascal em &lt;code&gt;tests/fixtures/*.pas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Scripts de harness de exemplos, especialmente &lt;code&gt;tests/test_exemplos_completo.ps1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Saúde do baseline via &lt;code&gt;cargo test&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A tabela completa de evidências está no Mintlify em &lt;code&gt;technical-debt/audit/04-marina-tests-harness&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-TEST-001 — Sem testes de paridade run vs build (P1)
&lt;/h2&gt;

&lt;p&gt;A maioria dos testes de integração invoca &lt;strong&gt;&lt;code&gt;run&lt;/code&gt;&lt;/strong&gt;, não &lt;strong&gt;&lt;code&gt;build&lt;/code&gt;&lt;/strong&gt; ou &lt;strong&gt;&lt;code&gt;build-exe&lt;/code&gt;&lt;/strong&gt;. Exemplo: &lt;code&gt;tests/properties_runtime.rs&lt;/code&gt; usa &lt;code&gt;.arg("run")&lt;/code&gt; exclusivamente. O mesmo padrão aparece em &lt;code&gt;string_conformance.rs&lt;/code&gt;, &lt;code&gt;unicode_conformance.rs&lt;/code&gt; e suítes relacionadas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Regressões de codegen — properties incompletas, stubs falsos de exception (pré-v2.21.0), helpers de string errados — não falhariam no CI. Desenvolvedores confiam em builds verdes que só exercitam o interpretador.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direção de correção:&lt;/strong&gt; Sprint 10 (v2.18.0) introduziu gates &lt;code&gt;run_build_parity&lt;/code&gt; onde GCC existe. A auditoria confirma que precisamos desse padrão onde paridade importa.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Hoje: a maioria dos fixtures só faz isso&lt;/span&gt;
crab-pascal run tests/fixtures/properties_runtime.pas

&lt;span class="c"&gt;# Necessário: paridade build explícita quando toolchain disponível&lt;/span&gt;
crab-pascal build-exe tests/fixtures/properties_runtime.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  TD-TEST-002 — Harness Horse depende de HTTP ao vivo (P1)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;tests/test_exemplos_completo.ps1&lt;/code&gt; inicia jobs em background rodando servidores CrabPascal, depois chama &lt;code&gt;Invoke-WebRequest&lt;/code&gt; em &lt;code&gt;http://localhost:9001/api/...&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; CI falha offline. Flakes de timing quando o servidor demora a bindar. Reproduzir falhas exige Windows, PowerShell e porta livre.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direção de correção:&lt;/strong&gt; Smoke offline, endpoints mock ou &lt;code&gt;skip&lt;/code&gt; explícito com razão quando HTTP indisponível — alvo Sprint 16.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-TEST-003 — Baseline cargo test não 100% verde (P2)
&lt;/h2&gt;

&lt;p&gt;Teste unitário em &lt;code&gt;src/semantic/mod.rs&lt;/code&gt; (&lt;code&gt;test_undefined_variable&lt;/code&gt;) espera mensagens contendo &lt;code&gt;"Undefined variable"&lt;/code&gt;. O texto real do diagnóstico derivou, quebrando o assert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Quando testes de baseline falham por wording, times ignoram ruído no CI — e regressões reais passam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direção de correção:&lt;/strong&gt; Alinhamento Sprint 9 (v2.17.0) — atualizar string esperada ou padronizar formatação de erros semânticos.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-TEST-004 — Drift de versão em tests/README.md (P3)
&lt;/h2&gt;

&lt;p&gt;O README de testes ainda referencia cobertura &lt;strong&gt;CrabPascal v2.8.0&lt;/strong&gt;. A realidade pós-v2.16.0 inclui dezenas de fixtures novos, gates de sprint e testes de paridade não refletidos lá.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Contribuidores e stakeholders assumem cobertura que não corresponde mais à árvore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como os testes rodam hoje (snapshot)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Suíte&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;properties_runtime.rs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sem comparação build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;string_conformance.rs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stubs C não testados no CI sem gate gcc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test_exemplos_completo.ps1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;run + HTTP&lt;/td&gt;
&lt;td&gt;Frágil em CI headless&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nenhuma suíte existente foi encontrada chamando &lt;code&gt;crab-pascal build&lt;/code&gt; como passo de CI de primeira classe fora de gates opcionais de paridade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Filosofia de testes recomendada
&lt;/h2&gt;

&lt;p&gt;A auditoria da Marina alinha com o princípio da squad em &lt;code&gt;roadmap/squad&lt;/code&gt;: &lt;strong&gt;teste deve falhar se comportamento regredir&lt;/strong&gt;. Isso significa:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Testes de paridade&lt;/strong&gt; onde &lt;code&gt;run&lt;/code&gt; e &lt;code&gt;build-exe&lt;/code&gt; devem coincidir — skip com razão explícita sem GCC, nunca sucesso falso.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixtures mínimos&lt;/strong&gt; — um &lt;code&gt;.pas&lt;/code&gt; por bug, versionado em &lt;code&gt;tests/fixtures/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolamento de harness&lt;/strong&gt; — demos Horse ganham smoke offline; integração HTTP completa roda manual ou em pipeline dedicado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs vivos&lt;/strong&gt; — atualizar &lt;code&gt;tests/README.md&lt;/code&gt; quando critérios de aceitação de sprint mudarem.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Quick start para contribuidores
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;test&lt;/span&gt;                          &lt;span class="c"&gt;# unit + integração Rust&lt;/span&gt;
crab-pascal check examples/crud/crud.dpr
crab-pascal run tests/fixtures/seu_novo_fixture.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adicionando teste? Ligue o PR a um TD-ID (ex.: TD-TEST-001) e ao sprint dono.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trilha de leitura Mintlify
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit-overview&lt;/code&gt; — matriz de risco consolidada&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit/04-marina-tests-harness&lt;/code&gt; — relatório completo da Marina&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;roadmap/sprints/sprint-10-review&lt;/code&gt; — gates de paridade de strings&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/README.md&lt;/code&gt; — docs locais de harness (precisa refresh por TD-TEST-004)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Testes verdes que só exercitam &lt;code&gt;run&lt;/code&gt; criam falsa confiança em caminhos de build nativo. A auditoria da Marina transforma isso em itens de backlog acionáveis com donos e fixtures recomendados. QA honesto é o que torna releases por sprint confiáveis.&lt;/p&gt;

&lt;p&gt;Próximo: &lt;em&gt;Auditoria: IDE, CI e documentação&lt;/em&gt; (&lt;code&gt;054-audit-ide-ci-docs&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>testing</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>Audit Deep Dive: RTL, Unicode, Properties | Auditoria: RTL, Unicode, properties</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 14:45:23 +0000</pubDate>
      <link>https://dev.to/crabpascal/audit-deep-dive-rtl-unicode-properties-auditoria-rtl-unicode-properties-4ieo</link>
      <guid>https://dev.to/crabpascal/audit-deep-dive-rtl-unicode-properties-auditoria-rtl-unicode-properties-4ieo</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Audit Deep Dive: RTL, Unicode, Properties
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Series — Part 2 (Mintlify docs tour):&lt;/strong&gt; Previous post: &lt;em&gt;Audit Deep Dive: Parser, AST, Semantic&lt;/em&gt; (&lt;code&gt;051-audit-parser-ast-semantic&lt;/code&gt;). Full audit index: &lt;code&gt;technical-debt/audit-overview&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Helena's audit covers the layer where Delphi semantics meet CrabPascal's runtime: &lt;strong&gt;Unicode strings&lt;/strong&gt;, &lt;strong&gt;OO properties&lt;/strong&gt;, and &lt;strong&gt;RTL shims&lt;/strong&gt;. These are not cosmetic gaps — they determine whether real Delphi libraries compile, run, and behave predictably. The detailed report lives at &lt;code&gt;technical-debt/audit/03-helena-rtl-unicode-properties&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Helena audited
&lt;/h2&gt;

&lt;p&gt;The review traced four interconnected surfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unicode and strings&lt;/strong&gt; — &lt;code&gt;src/pascal_strings.rs&lt;/code&gt;, &lt;code&gt;src/stubs.c&lt;/code&gt;, and how &lt;code&gt;Value::String&lt;/code&gt; flows through &lt;code&gt;src/complete_runtime.rs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Properties&lt;/strong&gt; — &lt;code&gt;read_object_property&lt;/code&gt; / &lt;code&gt;write_object_property&lt;/code&gt;, backing fields, and method-based accessors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RTL shims&lt;/strong&gt; — especially &lt;code&gt;rtl/sys/System.Generics.Collections.pas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime defaults&lt;/strong&gt; — places where the interpreter returns placeholders instead of failing loudly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This sits downstream of Bruno's parser/semantic audit. Parser correctness means nothing if property getters silently fall back to built-ins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Confirmed debt items
&lt;/h2&gt;

&lt;h3&gt;
  
  
  TD-UNICODE-001 — UTF-16 semantics without full wide buffers (P1)
&lt;/h3&gt;

&lt;p&gt;Delphi &lt;code&gt;string&lt;/code&gt; is UTF-16 with 1-based indexing. CrabPascal documents UTF-16 code units in &lt;code&gt;pascal_strings.rs&lt;/code&gt;, but &lt;code&gt;Value::String&lt;/code&gt; wraps Rust &lt;code&gt;String&lt;/code&gt; (UTF-8). Stubs like &lt;code&gt;pascal_strlen_utf16&lt;/code&gt; exist in &lt;code&gt;stubs.c&lt;/code&gt;, yet &lt;code&gt;PChar&lt;/code&gt;, &lt;code&gt;WideChar&lt;/code&gt;, &lt;code&gt;TEncoding&lt;/code&gt;, and wide IO are still missing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; String-heavy code with emoji, combining characters, or interop with external APIs may diverge between &lt;code&gt;run&lt;/code&gt; and future native builds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested sprint:&lt;/strong&gt; S14 (IO/encoding) or follow-up Unicode work.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-RTL-IO-001 — IO and encoding RTL absent (P1)
&lt;/h3&gt;

&lt;p&gt;Horse examples reference &lt;code&gt;TFileStream.Create&lt;/code&gt; and file content streams. A search for &lt;code&gt;System.IOUtils&lt;/code&gt;, &lt;code&gt;TEncoding&lt;/code&gt;, and &lt;code&gt;TFileStream&lt;/code&gt; shims under &lt;code&gt;rtl/&lt;/code&gt; found no matching units — blocking real file workflows.&lt;/p&gt;

&lt;p&gt;Sprint 14 (v2.22.0) added a minimal &lt;code&gt;System.IOUtils&lt;/code&gt; surface; the audit confirms how critical this area is for production adoption.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-PROPERTIES-001 — Accessors can fail silently (P1)
&lt;/h3&gt;

&lt;p&gt;When a property declares &lt;code&gt;read GetValue&lt;/code&gt; but &lt;code&gt;GetValue&lt;/code&gt; is missing or has no body, &lt;code&gt;execute_function&lt;/code&gt; may fall through to &lt;code&gt;simulate_function_execution&lt;/code&gt; — returning a built-in default instead of a deterministic error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Debugging OOP code becomes a guessing game. You think a getter ran; the runtime substituted a placeholder.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-PROPERTIES-002 — Codegen properties ≠ runtime properties (P0)
&lt;/h3&gt;

&lt;p&gt;In &lt;code&gt;src/codegen/mod.rs&lt;/code&gt;, property declarations generate backing fields and &lt;strong&gt;comments&lt;/strong&gt; for accessors — not executable getter/setter functions. &lt;code&gt;run&lt;/code&gt; executes properties correctly; &lt;code&gt;build-exe&lt;/code&gt; does not.&lt;/p&gt;

&lt;p&gt;This is the same class of parity gap Lucas flagged in the backend audit. Helena kept it here for OO traceability.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-GENERICS-001 — Collections without enumerators (P2)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;System.Generics.Collections&lt;/code&gt; shims expose &lt;code&gt;Add&lt;/code&gt;, &lt;code&gt;Get&lt;/code&gt;, &lt;code&gt;Count&lt;/code&gt;, &lt;code&gt;Delete&lt;/code&gt;, &lt;code&gt;Clear&lt;/code&gt;, and dictionary lookups — but no enumerator interfaces. &lt;code&gt;for item in List do&lt;/code&gt; lacks RTL foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-RUNTIME-DEFAULT-002 — Record access returns zero on error (P1)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;evaluate_record_access&lt;/code&gt; returns &lt;code&gt;Ok(Value::Integer(0))&lt;/code&gt; for unexpected types instead of propagating an error — masking missing fields and metadata bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coherence observations
&lt;/h2&gt;

&lt;p&gt;Properties &lt;strong&gt;do work&lt;/strong&gt; in the runtime when accessors exist and are implemented. The weakness is twofold: silent fallbacks when they are not, and codegen that never emits real accessor functions.&lt;/p&gt;

&lt;p&gt;Unicode is partially modeled — enough for many tutorials, not enough for Delphi parity on IO and pointer types.&lt;/p&gt;

&lt;h2&gt;
  
  
  What contributors can do now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add a failing fixture&lt;/strong&gt; for silent property fallback — property with missing &lt;code&gt;GetValue&lt;/code&gt; must error in &lt;code&gt;check&lt;/code&gt; and &lt;code&gt;run&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expand RTL shims&lt;/strong&gt; — pick one missing IO type (&lt;code&gt;TFileStream&lt;/code&gt;, &lt;code&gt;TEncoding&lt;/code&gt;) and wire shim + intrinsic + test.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unicode fixtures&lt;/strong&gt; — characters outside BMP in &lt;code&gt;Length&lt;/code&gt;, &lt;code&gt;Copy&lt;/code&gt;, &lt;code&gt;Pos&lt;/code&gt;; compare &lt;code&gt;run&lt;/code&gt; output against documented Delphi behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track TD IDs&lt;/strong&gt; in PR descriptions so the backlog in &lt;code&gt;technical-debt/backlog&lt;/code&gt; stays honest.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Reading order in Mintlify
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit-overview&lt;/code&gt; — executive summary and risk matrix&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit/03-helena-rtl-unicode-properties&lt;/code&gt; — Helena's full table&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;roadmap/sprints/sprint-14-review&lt;/code&gt; — IOUtils delivery context&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;essentials/project-status&lt;/code&gt; — current v2.22.0 snapshot&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;RTL, Unicode, and properties are where Delphi developers feel compatibility. Helena's audit does not say "give up" — it maps exactly which surprises remain and which sprints should close them. Prefer &lt;strong&gt;&lt;code&gt;run&lt;/code&gt;&lt;/strong&gt; for OOP with method properties and exceptions until codegen parity catches up.&lt;/p&gt;

&lt;p&gt;Next in series: &lt;em&gt;Audit Deep Dive: Tests and Harness&lt;/em&gt; (&lt;code&gt;053-audit-tests-harness&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Auditoria: RTL, Unicode, properties
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Série — Parte 2 (tour Mintlify):&lt;/strong&gt; Post anterior: &lt;em&gt;Auditoria: parser, AST, semântica&lt;/em&gt; (&lt;code&gt;051-audit-parser-ast-semantic&lt;/code&gt;). Índice completo: &lt;code&gt;technical-debt/audit-overview&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A auditoria da Helena cobre a camada onde a semântica Delphi encontra o runtime do CrabPascal: &lt;strong&gt;strings Unicode&lt;/strong&gt;, &lt;strong&gt;properties OO&lt;/strong&gt; e &lt;strong&gt;shims RTL&lt;/strong&gt;. Não são gaps cosméticos — definem se bibliotecas Delphi reais compilam, rodam e se comportam de forma previsível. O relatório detalhado está em &lt;code&gt;technical-debt/audit/03-helena-rtl-unicode-properties&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que a Helena auditou
&lt;/h2&gt;

&lt;p&gt;A revisão rastreou quatro superfícies interligadas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unicode e strings&lt;/strong&gt; — &lt;code&gt;src/pascal_strings.rs&lt;/code&gt;, &lt;code&gt;src/stubs.c&lt;/code&gt; e como &lt;code&gt;Value::String&lt;/code&gt; flui em &lt;code&gt;src/complete_runtime.rs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Properties&lt;/strong&gt; — &lt;code&gt;read_object_property&lt;/code&gt; / &lt;code&gt;write_object_property&lt;/code&gt;, backing fields e accessors por método&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shims RTL&lt;/strong&gt; — especialmente &lt;code&gt;rtl/sys/System.Generics.Collections.pas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defaults no runtime&lt;/strong&gt; — pontos onde o interpretador retorna placeholder em vez de falhar alto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso fica downstream da auditoria parser/semântica do Bruno. Parser correto não importa se getters de property caem silenciosamente em built-ins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Débitos confirmados
&lt;/h2&gt;

&lt;h3&gt;
  
  
  TD-UNICODE-001 — Semântica UTF-16 sem buffers wide completos (P1)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;string&lt;/code&gt; Delphi é UTF-16 com indexação 1-based. CrabPascal documenta code units UTF-16 em &lt;code&gt;pascal_strings.rs&lt;/code&gt;, mas &lt;code&gt;Value::String&lt;/code&gt; envolve Rust &lt;code&gt;String&lt;/code&gt; (UTF-8). Stubs como &lt;code&gt;pascal_strlen_utf16&lt;/code&gt; existem em &lt;code&gt;stubs.c&lt;/code&gt;, porém &lt;code&gt;PChar&lt;/code&gt;, &lt;code&gt;WideChar&lt;/code&gt;, &lt;code&gt;TEncoding&lt;/code&gt; e IO wide ainda faltam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Código pesado em strings com emoji, caracteres combinantes ou interop com APIs externas pode divergir entre &lt;code&gt;run&lt;/code&gt; e builds nativos futuros.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sprint sugerida:&lt;/strong&gt; S14 (IO/encoding) ou trabalho Unicode posterior.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-RTL-IO-001 — RTL de IO/encoding ausente (P1)
&lt;/h3&gt;

&lt;p&gt;Exemplos Horse referenciam &lt;code&gt;TFileStream.Create&lt;/code&gt; e streams de arquivo. Busca por shims &lt;code&gt;System.IOUtils&lt;/code&gt;, &lt;code&gt;TEncoding&lt;/code&gt; e &lt;code&gt;TFileStream&lt;/code&gt; em &lt;code&gt;rtl/&lt;/code&gt; não encontrou units correspondentes — bloqueando fluxos reais de arquivo.&lt;/p&gt;

&lt;p&gt;A Sprint 14 (v2.22.0) adicionou surface mínima de &lt;code&gt;System.IOUtils&lt;/code&gt;; a auditoria confirma o quão crítica é essa área para adoção em produção.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-PROPERTIES-001 — Accessors podem falhar silenciosamente (P1)
&lt;/h3&gt;

&lt;p&gt;Quando uma property declara &lt;code&gt;read GetValue&lt;/code&gt; mas &lt;code&gt;GetValue&lt;/code&gt; está ausente ou sem corpo, &lt;code&gt;execute_function&lt;/code&gt; pode cair em &lt;code&gt;simulate_function_execution&lt;/code&gt; — retornando default built-in em vez de erro determinístico.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Debug de código OOP vira adivinhação. Você acha que o getter rodou; o runtime substituiu por placeholder.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-PROPERTIES-002 — Codegen de properties ≠ runtime (P0)
&lt;/h3&gt;

&lt;p&gt;Em &lt;code&gt;src/codegen/mod.rs&lt;/code&gt;, declarações de property geram backing fields e &lt;strong&gt;comentários&lt;/strong&gt; para accessors — não funções getter/setter executáveis. &lt;code&gt;run&lt;/code&gt; executa properties corretamente; &lt;code&gt;build-exe&lt;/code&gt; não.&lt;/p&gt;

&lt;p&gt;Mesma classe de gap de paridade que o Lucas sinalizou na auditoria de backend. Helena manteve aqui para rastreabilidade OO.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-GENERICS-001 — Collections sem enumerators (P2)
&lt;/h3&gt;

&lt;p&gt;Shims de &lt;code&gt;System.Generics.Collections&lt;/code&gt; expõem &lt;code&gt;Add&lt;/code&gt;, &lt;code&gt;Get&lt;/code&gt;, &lt;code&gt;Count&lt;/code&gt;, &lt;code&gt;Delete&lt;/code&gt;, &lt;code&gt;Clear&lt;/code&gt; e lookups de dictionary — mas sem interfaces de enumerator. &lt;code&gt;for item in List do&lt;/code&gt; não tem base RTL.&lt;/p&gt;

&lt;h3&gt;
  
  
  TD-RUNTIME-DEFAULT-002 — Acesso a record retorna zero em erro (P1)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;evaluate_record_access&lt;/code&gt; retorna &lt;code&gt;Ok(Value::Integer(0))&lt;/code&gt; para tipos inesperados em vez de propagar erro — mascarando campos faltantes e bugs de metadados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observações de coerência
&lt;/h2&gt;

&lt;p&gt;Properties &lt;strong&gt;funcionam&lt;/strong&gt; no runtime quando accessors existem e estão implementados. A fraqueza é dupla: fallbacks silenciosos quando não estão, e codegen que nunca emite funções de accessor reais.&lt;/p&gt;

&lt;p&gt;Unicode está parcialmente modelado — suficiente para muitos tutoriais, insuficiente para paridade Delphi em IO e tipos ponteiro.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que contribuidores podem fazer agora
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Adicionar fixture que falha&lt;/strong&gt; para fallback silencioso de property — property com &lt;code&gt;GetValue&lt;/code&gt; ausente deve dar erro em &lt;code&gt;check&lt;/code&gt; e &lt;code&gt;run&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expandir shims RTL&lt;/strong&gt; — escolher um tipo IO faltante (&lt;code&gt;TFileStream&lt;/code&gt;, &lt;code&gt;TEncoding&lt;/code&gt;) e ligar shim + intrinsic + teste.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixtures Unicode&lt;/strong&gt; — caracteres fora do BMP em &lt;code&gt;Length&lt;/code&gt;, &lt;code&gt;Copy&lt;/code&gt;, &lt;code&gt;Pos&lt;/code&gt;; comparar saída de &lt;code&gt;run&lt;/code&gt; com comportamento Delphi documentado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rastrear IDs TD&lt;/strong&gt; nas descrições de PR para o backlog em &lt;code&gt;technical-debt/backlog&lt;/code&gt; permanecer honesto.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Ordem de leitura no Mintlify
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit-overview&lt;/code&gt; — sumário executivo e matriz de risco&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;technical-debt/audit/03-helena-rtl-unicode-properties&lt;/code&gt; — tabela completa da Helena&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;roadmap/sprints/sprint-14-review&lt;/code&gt; — contexto da entrega IOUtils&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;essentials/project-status&lt;/code&gt; — snapshot atual v2.22.0&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;RTL, Unicode e properties são onde desenvolvedores Delphi sentem compatibilidade. A auditoria da Helena não diz "desista" — mapeia exatamente quais surpresas restam e quais sprints devem fechá-las. Prefira &lt;strong&gt;&lt;code&gt;run&lt;/code&gt;&lt;/strong&gt; para OOP com properties por método e exceptions até a paridade de codegen alcançar.&lt;/p&gt;

&lt;p&gt;Próximo na série: &lt;em&gt;Auditoria: testes e harness&lt;/em&gt; (&lt;code&gt;053-audit-tests-harness&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>delphi</category>
      <category>compiler</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Audit Deep Dive: Parser, AST, Semantic | Auditoria: parser, AST, semântica</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 14:30:24 +0000</pubDate>
      <link>https://dev.to/crabpascal/audit-deep-dive-parser-ast-semantic-auditoria-parser-ast-semantica-1gd0</link>
      <guid>https://dev.to/crabpascal/audit-deep-dive-parser-ast-semantic-auditoria-parser-ast-semantica-1gd0</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Audit Deep Dive: Parser, AST, Semantic
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Mintlify docs tour — after &lt;a href="https://dev.to/crabpascal"&gt;Lucas's backend audit&lt;/a&gt;, Bruno's front-end audit completes the compiler pipeline picture.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lucas mapped run/build divergence. Bruno audited &lt;strong&gt;parser, AST, spans, and semantic validation&lt;/strong&gt; — the phases that decide whether Delphi source becomes a trustworthy program tree. Full report: &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal/src/main/mintlify/technical-debt/audit/02-bruno-parser-ast-semantic.md" rel="noopener noreferrer"&gt;Audit (Bruno) — Parser&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit scope
&lt;/h2&gt;

&lt;p&gt;Files examined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/parser/mod.rs&lt;/code&gt; — Delphi syntax surface&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/ast/*&lt;/code&gt; — program representation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/semantic/mod.rs&lt;/code&gt; — type checking and diagnostics&lt;/li&gt;
&lt;li&gt;Cross-check against Sprint 1–8 review docs (read-only)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Goal: find where &lt;strong&gt;real Delphi code&lt;/strong&gt; would parse incorrectly or lose AST information silently.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-001: multiple fields per declaration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; &lt;code&gt;parse_field_declaration&lt;/code&gt; (~2442–2456) — for &lt;code&gt;A, B: Integer&lt;/code&gt;, only &lt;code&gt;names[0]&lt;/code&gt; enters the AST; comment says &lt;code&gt;// TODO: Handle multiple fields&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Common class/record declarations lose fields. Runtime may appear to work until missing fields cause subtle bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sprint 11 (v2.19.0) — closed per backlog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test:&lt;/strong&gt; fixture &lt;code&gt;record Test; A,B: Integer; end.&lt;/code&gt; passes &lt;code&gt;check&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-002: implemented interfaces
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; &lt;code&gt;parse_class_definition&lt;/code&gt; — &lt;code&gt;interfaces: Vec::new(), // TODO - parsear interfaces implementadas&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; &lt;code&gt;class(TBase, I1, I2)&lt;/code&gt; not represented; dispatch and semantic checks cannot enforce interface contracts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sprint 11 — interfaces populated in AST.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-004: explicit &lt;code&gt;out&lt;/code&gt; parameters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; &lt;code&gt;parse_parameters&lt;/code&gt; (~858–871) accepts &lt;code&gt;var&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; but no &lt;code&gt;Token::Out&lt;/code&gt; branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Modern Delphi signatures like &lt;code&gt;procedure P(out N: Integer)&lt;/code&gt; fail or parse wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sprint 11 — &lt;code&gt;out&lt;/code&gt; token treated as &lt;code&gt;var&lt;/code&gt; for compatibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-003: generic parameters on classes (still open)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; &lt;code&gt;generic_parameters: Vec::new(), // TODO&lt;/code&gt; in class parsing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; &lt;code&gt;type TFoo&amp;lt;T&amp;gt; = class&lt;/code&gt; unavailable in AST for instantiation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target:&lt;/strong&gt; Sprint 15 (v2.23.0) or earlier partial support.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-005: &lt;code&gt;published&lt;/code&gt; section (P2)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; comment &lt;code&gt;// Published não tem token, skip&lt;/code&gt; in class parsing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; RTTI/serialization scenarios lose visibility metadata. Lower priority than field/interface gaps.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-SEMANTIC-001: broken test baseline
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; &lt;code&gt;test_undefined_variable&lt;/code&gt; in &lt;code&gt;src/semantic/mod.rs&lt;/code&gt; (~1370–1381) expected &lt;code&gt;"Undefined variable"&lt;/code&gt; but &lt;code&gt;cargo test&lt;/code&gt; failed the assert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; CI not trustworthy for semantic changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sprint 9 (v2.17.0) — message alignment and green baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Panic safety note
&lt;/h2&gt;

&lt;p&gt;Audit found &lt;code&gt;panic!&lt;/code&gt;/&lt;code&gt;unwrap()&lt;/code&gt; mainly in &lt;code&gt;#[cfg(test)]&lt;/code&gt; blocks — parser tests and AST unit tests — not in production parse paths. &lt;strong&gt;TD-PARSER-008&lt;/strong&gt; tracks continuous vigilance: zero panics on user syntax errors; return &lt;code&gt;Result&lt;/code&gt; with spans instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What already worked (S6/S7)
&lt;/h2&gt;

&lt;p&gt;Positive findings matter too:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;property&lt;/code&gt; parsing with &lt;code&gt;read&lt;/code&gt;/&lt;code&gt;write&lt;/code&gt; identifiers — &lt;code&gt;parse_property_declaration&lt;/code&gt; (~1574–1629)&lt;/li&gt;
&lt;li&gt;Visibility sections: &lt;code&gt;private&lt;/code&gt;/&lt;code&gt;public&lt;/code&gt;/&lt;code&gt;protected&lt;/code&gt; with default &lt;code&gt;public&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Generic &lt;strong&gt;expressions&lt;/strong&gt; like &lt;code&gt;TDictionary&amp;lt;String,Integer&amp;gt;&lt;/code&gt; — Sprint 7&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The front-end is not uniformly broken — gaps are &lt;strong&gt;specific Delphi surface features&lt;/strong&gt; common in enterprise codebases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommended tests from audit
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test ID&lt;/th&gt;
&lt;th&gt;Fixture&lt;/th&gt;
&lt;th&gt;Validates&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TST-PARSER-MULTI-FIELDS-001&lt;/td&gt;
&lt;td&gt;&lt;code&gt;A,B: Integer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TD-PARSER-001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TST-PARSER-OUT-001&lt;/td&gt;
&lt;td&gt;&lt;code&gt;procedure P(out N: Integer)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TD-PARSER-004&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TST-PARSER-INTERFACES-001&lt;/td&gt;
&lt;td&gt;&lt;code&gt;class(TBase, I1, I2)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TD-PARSER-002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Run after changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;--lib&lt;/span&gt; parser
crab-pascal check tests/fixtures/your_new_fixture.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Contributor path
&lt;/h2&gt;

&lt;p&gt;Parser fixes are ideal &lt;strong&gt;good first sprint&lt;/strong&gt; work: isolated, test-driven, visible in &lt;code&gt;check&lt;/code&gt; output. Reference Bruno's audit ID in PRs; update backlog status when merged.&lt;/p&gt;

&lt;p&gt;Next in series (052): &lt;strong&gt;Helena's RTL/Unicode/properties audit&lt;/strong&gt; — the runtime layer Delphi developers feel every day.&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Auditoria: parser, AST, semântica
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Tour Mintlify — depois da &lt;a href="https://dev.to/crabpascal"&gt;auditoria backend de Lucas&lt;/a&gt;, a auditoria front-end de Bruno completa o quadro do pipeline do compilador.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lucas mapeou divergência run/build. Bruno auditou &lt;strong&gt;parser, AST, spans e validação semântica&lt;/strong&gt; — fases que decidem se fonte Delphi vira árvore de programa confiável. Relatório completo: &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal/src/main/mintlify/technical-debt/audit/02-bruno-parser-ast-semantic.md" rel="noopener noreferrer"&gt;Auditoria (Bruno) — Parser&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escopo da auditoria
&lt;/h2&gt;

&lt;p&gt;Arquivos examinados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/parser/mod.rs&lt;/code&gt; — superfície sintática Delphi&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/ast/*&lt;/code&gt; — representação do programa&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/semantic/mod.rs&lt;/code&gt; — type checking e diagnósticos&lt;/li&gt;
&lt;li&gt;Cross-check com docs de review Sprints 1–8 (somente leitura)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Objetivo: achar onde &lt;strong&gt;código Delphi real&lt;/strong&gt; parsearia incorretamente ou perderia informação na AST silenciosamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-001: múltiplos fields por declaração
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidência:&lt;/strong&gt; &lt;code&gt;parse_field_declaration&lt;/code&gt; (~2442–2456) — para &lt;code&gt;A, B: Integer&lt;/code&gt;, só &lt;code&gt;names[0]&lt;/code&gt; entra na AST; comentário &lt;code&gt;// TODO: Handle multiple fields&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Declarações comuns de class/record perdem fields. Runtime pode parecer OK até fields faltantes causarem bugs sutis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sprint 11 (v2.19.0) — fechado no backlog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teste:&lt;/strong&gt; fixture &lt;code&gt;record Test; A,B: Integer; end.&lt;/code&gt; passa no &lt;code&gt;check&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-002: interfaces implementadas
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidência:&lt;/strong&gt; &lt;code&gt;parse_class_definition&lt;/code&gt; — &lt;code&gt;interfaces: Vec::new(), // TODO - parsear interfaces implementadas&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; &lt;code&gt;class(TBase, I1, I2)&lt;/code&gt; não representado; dispatch e checks semânticos não impõem contratos de interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sprint 11 — interfaces populadas na AST.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-004: parâmetros &lt;code&gt;out&lt;/code&gt; explícitos
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidência:&lt;/strong&gt; &lt;code&gt;parse_parameters&lt;/code&gt; (~858–871) aceita &lt;code&gt;var&lt;/code&gt; e &lt;code&gt;const&lt;/code&gt; mas sem branch &lt;code&gt;Token::Out&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Assinaturas Delphi modernas como &lt;code&gt;procedure P(out N: Integer)&lt;/code&gt; falham ou parseiam errado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sprint 11 — token &lt;code&gt;out&lt;/code&gt; tratado como &lt;code&gt;var&lt;/code&gt; para compatibilidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-003: parâmetros genéricos em classes (ainda aberto)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidência:&lt;/strong&gt; &lt;code&gt;generic_parameters: Vec::new(), // TODO&lt;/code&gt; no parse de class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; &lt;code&gt;type TFoo&amp;lt;T&amp;gt; = class&lt;/code&gt; indisponível na AST para instanciação.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alvo:&lt;/strong&gt; Sprint 15 (v2.23.0) ou suporte parcial antes.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-PARSER-005: seção &lt;code&gt;published&lt;/code&gt; (P2)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidência:&lt;/strong&gt; comentário &lt;code&gt;// Published não tem token, skip&lt;/code&gt; no parse de class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Cenários RTTI/serialização perdem metadado de visibilidade. Prioridade menor que gaps de field/interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  TD-SEMANTIC-001: baseline de testes quebrada
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidência:&lt;/strong&gt; &lt;code&gt;test_undefined_variable&lt;/code&gt; em &lt;code&gt;src/semantic/mod.rs&lt;/code&gt; (~1370–1381) esperava &lt;code&gt;"Undefined variable"&lt;/code&gt; mas &lt;code&gt;cargo test&lt;/code&gt; falhou no assert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; CI não confiável para mudanças semânticas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sprint 9 (v2.17.0) — alinhamento de mensagem e baseline verde.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nota sobre segurança de panic
&lt;/h2&gt;

&lt;p&gt;Auditoria encontrou &lt;code&gt;panic!&lt;/code&gt;/&lt;code&gt;unwrap()&lt;/code&gt; principalmente em blocos &lt;code&gt;#[cfg(test)]&lt;/code&gt; — testes do parser e unitários de AST — não em paths de parse de produção. &lt;strong&gt;TD-PARSER-008&lt;/strong&gt; rastreia vigilância contínua: zero panics em erros de sintaxe do usuário; retornar &lt;code&gt;Result&lt;/code&gt; com spans.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que já funcionava (S6/S7)
&lt;/h2&gt;

&lt;p&gt;Achados positivos também importam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parse de &lt;code&gt;property&lt;/code&gt; com identificadores &lt;code&gt;read&lt;/code&gt;/&lt;code&gt;write&lt;/code&gt; — &lt;code&gt;parse_property_declaration&lt;/code&gt; (~1574–1629)&lt;/li&gt;
&lt;li&gt;Seções de visibilidade: &lt;code&gt;private&lt;/code&gt;/&lt;code&gt;public&lt;/code&gt;/&lt;code&gt;protected&lt;/code&gt; com default &lt;code&gt;public&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expressões&lt;/strong&gt; genéricas como &lt;code&gt;TDictionary&amp;lt;String,Integer&amp;gt;&lt;/code&gt; — Sprint 7&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O front-end não está uniformemente quebrado — gaps são &lt;strong&gt;features específicas de superfície Delphi&lt;/strong&gt; comuns em codebases enterprise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testes recomendados da auditoria
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID teste&lt;/th&gt;
&lt;th&gt;Fixture&lt;/th&gt;
&lt;th&gt;Valida&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TST-PARSER-MULTI-FIELDS-001&lt;/td&gt;
&lt;td&gt;&lt;code&gt;A,B: Integer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TD-PARSER-001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TST-PARSER-OUT-001&lt;/td&gt;
&lt;td&gt;&lt;code&gt;procedure P(out N: Integer)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TD-PARSER-004&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TST-PARSER-INTERFACES-001&lt;/td&gt;
&lt;td&gt;&lt;code&gt;class(TBase, I1, I2)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TD-PARSER-002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rode após mudanças:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;--lib&lt;/span&gt; parser
crab-pascal check tests/fixtures/your_new_fixture.pas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Caminho do contribuidor
&lt;/h2&gt;

&lt;p&gt;Fixes de parser são trabalho ideal de &lt;strong&gt;good first sprint&lt;/strong&gt;: isolados, test-driven, visíveis no output do &lt;code&gt;check&lt;/code&gt;. Referencie ID da auditoria de Bruno em PRs; atualize status no backlog ao mergear.&lt;/p&gt;

&lt;p&gt;Próximo na série (052): &lt;strong&gt;auditoria RTL/Unicode/properties de Helena&lt;/strong&gt; — camada de runtime que desenvolvedores Delphi sentem todo dia.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>compiler</category>
      <category>rust</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Audit Deep Dive: Backend Run/Build | Auditoria: backend run/build</title>
      <dc:creator>CrabPascal</dc:creator>
      <pubDate>Thu, 04 Jun 2026 14:15:20 +0000</pubDate>
      <link>https://dev.to/crabpascal/audit-deep-dive-backend-runbuild-auditoria-backend-runbuild-im6</link>
      <guid>https://dev.to/crabpascal/audit-deep-dive-backend-runbuild-auditoria-backend-runbuild-im6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bilingual post&lt;/strong&gt; · Post bilíngue&lt;br&gt;&lt;br&gt;
Jump to: English · Português&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  English {#english}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Audit Deep Dive: Backend Run/Build
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Mintlify docs tour — after the &lt;a href="https://dev.to/crabpascal"&gt;technical debt backlog overview&lt;/a&gt;, we open Lucas's backend audit with file-level evidence.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Post-v2.16.0, the CrabPascal squad ran a structured technical audit. Lucas owned &lt;strong&gt;backend, runtime, codegen, and run/build parity&lt;/strong&gt;. His findings live in Mintlify at &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal/src/main/mintlify/technical-debt/audit/01-lucas-backend-run-build.md" rel="noopener noreferrer"&gt;Audit (Lucas) — Backend&lt;/a&gt; and feed IDs in the &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal/src/main/mintlify/technical-debt/audit-overview.md" rel="noopener noreferrer"&gt;audit overview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This post translates that audit into actionable context for developers choosing between &lt;code&gt;run&lt;/code&gt; and &lt;code&gt;build-exe&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was audited
&lt;/h2&gt;

&lt;p&gt;Scope included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C codegen: &lt;code&gt;src/codegen/mod.rs&lt;/code&gt;, &lt;code&gt;src/project/mod.rs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Runtime fallbacks: &lt;code&gt;src/complete_runtime.rs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;String stubs: &lt;code&gt;src/stubs.c&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;CLI &lt;code&gt;build&lt;/code&gt; behavior &lt;strong&gt;without&lt;/strong&gt; a C toolchain&lt;/li&gt;
&lt;li&gt;Fixture matrix: &lt;code&gt;string_conformance&lt;/code&gt;, &lt;code&gt;class_property&lt;/code&gt;, &lt;code&gt;dict_trygetvalue_var&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Commands run during audit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;test
&lt;/span&gt;crab-pascal run tests/fixtures/string_conformance.pas
crab-pascal build tests/fixtures/string_conformance.pas &lt;span class="nt"&gt;--output&lt;/span&gt; ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  P0 finding: TD-RUNTIME-001 (false build success)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; &lt;code&gt;src/project/mod.rs&lt;/code&gt; lines 192–246 — when &lt;code&gt;self.compiler.is_none()&lt;/code&gt;, build falls back to "Runtime Interno… Executando diretamente da AST."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; &lt;code&gt;crab-pascal build&lt;/code&gt; could appear to succeed without compiling real C, masking regressions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sprint 10 fix:&lt;/strong&gt; exit non-zero with clear message when no gcc/clang; parity tests with skip reason when toolchain absent.&lt;/p&gt;

&lt;p&gt;This was the single highest-risk item in the audit's Top 10.&lt;/p&gt;

&lt;h2&gt;
  
  
  P0 finding: TD-CODEGEN-006 (strings ignore pascal_*)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; Generated &lt;code&gt;string_conformance.c&lt;/code&gt; called &lt;code&gt;Length("año")&lt;/code&gt; directly while &lt;code&gt;stubs.c&lt;/code&gt; defines &lt;code&gt;pascal_Length&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Native build either failed to link or produced wrong string semantics vs &lt;code&gt;run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sprint 10 fix:&lt;/strong&gt; codegen maps builtins to &lt;code&gt;pascal_*&lt;/code&gt;; &lt;code&gt;run_build_parity&lt;/code&gt; compares stdout when gcc exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  P0 findings: OO codegen gaps (Sprint 13 era)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TD-CODEGEN-001&lt;/td&gt;
&lt;td&gt;Properties → backing field + comment only&lt;/td&gt;
&lt;td&gt;Properties broken in C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TD-CODEGEN-002&lt;/td&gt;
&lt;td&gt;Method body → comment + default return&lt;/td&gt;
&lt;td&gt;Methods silently wrong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TD-CODEGEN-003&lt;/td&gt;
&lt;td&gt;try/except → "simulated" comments&lt;/td&gt;
&lt;td&gt;Exceptions fake in C&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sprint 13 addressed TD-CODEGEN-003 with &lt;strong&gt;honest refusal&lt;/strong&gt; — codegen errors instead of emitting stubs. Properties and methods remain on the backlog for future sprints.&lt;/p&gt;

&lt;h2&gt;
  
  
  P1: runtime masking
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TD-RUNTIME-002&lt;/strong&gt; — &lt;code&gt;evaluate_record_access&lt;/code&gt; returns &lt;code&gt;Integer(0)&lt;/code&gt; on unexpected types instead of erroring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TD-RUNTIME-003&lt;/strong&gt; — method dispatch fallback returns cloned object placeholder.&lt;/p&gt;

&lt;p&gt;Both make debugging harder. Fixtures should assert failure on invalid field access and unknown methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  P1: TD-TEST-001 (no build parity suite)
&lt;/h2&gt;

&lt;p&gt;Pre-Sprint 10, tests focused on &lt;code&gt;run&lt;/code&gt;. Audit recommended dedicated &lt;code&gt;tests/parity_*&lt;/code&gt; calling &lt;code&gt;build&lt;/code&gt; and comparing stdout — implemented in Sprint 10 with graceful skip.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer checklist after audit
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Default to &lt;code&gt;run&lt;/code&gt;&lt;/strong&gt; for OOP, exceptions, and Horse APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run parity tests locally&lt;/strong&gt; if you have gcc/clang:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   cargo &lt;span class="nb"&gt;test &lt;/span&gt;run_build_parity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Treat build success without toolchain as failure&lt;/strong&gt; — if you see "Runtime Interno" in output on an old binary, upgrade to v2.18.0+.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report parity bugs&lt;/strong&gt; with both &lt;code&gt;run&lt;/code&gt; and &lt;code&gt;build-exe&lt;/code&gt; output attached.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Status since audit
&lt;/h2&gt;

&lt;p&gt;Many P0 items partially or fully closed in Sprints 10–13. P1 runtime masking and full OO codegen remain. The audit document stays as historical evidence — do not delete; link from PRs when closing IDs.&lt;/p&gt;

&lt;p&gt;Next in series: &lt;strong&gt;Bruno's parser/AST/semantic audit&lt;/strong&gt; — Delphi surface gaps in the front-end.&lt;/p&gt;




&lt;h2&gt;
  
  
  Português {#portugus}
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Auditoria: backend run/build
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Tour Mintlify — depois da &lt;a href="https://dev.to/crabpascal"&gt;visão geral do backlog de débito&lt;/a&gt;, abrimos a auditoria backend de Lucas com evidência em nível de arquivo.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pós-v2.16.0, a squad CrabPascal rodou auditoria técnica estruturada. Lucas ficou com &lt;strong&gt;backend, runtime, codegen e paridade run/build&lt;/strong&gt;. Achados vivem no Mintlify em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal/src/main/mintlify/technical-debt/audit/01-lucas-backend-run-build.md" rel="noopener noreferrer"&gt;Auditoria (Lucas) — Backend&lt;/a&gt; e alimentam IDs na &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal/src/main/mintlify/technical-debt/audit-overview.md" rel="noopener noreferrer"&gt;visão geral da auditoria&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Este post traduz a auditoria em contexto acionável para desenvolvedores escolhendo entre &lt;code&gt;run&lt;/code&gt; e &lt;code&gt;build-exe&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que foi auditado
&lt;/h2&gt;

&lt;p&gt;Escopo incluiu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codegen C: &lt;code&gt;src/codegen/mod.rs&lt;/code&gt;, &lt;code&gt;src/project/mod.rs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fallbacks de runtime: &lt;code&gt;src/complete_runtime.rs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Stubs de string: &lt;code&gt;src/stubs.c&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Comportamento CLI &lt;code&gt;build&lt;/code&gt; &lt;strong&gt;sem&lt;/strong&gt; toolchain C&lt;/li&gt;
&lt;li&gt;Matriz de fixtures: &lt;code&gt;string_conformance&lt;/code&gt;, &lt;code&gt;class_property&lt;/code&gt;, &lt;code&gt;dict_trygetvalue_var&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comandos rodados na auditoria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;test
&lt;/span&gt;crab-pascal run tests/fixtures/string_conformance.pas
crab-pascal build tests/fixtures/string_conformance.pas &lt;span class="nt"&gt;--output&lt;/span&gt; ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Achado P0: TD-RUNTIME-001 (falso sucesso de build)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidência:&lt;/strong&gt; &lt;code&gt;src/project/mod.rs&lt;/code&gt; linhas 192–246 — quando &lt;code&gt;self.compiler.is_none()&lt;/code&gt;, build cai em "Runtime Interno… Executando diretamente da AST."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; &lt;code&gt;crab-pascal build&lt;/code&gt; podia parecer sucesso sem compilar C real, mascarando regressões.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix Sprint 10:&lt;/strong&gt; exit ≠ 0 com mensagem clara sem gcc/clang; testes de paridade com skip quando toolchain ausente.&lt;/p&gt;

&lt;p&gt;Foi o item de maior risco no Top 10 da auditoria.&lt;/p&gt;

&lt;h2&gt;
  
  
  Achado P0: TD-CODEGEN-006 (strings ignoram pascal_*)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Evidência:&lt;/strong&gt; &lt;code&gt;string_conformance.c&lt;/code&gt; gerado chamava &lt;code&gt;Length("año")&lt;/code&gt; diretamente enquanto &lt;code&gt;stubs.c&lt;/code&gt; define &lt;code&gt;pascal_Length&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Build nativo falhava no link ou produzia semântica de string errada vs &lt;code&gt;run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix Sprint 10:&lt;/strong&gt; codegen mapeia builtins para &lt;code&gt;pascal_*&lt;/code&gt;; &lt;code&gt;run_build_parity&lt;/code&gt; compara stdout quando gcc existe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Achados P0: gaps de codegen OO (era Sprint 13)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;Evidência&lt;/th&gt;
&lt;th&gt;Impacto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TD-CODEGEN-001&lt;/td&gt;
&lt;td&gt;Properties → só backing field + comentário&lt;/td&gt;
&lt;td&gt;Properties quebradas no C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TD-CODEGEN-002&lt;/td&gt;
&lt;td&gt;Corpo de método → comentário + return default&lt;/td&gt;
&lt;td&gt;Métodos errados silenciosamente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TD-CODEGEN-003&lt;/td&gt;
&lt;td&gt;try/except → comentários "simulated"&lt;/td&gt;
&lt;td&gt;Exceções falsas no C&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sprint 13 endereçou TD-CODEGEN-003 com &lt;strong&gt;recusa honesta&lt;/strong&gt; — codegen erra em vez de emitir stubs. Properties e métodos permanecem no backlog para sprints futuros.&lt;/p&gt;

&lt;h2&gt;
  
  
  P1: mascaramento no runtime
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TD-RUNTIME-002&lt;/strong&gt; — &lt;code&gt;evaluate_record_access&lt;/code&gt; retorna &lt;code&gt;Integer(0)&lt;/code&gt; em tipos inesperados em vez de erro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TD-RUNTIME-003&lt;/strong&gt; — fallback de dispatch de método retorna placeholder clonado do objeto.&lt;/p&gt;

&lt;p&gt;Ambos dificultam debug. Fixtures devem assertar falha em acesso a field inválido e métodos desconhecidos.&lt;/p&gt;

&lt;h2&gt;
  
  
  P1: TD-TEST-001 (sem suite de paridade build)
&lt;/h2&gt;

&lt;p&gt;Pré-Sprint 10, testes focavam &lt;code&gt;run&lt;/code&gt;. Auditoria recomendou &lt;code&gt;tests/parity_*&lt;/code&gt; dedicados chamando &lt;code&gt;build&lt;/code&gt; e comparando stdout — implementado no Sprint 10 com skip gracioso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist do desenvolvedor pós-auditoria
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prefira &lt;code&gt;run&lt;/code&gt;&lt;/strong&gt; para OOP, exceções e APIs Horse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rode testes de paridade localmente&lt;/strong&gt; se tiver gcc/clang:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   cargo &lt;span class="nb"&gt;test &lt;/span&gt;run_build_parity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trate sucesso de build sem toolchain como falha&lt;/strong&gt; — se vir "Runtime Interno" em binário antigo, atualize para v2.18.0+.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reporte bugs de paridade&lt;/strong&gt; com output de &lt;code&gt;run&lt;/code&gt; e &lt;code&gt;build-exe&lt;/code&gt; anexados.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Status desde a auditoria
&lt;/h2&gt;

&lt;p&gt;Vários P0 parcial ou totalmente fechados nos Sprints 10–13. Mascaramento P1 no runtime e codegen OO completo permanecem. O doc de auditoria fica como evidência histórica — não apague; linke de PRs ao fechar IDs.&lt;/p&gt;

&lt;p&gt;Próximo na série: &lt;strong&gt;auditoria parser/AST/semântica de Bruno&lt;/strong&gt; — gaps de superfície Delphi no front-end.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published on &lt;a href="https://dev.to/crabpascal"&gt;dev.to/@crabpascal&lt;/a&gt; · Código em &lt;a href="https://bitbucket.org/alphatecnologia/crabpascal" rel="noopener noreferrer"&gt;CrabPascal&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>rust</category>
      <category>compiler</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
