<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Pedro Carvalho Brom</title>
<link>https://pcbrom.com/blog/</link>
<atom:link href="https://pcbrom.com/blog/index.xml" rel="self" type="application/rss+xml"/>
<description>Technical notes on statistics, AI and R.</description>
<generator>quarto-1.9.37</generator>
<lastBuildDate>Sat, 16 May 2026 15:00:00 GMT</lastBuildDate>
<item>
  <title>community-skills v0.2.0: a queryable CRAN graph, an assisted package publisher, and a skills hub</title>
  <dc:creator>Pedro Carvalho Brom</dc:creator>
  <link>https://pcbrom.com/blog/posts/2026-05-16-community-skills-v0-2-0/</link>
  <description><![CDATA[ 
<div class="site-bar"><div class="site-bar-inner"><a href="../../../">Pedro Carvalho Brom</a></div></div>




<p>The R ecosystem runs on CRAN: more than twenty thousand packages, decades of accumulated work. A few things, though, are hard to see from inside it. There is no single queryable graph of how those packages depend on each other. There is no quick way to ask which ones are effectively abandoned. And maintaining a package, the update, the <code>R CMD check</code>, the submission, is still manual friction that every maintainer recognizes.</p>
<p><code>community-skills</code> v0.2.0 is a set of tools built around that gap, in three parts.</p>
<section id="cran-graph-the-dependency-network-queryable" class="level2">
<h2 data-anchor-id="cran-graph-the-dependency-network-queryable">cran-graph: the dependency network, queryable</h2>
<p>cran-graph builds the CRAN dependency network as a graph you can query: more than twenty four thousand packages as nodes and roughly two hundred and forty thousand dependency edges. On top of it sit two things. A deprecation classifier sorts packages into four states, so “is this package still alive” becomes a query instead of a guess. And an install-set optimizer answers a practical question: the smallest set of packages that satisfies a goal, dependencies included.</p>
<p>The point is to make the ecosystem legible. “What depends on this package”, “what would break if it left CRAN”, “what is the minimal install for this task”, these stop being archaeology and become lookups.</p>
</section>
<section id="cran-publisher-the-submission-cycle-assisted" class="level2">
<h2 data-anchor-id="cran-publisher-the-submission-cycle-assisted">cran-publisher: the submission cycle, assisted</h2>
<p>Publishing to CRAN is a loop: update the package, run <code>R CMD check</code>, read the output, fix what it flags, repeat, submit. cran-publisher automates the mechanical part of that loop. It runs the check, parses the output, and categorizes each error. A fix loop then proposes corrections, using a local language model with five distinct prompt strategies across attempts, and re-runs the check.</p>
<p>One thing it does not automate: the submission itself. Every submit passes through a human approval gate. The tool reduces the friction of getting a package check-clean; the decision to send it to CRAN stays with the maintainer. The dogfooding target is <code>bgumbel</code>, a CRAN package.</p>
</section>
<section id="community-skills-the-hub" class="level2">
<h2 data-anchor-id="community-skills-the-hub">community-skills: the hub</h2>
<p>The two tools above live inside <code>community-skills</code>, a hub of ninety five skills: five core and ninety wrapping packages from the CRAN top one hundred. Each skill follows one pattern: a <code>SKILL.md</code> describing a typed JSON contract, plus a bridge that runs R in a subprocess and exchanges JSON.</p>
<p>The reason for the pattern is specific. When an AI agent uses an R package by generating R code, it loads verbose documentation, writes code, and retries after errors. A typed contract changes that: the agent decides what to call, the bridge executes it, and an error comes back structured instead of as a stack trace. Fewer retries, an auditable trail.</p>
</section>
<section id="honest-state" class="level2">
<h2 data-anchor-id="honest-state">Honest state</h2>
<p>This is v0.2.0, not a finished product. cran-graph and cran-publisher are built, and the suite has 280 passing tests. The submit step of cran-publisher is deliberately gated and fires only for substantive releases. Many of the ninety R skills currently carry structural smoke tests; semantic review per skill is ongoing, incremental work. The repository is open about what is solid and what is still in progress.</p>
</section>
<section id="where-it-is" class="level2">
<h2 data-anchor-id="where-it-is">Where it is</h2>
<p><code>community-skills</code> is open source under the MIT license: <a href="https://github.com/pcbrom/community-skills">github.com/pcbrom/community-skills</a>. Issues and contributions are welcome; a new skill is a <code>SKILL.md</code> plus a bridge.</p>
<p>I write about this kind of work, scientific method, statistics, and AI applied with rigor, on LinkedIn: <a href="https://www.linkedin.com/in/pcbrom">linkedin.com/in/pcbrom</a>.</p>


</section>

 ]]></description>
  <category>R</category>
  <category>CRAN</category>
  <category>packages</category>
  <category>tooling</category>
  <category>AI</category>
  <guid>https://pcbrom.com/blog/posts/2026-05-16-community-skills-v0-2-0/</guid>
  <pubDate>Sat, 16 May 2026 15:00:00 GMT</pubDate>
</item>
<item>
  <title>pcbrom.com is live</title>
  <dc:creator>Pedro Carvalho Brom</dc:creator>
  <link>https://pcbrom.com/blog/posts/2026-05-16-pcbrom-com-is-live/</link>
  <description><![CDATA[ 
<div class="site-bar"><div class="site-bar-inner"><a href="../../../">Pedro Carvalho Brom</a></div></div>




<p>Today, the discovery of a researcher on the web depends on intermediaries. A social network profile rises or disappears with the platform’s algorithm. A code repository tends to be found by those who already know the author’s name. An article sits behind a journal paywall. Each channel solves part of the problem, and none of them, on its own, is a stable address under the control of the person who publishes.</p>
<p>This site exists to be that address. pcbrom.com brings together, in a single place, the packages, papers and projects of Pedro Carvalho Brom, and serves as the destination that the other profiles point to. The question it answers is direct: where can all of the author’s work be seen at once.</p>
<section id="the-blog-has-a-purpose" class="level2">
<h2 data-anchor-id="the-blog-has-a-purpose">The blog has a purpose</h2>
<p>The site also includes a blog, and it is not ornamental. The notes published here deal with statistics, generative AI and the R language. Every note tagged as R content circulates through the community via the RSS feed, which aggregators such as R-bloggers consume. A blog of one’s own turns the working record into a channel of circulation that does not depend on any closed network.</p>
<p>The cadence of the notes follows the rhythm of research work, without a rigid editorial calendar. The first commitment is to verifiable content, not to frequency.</p>
</section>
<section id="what-this-site-collects-nothing" class="level2">
<h2 data-anchor-id="what-this-site-collects-nothing">What this site collects: nothing</h2>
<p>There is a design decision worth stating explicitly. This site collects no data about its visitors. There is no form, no tracking cookie, no analytics script, and the typefaces are served from the domain itself, with no request to third-party servers.</p>
<p>Minimization at the source is the cleanest way to handle data protection: what is not collected does not need to be stored, audited or discarded, and it creates no retention obligation. A site that discusses responsible data governance gains in coherence when it practices what it writes.</p>
<p>Content published here is available under the CC BY 4.0 license where applicable. The next notes will arrive as the work advances.</p>
<p>The packages and projects behind this site are open source on GitHub: <a href="https://github.com/pcbrom">github.com/pcbrom</a>. I write about this kind of work, scientific method, statistics, and AI applied with rigor, on LinkedIn: <a href="https://www.linkedin.com/in/pcbrom">linkedin.com/in/pcbrom</a>.</p>


</section>

 ]]></description>
  <category>Meta</category>
  <guid>https://pcbrom.com/blog/posts/2026-05-16-pcbrom-com-is-live/</guid>
  <pubDate>Sat, 16 May 2026 09:00:00 GMT</pubDate>
</item>
</channel>
</rss>
