<?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>Forem: COMMENTERTHE9</title>
    <description>The latest articles on Forem by COMMENTERTHE9 (@commenterthe9).</description>
    <link>https://forem.com/commenterthe9</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3823333%2F1af4f546-b6c0-4597-9d66-05fe6c618387.png</url>
      <title>Forem: COMMENTERTHE9</title>
      <link>https://forem.com/commenterthe9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/commenterthe9"/>
    <language>en</language>
    <item>
      <title>Cx Dev Log — 2026-04-21</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Wed, 22 Apr 2026 00:36:56 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-21-511j</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-21-511j</guid>
      <description>&lt;p&gt;A holding pattern dominated April 21st: no developer-authored commits across any branch for three days straight. Yet, beneath the surface, there's a vibrant narrative unfolding with 15 real feature commits beckoning from the &lt;code&gt;submain&lt;/code&gt; branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Submain Conundrum
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;submain&lt;/code&gt; might feel like the underdog of the branches, but it's where the action is. It holds 15 unmerged, non-trivial commits, datelined back to &lt;code&gt;eb65acf&lt;/code&gt; on April 13th. That's an 8-day integration canyon we're staring into.&lt;/p&gt;

&lt;p&gt;What's brewing in those 15 commits? Let's talk specifics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Result&lt;/code&gt; error model featuring &lt;code&gt;Ok&lt;/code&gt;, &lt;code&gt;Err&lt;/code&gt;, and the magic of the &lt;code&gt;?&lt;/code&gt; operator&lt;/li&gt;
&lt;li&gt;New integer overflow enforcement rules&lt;/li&gt;
&lt;li&gt;A syntax update making semicolons optional&lt;/li&gt;
&lt;li&gt;A vital diagnostics pass&lt;/li&gt;
&lt;li&gt;A chunk of parser audits plus a body-gap fix&lt;/li&gt;
&lt;li&gt;Control flow advances through Phase 10, addressing constructs like while, for, loop/break/continue&lt;/li&gt;
&lt;li&gt;And, not to be overlooked, a basic test runner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On &lt;code&gt;submain&lt;/code&gt;, the test matrix boasts a robust 116/116, recorded as of April 18th. There’s even talk of uncommitted work - a recursive type parser revamp, struct field type resolutions, stack increases, truncation fixes, and new tests and programs. This work's current status? Shrouded in mystery, possibly stashed in a local tree or, worse, vanished.&lt;/p&gt;

&lt;p&gt;Over on &lt;code&gt;main&lt;/code&gt;, the matrix is steady but lags at 78/78. The gulf between what &lt;code&gt;main&lt;/code&gt; recognizes and &lt;code&gt;submain&lt;/code&gt; proves is as glaring as it gets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap Limbo
&lt;/h2&gt;

&lt;p&gt;Version 4.8’s roadmap on &lt;code&gt;main&lt;/code&gt; is gathering dust with unchecked hard blockers for the 0.1 milestone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic test runner&lt;/li&gt;
&lt;li&gt;Minimal error model&lt;/li&gt;
&lt;li&gt;Enforced integer overflow handling&lt;/li&gt;
&lt;li&gt;Consistent semicolon enforcement&lt;/li&gt;
&lt;li&gt;Parser, semantic, interpreter harmony on all constructs&lt;/li&gt;
&lt;li&gt;No known memory boundary model soundness issues&lt;/li&gt;
&lt;li&gt;Passing examples&lt;/li&gt;
&lt;li&gt;User-friendly diagnostics for common errors&lt;/li&gt;
&lt;li&gt;Roadmap-spec alignment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Submain, on its part, has resolved many of these hurdles. The test runner, error model, integer overflow policy, semicolon handling, and diagnostics features all stand ready. But with no merge, these roadmap items languish unchecked, splitting the vision between &lt;code&gt;main&lt;/code&gt; and the more aligned &lt;code&gt;submain&lt;/code&gt; roadmap (v4.7).&lt;/p&gt;

&lt;h2&gt;
  
  
  Branch Chaos
&lt;/h2&gt;

&lt;p&gt;A total of twenty daily-log branches, remnants from March and April, clutter the remote. The last successful merge from a daily-log branch to &lt;code&gt;main&lt;/code&gt; was way back on March 31st. While these branches serve as valuable records, their growing count is breeding operational chaos.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Road Ahead
&lt;/h2&gt;

&lt;p&gt;The forthcoming steps have been on repeat for days, with five priorities in the queue:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Secure the audit Part 2 sprint on &lt;code&gt;submain&lt;/code&gt; (assuming it still survives)&lt;/li&gt;
&lt;li&gt;Execute the long-awaited &lt;code&gt;submain&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; merge&lt;/li&gt;
&lt;li&gt;Refresh the roadmap post-merge&lt;/li&gt;
&lt;li&gt;Bolster the audit Part 2 scope&lt;/li&gt;
&lt;li&gt;Dive into IR lowering for &lt;code&gt;Result&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Merging &lt;code&gt;submain&lt;/code&gt; with &lt;code&gt;main&lt;/code&gt; isn't just a task; it's a necessity. This action has the potential to boost the test matrix from 78 to at least 116, erase multiple critical blockers, and propel towards the final audit and the 0.1 release barriers. Everything, subsequently, hangs on this pivotal move.&lt;/p&gt;

&lt;p&gt;The sequence feels stalled not at a standstill, but rather at a pause with bated breath. The efforts are real and present. They just need movement.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-21" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-21&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-20</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Tue, 21 Apr 2026 00:38:07 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-20-2mi7</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-20-2mi7</guid>
      <description>&lt;p&gt;Nothing happened in the repo today. No commits on any branch, no uncommitted work detected, clean working tree on main. The matrix is still 78/78. This is a rest day or work happened somewhere outside the repository.&lt;/p&gt;

&lt;p&gt;The interesting story right now is not what shipped but what has not been integrated.&lt;/p&gt;

&lt;h2&gt;
  
  
  The submain gap at seven days
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;submain&lt;/code&gt; branch is sitting on 15 commits that have not reached &lt;code&gt;main&lt;/code&gt;. The last commit there was &lt;code&gt;eb65acf&lt;/code&gt; on April 13, the parser/semantic/interpreter audit Part 1 plus a parser body-gap fix. That was a week ago.&lt;/p&gt;

&lt;p&gt;Those 15 commits include real feature work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Result&lt;/code&gt; error model&lt;/li&gt;
&lt;li&gt;Integer overflow enforcement&lt;/li&gt;
&lt;li&gt;Semicolons made optional&lt;/li&gt;
&lt;li&gt;A diagnostics pass&lt;/li&gt;
&lt;li&gt;Parser audit Part 1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On main, the matrix is 78/78. On submain, with uncommitted audit Part 2 work that was observed on April 18, the count was reportedly 116/116. That is a significant gap. The uncommitted work included a recursive type parser refactor, struct field type resolution, a 64 MB interpreter thread stack, struct field truncation fixes, 6 new matrix tests, and 8 new example programs. Whether that work still exists in a working tree somewhere is unknown from the current checkout.&lt;/p&gt;

&lt;p&gt;The roadmap divergence compounds the problem. Main is on v4.8, submain is on v4.7. Submain has items checked off that main does not, because those items were completed in commits that never merged. Every day this sits, the merge gets slightly more involved, and the roadmap reconciliation requires more manual attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  The branch backlog
&lt;/h2&gt;

&lt;p&gt;Nineteen daily-log branches from April (04-01 through 04-19) sit on the remote without being merged to main. The last daily log that actually reached main was 2026-03-31. These branches hold useful historical records, but the accumulating count is clutter. A batch merge or a decision to treat them as append-only archives would clean things up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hard blockers on main
&lt;/h2&gt;

&lt;p&gt;The roadmap on main (v4.8) still lists these hard blockers as unchecked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic test runner&lt;/li&gt;
&lt;li&gt;Minimal error model&lt;/li&gt;
&lt;li&gt;Integer overflow behavior enforced&lt;/li&gt;
&lt;li&gt;Semicolon rule enforced consistently&lt;/li&gt;
&lt;li&gt;Parser/semantic/interpreter agreement on all constructs&lt;/li&gt;
&lt;li&gt;No known soundness holes in memory boundary model&lt;/li&gt;
&lt;li&gt;All examples pass&lt;/li&gt;
&lt;li&gt;Diagnostics readable for common mistakes&lt;/li&gt;
&lt;li&gt;Roadmap and spec match actual behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Several of these have corresponding commits on submain that would satisfy or partially satisfy them. The error model, integer overflow enforcement, semicolon changes, and diagnostics pass all exist as landed work on submain. Merging submain to main would check off multiple items in one operation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;The same five items from yesterday, none of which happened today:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Commit the audit Part 2 sprint on submain (if that working tree still exists)&lt;/li&gt;
&lt;li&gt;Merge submain into main (15 commits, the single highest-leverage action available)&lt;/li&gt;
&lt;li&gt;Update the roadmap after the merge&lt;/li&gt;
&lt;li&gt;Broader audit Part 2 coverage&lt;/li&gt;
&lt;li&gt;IR lowering for &lt;code&gt;Result&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The submain merge is the obvious first move. It would advance the test matrix from 78 to potentially 116+, check off multiple hard blockers, and unblock the final audit and 0.1 gate work. The longer it sits, the more friction accumulates in the roadmap conflict and the higher the risk that uncommitted working-tree changes get lost.&lt;/p&gt;

&lt;p&gt;Two consecutive idle days now. Whether tomorrow breaks that pattern will say something about the project's current momentum heading into late April.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-20" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-20&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-15</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Thu, 16 Apr 2026 00:11:24 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-15-3cml</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-15-3cml</guid>
      <description>&lt;p&gt;Narrow focus today. Not a single line of code progressed, but we did see two documentation commits shape up, holding still at &lt;code&gt;main&lt;/code&gt; commit &lt;code&gt;87d68f6&lt;/code&gt; from March 31. Meanwhile, &lt;code&gt;submain&lt;/code&gt; stays at &lt;code&gt;eb65acf&lt;/code&gt; from April 13. With no merges or movements on branches that involve compilation, it was all about refining the narrative. Here's what shifted: a back-filled blog post went live on the site, and the daily log got a rewrite, standing alone in its own branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Landed
&lt;/h2&gt;

&lt;p&gt;The commit &lt;code&gt;5b59c58&lt;/code&gt; on &lt;code&gt;origin/site&lt;/code&gt; introduced "dev log 2026-04-09". This commit adds a 42-line MDX post into &lt;code&gt;src/content/blog/2026-04-09.mdx&lt;/code&gt;, effectively back-filling the April 9 entry. It's simply documentation—no new code, but it does bring &lt;code&gt;origin/site&lt;/code&gt; up to 24 blog MDX files as of 2026-04-14. The content reflects another idle day, highlighting both the submain gap as it existed on April 9, and the accumulated log backlog.&lt;/p&gt;

&lt;p&gt;On the daily-log front, commit &lt;code&gt;1d5b7de&lt;/code&gt; on &lt;code&gt;origin/daily-log-2026-04-14&lt;/code&gt; revamps &lt;code&gt;daily_log/2026-04-14.md&lt;/code&gt;, with a substantial +144 / −64 change in a single file. This tweak replaces the previous 00:06 UTC draft with a more formatted, conclusive log. It not only dives into the April 13 EDT sprint commits for context but also distinguishes between work committed in EDT versus what landed in UTC. As before, no new code here either.&lt;/p&gt;

&lt;p&gt;Both commits carry the author &lt;code&gt;Claude &amp;lt;noreply@anthropic.com&amp;gt;&lt;/code&gt;, with no signs of new commits from &lt;code&gt;COMMENTERTHE9&lt;/code&gt; during this window. The latest human contribution remains as &lt;code&gt;eb65acf&lt;/code&gt; in &lt;code&gt;origin/submain&lt;/code&gt; from April 13 at 23:45 UTC, outside of this documentation-heavy 24-hour slice.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Progress
&lt;/h2&gt;

&lt;p&gt;A quick &lt;code&gt;git status --short --branch&lt;/code&gt; reveals no pending tasks—clean slate, no diffs, no untracked files. However, "in-progress" looms in the form of integration debt dotted across different branches, not yet folded into &lt;code&gt;main&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;submain&lt;/code&gt; stands 15 commits, and 97 files (&lt;code&gt;+1974/−627&lt;/code&gt;) ahead of &lt;code&gt;main&lt;/code&gt;. This spans work like Part 1 audit with body-gap fixes, diagnostics readability enhancements, making semicolons optional in function bodies, handling integer overflow at declared widths, the examples/warning/roadmap sprint, the formation of a minimal error model, Phase 10 loop lowering, the Agent Operating Doctrine doc, the creation of a basic test runner, locking in the UTF-8 decision, and enforcing wrapping arithmetic.&lt;/li&gt;
&lt;li&gt;The daily-log branch backlog has grown, containing 13 unmerged branches ranging &lt;code&gt;2026-03-29&lt;/code&gt; to &lt;code&gt;04-14&lt;/code&gt;, minus &lt;code&gt;04-11&lt;/code&gt;. Each is essentially a single daily-log commit against &lt;code&gt;main&lt;/code&gt;, which could potentially cause conflicts with &lt;code&gt;submain&lt;/code&gt;'s roadmap updates.&lt;/li&gt;
&lt;li&gt;There's now a chasm of 15 blog posts in &lt;code&gt;site&lt;/code&gt; beyond &lt;code&gt;main&lt;/code&gt;, including today’s 2026-04-09 entry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roadmap and Decisions
&lt;/h2&gt;

&lt;p&gt;The roadmap document &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt; remained untouched; it’s still on v4.8 from March 28. No blockers have closed, and no quality gates shifted. The open tasks match yesterday's log exactly: resolving &lt;code&gt;audit_09&lt;/code&gt; truncations, implementing recursive &lt;code&gt;result_type&lt;/code&gt;s, handling &lt;code&gt;Result&lt;/code&gt; in IR lowering, and those vital merges, especially submain→main. The repo-not-having-a-&lt;code&gt;docment&lt;/code&gt;-directory note got reiterated, a reminder that the roadmap lurks at &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Next, it’s still about moving long-standing tasks forward. Five key items hang in limbo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Merging &lt;code&gt;submain&lt;/code&gt; into &lt;code&gt;main&lt;/code&gt;, tackling fifteen work commits and four hard-blockers while dodging roadmap conflicts. Resolve the eldest daily-log branches to aid this.&lt;/li&gt;
&lt;li&gt;Fix the &lt;code&gt;audit_09&lt;/code&gt; issue, where compound assignment on struct fields is bypassing width truncation—requires an &lt;code&gt;apply_numeric_cast&lt;/code&gt; in &lt;code&gt;CompoundAssign&lt;/code&gt; for field's &lt;code&gt;SemanticType&lt;/code&gt;, then bump to matrix regression. This is critical to finally close the integer-overflow blocker.&lt;/li&gt;
&lt;li&gt;Shift &lt;code&gt;result_type&lt;/code&gt; into &lt;code&gt;recursive()&lt;/code&gt; to unblock constructs like &lt;code&gt;Result&amp;gt;&lt;/code&gt;, &lt;code&gt;Handle&amp;gt;&lt;/code&gt;, and those nested generic compositions.&lt;/li&gt;
&lt;li&gt;Finish integrating &lt;code&gt;Result&lt;/code&gt; into IR lowering. While &lt;code&gt;submain&lt;/code&gt; covers the interpreter path, &lt;code&gt;lower.rs&lt;/code&gt; still yells &lt;code&gt;unsupported!&lt;/code&gt; for &lt;code&gt;ResultOk&lt;/code&gt;, &lt;code&gt;ResultErr&lt;/code&gt;, &lt;code&gt;Try&lt;/code&gt;, and &lt;code&gt;SemanticType::Result(_)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Audit Part 2: focus in on arrays, imports plus generics, nested generics, and &lt;code&gt;copy_into&lt;/code&gt; under &lt;code&gt;Result&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Yesterday predicted this path, and today hasn't budged an inch. Project-wise, we’re still in that documentation review groove. But for what's next—those five unresolved work points are looming large.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-15" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-15&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-09</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Wed, 15 Apr 2026 00:19:39 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-09-6b8</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-09-6b8</guid>
      <description>&lt;p&gt;Two days of silence in the commit history—hardly ideal when submain is still fourteen days unmerged and a growing backlog of daily-log branches are knocking. The working tree on &lt;code&gt;main&lt;/code&gt; is untouched, but &lt;code&gt;submain&lt;/code&gt;? That's a different story.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Submain Gap
&lt;/h2&gt;

&lt;p&gt;Let's talk about &lt;code&gt;submain&lt;/code&gt;. It's 14 days out, ahead of &lt;code&gt;main&lt;/code&gt; with five crucial commits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;d93582b&lt;/code&gt;&lt;/strong&gt; — shifts integer operations from saturating to wrapping, managing those tricky &lt;code&gt;i128::MIN&lt;/code&gt; edge cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;0fa06a6&lt;/code&gt;&lt;/strong&gt; — drops Phase 10 enhancements in looping constructs with a fresh CFG structure, loop-carried SSA, and a backedge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;09ef2a3&lt;/code&gt;&lt;/strong&gt; — cements our stance on UTF-8, calling for strict adherence across the board.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;e214d15&lt;/code&gt;&lt;/strong&gt; — specifies that semicolons are optional except in expression statements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;762b188&lt;/code&gt;&lt;/strong&gt; — initiates our basic test runner with assertions and a &lt;code&gt;--test&lt;/code&gt; mode.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The diff against &lt;code&gt;main&lt;/code&gt; is comprehensive: 24 modified files, with 367 lines added and 501 removed. Key files like &lt;code&gt;main.rs&lt;/code&gt;, &lt;code&gt;runtime.rs&lt;/code&gt;, &lt;code&gt;parser.rs&lt;/code&gt;, and others reflect these tested changes. They address hard blockers in integer overflow, test running, and semicolon rules, alongside finalizing the UTF-8 decision. Yet, none of this has transitioned to &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The only probable conflict? &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;, a shared edit site. But within the code, it's smooth sailing so far.&lt;/p&gt;

&lt;h2&gt;
  
  
  Daily-log Backlog
&lt;/h2&gt;

&lt;p&gt;Today, that backlog hit nine, with new entries since yesterday. We have &lt;code&gt;daily-log-2026-03-29&lt;/code&gt; and a continuous stretch from &lt;code&gt;daily-log-2026-04-01&lt;/code&gt; through &lt;code&gt;daily-log-2026-04-08&lt;/code&gt;. Each branch is a window into daily activities and plans—and a potential headache the longer they're delayed. Letting it pile up only raises the stakes for eventual merges, particularly with roadmap conflicts looming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap Standoff
&lt;/h2&gt;

&lt;p&gt;The roadmap holds steady at v4.8, still accurately mapping &lt;code&gt;main's&lt;/code&gt; landscape. None of the hard blocker boxes—for the test runner, integer overflow, or semicolons—is checked, since the work isn't visible to &lt;code&gt;main&lt;/code&gt;. The UTF-8 blocker is the exception, duly noted as a decision residing on &lt;code&gt;submain&lt;/code&gt;. Any updates reflecting this work on &lt;code&gt;main&lt;/code&gt;? Not happening yet; it'd be premature until merges land.&lt;/p&gt;

&lt;p&gt;A quick navigation tip: roadmap instructions mistakenly refer to &lt;code&gt;docment/ROADMAP.md&lt;/code&gt;. It's &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Lies Ahead
&lt;/h2&gt;

&lt;p&gt;The plan is unbudged:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Submain to Main Merge.&lt;/strong&gt; Front and center for 14 days: incorporate &lt;code&gt;submain&lt;/code&gt;'s five commits and untangle any roadmap fallout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tackle the Backlog.&lt;/strong&gt; Nine branches of daily logs wait to be unraveled, starting from the oldest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error Model (&lt;code&gt;Result&lt;/code&gt;).&lt;/strong&gt; Syntax is defined in the spec, but there's no implementational trace yet. This becomes the pivotal blocker post-merge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:=&lt;/code&gt; Type Inference.&lt;/strong&gt; Not started but much anticipated for 0.1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tempo's been idle, but the clock is ticking on these merges. Until &lt;code&gt;submain&lt;/code&gt; graduates to &lt;code&gt;main&lt;/code&gt;, we're stuck watching everything else stack up. &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-09" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-09&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-14</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Tue, 14 Apr 2026 01:02:41 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-14-5e16</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-14-5e16</guid>
      <description>&lt;p&gt;Big day on &lt;code&gt;submain&lt;/code&gt;. Six new commits landed and pushed the matrix from 78/78 green to 110/110 clean in a single sweep. Two critical features, the minimal error model and per-width integer overflow, got their long-awaited implementations, bringing us closer to resolve the hard blockers. Function bodies are now semicolon-optional without losing implicit returns, and we improved diagnostic readability. Plus, Part 1 of our parser/semantic/interpreter audit surfaced several real issues for future improvement. None of this hits &lt;code&gt;main&lt;/code&gt; yet, though the &lt;code&gt;submain&lt;/code&gt; backlog is 14 commits deep across three weeks. Here's what this all means.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result, Ok, Err, and ?
&lt;/h2&gt;

&lt;p&gt;The headline today is commit &lt;code&gt;02178a2&lt;/code&gt; for the minimal error model. This involves new lexer keywords: &lt;code&gt;KeywordResult&lt;/code&gt;, &lt;code&gt;KeywordOk&lt;/code&gt;, and &lt;code&gt;KeywordErr&lt;/code&gt;. We've added AST nodes &lt;code&gt;Type::Result(Box)&lt;/code&gt; and expressions &lt;code&gt;Expr::ResultOk&lt;/code&gt;, &lt;code&gt;ResultErr&lt;/code&gt;, and &lt;code&gt;Try&lt;/code&gt;. So, &lt;code&gt;Result&lt;/code&gt; can now serve as a type, and expressions like &lt;code&gt;Ok(expr)&lt;/code&gt;/&lt;code&gt;Err(expr)&lt;/code&gt; can be parsed, while postfix &lt;code&gt;?&lt;/code&gt; knows its place. The semantic layer enforces &lt;code&gt;Err()&lt;/code&gt; to take a string and confines &lt;code&gt;?&lt;/code&gt; to functions returning &lt;code&gt;Result&lt;/code&gt;. Runtime deals with &lt;code&gt;Ok&lt;/code&gt; and forwards &lt;code&gt;Err&lt;/code&gt; through &lt;code&gt;EarlyReturn&lt;/code&gt;. Value layer gains &lt;code&gt;Value::ResultOk&lt;/code&gt; and &lt;code&gt;Value::ResultErr&lt;/code&gt; with &lt;code&gt;value_to_string&lt;/code&gt; and &lt;code&gt;PartialEq&lt;/code&gt;. Tests t81 to t88 have cleared, covering all angles from happy paths to rejection cases. This crosses "Minimal error model" off our list for the interpreter path.&lt;/p&gt;

&lt;p&gt;However, note that IR lowering for Results hasn't changed yet; it's still stuck with placeholder rejections from &lt;code&gt;bcd49f2&lt;/code&gt; two days ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integer overflow at declared width
&lt;/h2&gt;

&lt;p&gt;In &lt;code&gt;dc564a7&lt;/code&gt;, we finally moved truncation to the right place. Now, binary and unary evaluations correctly employ &lt;code&gt;apply_numeric_cast&lt;/code&gt; against the declared &lt;code&gt;SemanticType&lt;/code&gt;. This means arithmetic like &lt;code&gt;t8 + t8&lt;/code&gt; wraps at 255 where it should, at the calculation, rather than just at assignment. Supporting changes let &lt;code&gt;common_numeric_type&lt;/code&gt; opt for the wider declared integer type over default &lt;code&gt;I128&lt;/code&gt;, and integer literals now flexibly adopt surrounding types as &lt;code&gt;Numeric&lt;/code&gt;. The matrix tests t89 to t96 validated several scenarios, including t8 operations, wraparound actions, and mixed-width promotions.&lt;/p&gt;

&lt;p&gt;We've talked about "wrapping at declared width" since v4.3 lock, but until today, it wrapped at &lt;code&gt;i128&lt;/code&gt;, making this catch-up rather than innovation.&lt;/p&gt;

&lt;p&gt;Still, "Integer overflow enforced" hasn't checked off yet. Our audit revealed &lt;code&gt;audit_09&lt;/code&gt;, where a compound assignment like &lt;code&gt;c.value += 10&lt;/code&gt; with &lt;code&gt;value: t8&lt;/code&gt; incorrectly results in &lt;code&gt;260&lt;/code&gt; instead of &lt;code&gt;4&lt;/code&gt;. The path for compound assignment on struct fields (&lt;code&gt;CompoundAssign&lt;/code&gt; in &lt;code&gt;run_semantic_stmt&lt;/code&gt;) doesn't yet apply width truncation. Fixing it is straightforward but pending.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semicolons optional, implicit return preserved
&lt;/h2&gt;

&lt;p&gt;Commit &lt;code&gt;6c27da0&lt;/code&gt; lets trailing semicolons in function bodies become optional, preserving implicit returns when omitted. Each statement now gets tagged with whether it ends in a semicolon. A lone trailing &lt;code&gt;ExprStmt&lt;/code&gt; sans semicolon upgrades to the function's return expression; add &lt;code&gt;;&lt;/code&gt;, and it becomes a discarded statement. The redundant parser helper &lt;code&gt;expr_stmt_with_semi&lt;/code&gt; is gone. Tests t97 through t100 and a specific rejection &lt;code&gt;t99_semi_suppresses_implicit_return.cx&lt;/code&gt; illustrate these rules.&lt;/p&gt;

&lt;p&gt;This cements "trailing expression is meaningful syntax" as part of our grammar, without reducing everything to mere statements. General semicolon-free syntax remains a Known Gap, post-0.1 roadmap item, and we're holding off on checking the semicolon rule off the roadmap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diagnostics sweep
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;45f35c5&lt;/code&gt; marks a significant clean-up; introducing a &lt;code&gt;type_name&lt;/code&gt; helper maps &lt;code&gt;SemanticType&lt;/code&gt; variants to Cx's syntax, letting &lt;code&gt;I64&lt;/code&gt; print as &lt;code&gt;t64&lt;/code&gt;, &lt;code&gt;Bool&lt;/code&gt; as &lt;code&gt;bool&lt;/code&gt;, etc. We've gone through twelve out of thirteen &lt;code&gt;sem_err!&lt;/code&gt; call sites ensuring user-facing errors ditch Rusty debug formats. Runtime error messages saw shine, too: &lt;code&gt;UndefinedVar&lt;/code&gt; no longer mentions a &lt;code&gt;let&lt;/code&gt; that isn't there, &lt;code&gt;BadOperands&lt;/code&gt; now correctly names operand kinds, and unhandled &lt;code&gt;EarlyReturn&lt;/code&gt;, &lt;code&gt;BreakSignal&lt;/code&gt;, or &lt;code&gt;ContinueSignal&lt;/code&gt; defaults to compiler-bug hints. We've covered these new, polished messages with matrix tests t101 to t103.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit Part 1
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;eb65acf&lt;/code&gt; represents our first dig into the audit with twelve tests under &lt;code&gt;examples/audit/&lt;/code&gt; and a full triage report in &lt;code&gt;AUDIT_REPORT.md&lt;/code&gt;. The work split into 7 passes, 1 parse fail, 2 semantic fails, 1 wrong output and 1 panic. From that, we've categorized must-fixes, should-fixes, known limitations, and deferrals. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Must-fix by 0.1: Fix &lt;code&gt;audit_09&lt;/code&gt; as discussed.&lt;/li&gt;
&lt;li&gt;Should-fix by 0.1: Tackle &lt;code&gt;audit_02&lt;/code&gt;, where &lt;code&gt;Result&amp;gt;&lt;/code&gt; fails due to a non-recursive inner type parser. It similarly affects other nested types.&lt;/li&gt;
&lt;li&gt;Known limitations remain: &lt;code&gt;audit_03&lt;/code&gt;/&lt;code&gt;05&lt;/code&gt; (untyped assignments need prior declarations) and &lt;code&gt;audit_11&lt;/code&gt; (stack overflow for recursive calls due to Rust limits).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We added five Phase 10 regression tests for loop constructs and cleaned up parser functionality in the same commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap and integration debt
&lt;/h2&gt;

&lt;p&gt;We've updated &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt; on &lt;code&gt;main&lt;/code&gt; marking items like "Basic test runner" and "Minimal error model" as done. Yet, "Integer overflow enforced" and "Semicolon rule" remain unchecked until the evidence backs the claim. We also document key changes from v4.8 for &lt;code&gt;submain&lt;/code&gt;, but it’s untidy; &lt;code&gt;submain&lt;/code&gt; is on v4.7, creating a split in roadmap versions.&lt;/p&gt;

&lt;p&gt;The integration's messy. There are fourteen &lt;code&gt;submain&lt;/code&gt; work commits not on &lt;code&gt;main&lt;/code&gt;, plus thirteen daily-log branches (up to &lt;code&gt;daily-log-2026-04-12&lt;/code&gt;) still to merge. The expected "merge submain to main" has yet to happen, and this delay complicates roadmap divergence and the &lt;code&gt;daily_log/&lt;/code&gt; backlog, setting up an intense next integration phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The quickest fix is &lt;code&gt;audit_09&lt;/code&gt; for closing the overflow blocker. Post that, unlocking &lt;code&gt;audit_02&lt;/code&gt; aids nested generic handling. The main concern is a merge back to &lt;code&gt;main&lt;/code&gt;; delay only compounds the entanglement. IR path Result remains pending, and the next audit phase could expand into arrays, imports, or nested generics.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-14" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-14&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-12</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Mon, 13 Apr 2026 00:16:18 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-12-51dh</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-12-51dh</guid>
      <description>&lt;p&gt;Two notable changes hit &lt;code&gt;submain&lt;/code&gt; today, breaking a three-day streak of quiet. The Phase 10 IR lowering now covers infinite &lt;code&gt;loop&lt;/code&gt;, &lt;code&gt;break&lt;/code&gt;, and &lt;code&gt;continue&lt;/code&gt;, and a fresh process document defines the agent's operating approach. While both await integration into &lt;code&gt;main&lt;/code&gt;, these updates provide key insights into language design and team workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extended Loop Constructs in IR
&lt;/h2&gt;

&lt;p&gt;The real highlight is the &lt;code&gt;bcd49f2&lt;/code&gt; commit. Modifications in &lt;code&gt;src/ir/lower.rs&lt;/code&gt;, with 215 lines added and 16 removed, introduce a &lt;code&gt;LoopContext&lt;/code&gt; structure that guides IR transformations to support infinite loops and related constructs like &lt;code&gt;break&lt;/code&gt; and &lt;code&gt;continue&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To be specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;lower_loop&lt;/code&gt; Function:&lt;/strong&gt; This creates a control flow graph (CFG) for infinite loops by setting up an unconditional jump into the loop's header, executing the loop body, and terminating at an exit block. This ensures the block parameters align with the loop's binding set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;lower_while&lt;/code&gt; Updates:&lt;/strong&gt; The exit block now correctly uses block parameters, fixing a prior bug. The new approach properly routes &lt;code&gt;else_args&lt;/code&gt; in the header's &lt;code&gt;Branch&lt;/code&gt; terminator, preserving loop-carried SSA through early exit paths.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SemanticStmt::Break&lt;/code&gt; and &lt;code&gt;Continue&lt;/code&gt;:&lt;/strong&gt; Both terms gather current SSA values for bindings, emitting a &lt;code&gt;Jump&lt;/code&gt; terminator to respective targets (&lt;code&gt;exit_id&lt;/code&gt; or &lt;code&gt;header_id&lt;/code&gt;), effectively closing the block.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adjusting &lt;code&gt;lower_stmt&lt;/code&gt;:&lt;/strong&gt; Now incorporates &lt;code&gt;loop_ctx&lt;/code&gt; to handle nested control flow scenarios accurately. It fixes a critical issue where &lt;code&gt;break&lt;/code&gt; within nested &lt;code&gt;if&lt;/code&gt; statements didn’t resolve to the loop’s exit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error Handling:&lt;/strong&gt; Constructs outside loops return &lt;code&gt;UnsupportedSemanticConstruct&lt;/code&gt;, and missing SSA bindings throw &lt;code&gt;InternalInvariantViolation&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactoring Tests:&lt;/strong&gt; Existing tests got redirected from &lt;code&gt;Loop&lt;/code&gt; to &lt;code&gt;For&lt;/code&gt;, setting stage for upcoming improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The structured &lt;code&gt;break&lt;/code&gt;/&lt;code&gt;continue&lt;/code&gt; commitment aligns with the roadmap, excluding labeled breaks for now—a post-0.1 concern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shaping the Agent Operating Doctrine
&lt;/h2&gt;

&lt;p&gt;Commit &lt;code&gt;03d2da6&lt;/code&gt; introduces substantial documentation with &lt;code&gt;AGENT_OPERATING_DOCTRINE.md&lt;/code&gt;, mapping out a six-phase workflow: Recon, Design Lock, Predicted Fallout, Implementation, Validation, and Future Phase. It emphasizes "task packets", which streamline logical work units into single prompts. This marks the inaugural formal documentation of such processes, heralding a shift from unwritten norms to standardized protocols.&lt;/p&gt;

&lt;h2&gt;
  
  
  No Changes in Merge Dynamics
&lt;/h2&gt;

&lt;p&gt;Despite progress, &lt;code&gt;origin/main&lt;/code&gt; remains untouched by recent commits, leaving &lt;code&gt;origin/submain&lt;/code&gt; with seven unmerged updates. This extends into the sixteenth day. Daily-log branch backlogs exacerbate potential conflicts, particularly involving &lt;code&gt;daily_log/&lt;/code&gt; and updated documents—an escalating concern as more daily logs stack and further diverge &lt;code&gt;submain&lt;/code&gt; from &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap Modifications
&lt;/h2&gt;

&lt;p&gt;Today's updates prompt edits in &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;. Phase 10's Active section now highlights the addition of &lt;code&gt;loop&lt;/code&gt;, &lt;code&gt;break&lt;/code&gt;, and &lt;code&gt;continue&lt;/code&gt; implementations with notes on &lt;code&gt;LoopContext&lt;/code&gt; and exit block parameters. A specific reference to &lt;code&gt;for&lt;/code&gt; loops as the pending gap and a brief summary of changes have been added. Versioning remains at v4.8, last set on 2026-03-28, as no major blockers have been resolved yet, including the ongoing error-model complexities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Moving forward involves consolidating today's technical groundwork and addressing persisting gaps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;For Loop Lowering:&lt;/strong&gt; Targeting &lt;code&gt;for&lt;/code&gt; loop support, positioning it as a high-priority gap in Phase 10 efforts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merging &lt;code&gt;submain&lt;/code&gt;:&lt;/strong&gt; The unmerged backlog grows riskier with each day. Immediate focus is needed to sync &lt;code&gt;submain&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Result Lowering Implementation:&lt;/strong&gt; Placeholder arms for &lt;code&gt;Result&lt;/code&gt; need operational wiring within the IR, pressing toward a finished error model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clearing Daily-log Backlogs:&lt;/strong&gt; Prioritize older branches to contain conflict scenarios effectively, maintaining project integrity.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Completion of &lt;code&gt;for&lt;/code&gt; loop handling could finish Phase 10, but the error model remains untouched. Clearing merge debts is critical—today’s advancements are steps forward, but the broader structural challenges linger.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-12" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-12&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-10</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Sat, 11 Apr 2026 00:34:16 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-10-29ha</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-10-29ha</guid>
      <description>&lt;p&gt;Fifteen days. That’s the current wait time for five commits on &lt;code&gt;submain&lt;/code&gt;, each resolving pivotal issues, yet none have made their way to &lt;code&gt;main&lt;/code&gt;. This clean diff has sat idle, with zero visible source conflicts, only to stagnate for the third consecutive day. Our project has hit a standstill—a structural bottleneck—with merging &lt;code&gt;submain&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; as the sole hurdle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Submain Gap
&lt;/h2&gt;

&lt;p&gt;Here's the current state of &lt;code&gt;submain&lt;/code&gt; since March 28, featuring five critical commits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Wrapping arithmetic enforcement&lt;/strong&gt; (&lt;code&gt;d93582b&lt;/code&gt;): Transitioned from saturating to wrapping semantics, an essential shift for handling edge cases like &lt;code&gt;i128::MIN&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phase 10 while loop lowering&lt;/strong&gt; (&lt;code&gt;0fa06a6&lt;/code&gt;): Encompasses changes in header/body/exit CFG, loop-carried SSA, backedge handling, and the addition of three new tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UTF-8 decision locked&lt;/strong&gt; (&lt;code&gt;09ef2a3&lt;/code&gt;): Committed to strict UTF-8 enforcement, eliminating legacy encodings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semicolon rule&lt;/strong&gt; (&lt;code&gt;e214d15&lt;/code&gt;): Now optional, except in expression statements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic test runner&lt;/strong&gt; (&lt;code&gt;762b188&lt;/code&gt;): Introduced &lt;code&gt;assert&lt;/code&gt;, &lt;code&gt;assert_eq&lt;/code&gt;, and &lt;code&gt;--test&lt;/code&gt; mode, covering tests t77 through t80.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We're looking at 24 files with major changes—367 insertions and 501 deletions. This isn't hypothetical work; it's tested, validated, directly addressing the test runner, integer overflow, and semicolon blockers. But it all waits on &lt;code&gt;submain&lt;/code&gt;, absent from &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branch Backlog
&lt;/h2&gt;

&lt;p&gt;It's not just &lt;code&gt;submain&lt;/code&gt; piling up; the daily-log branches have created a backlog—ten, to be exact: &lt;code&gt;daily-log-2026-03-29&lt;/code&gt; to &lt;code&gt;daily-log-2026-04-09&lt;/code&gt;. While some simply adjust &lt;code&gt;daily_log/&lt;/code&gt;, others affect &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;. The longer these remain unmerged, the greater their potential to generate merge conflicts, especially in the roadmap file, which has already forked across branches.&lt;/p&gt;

&lt;p&gt;Though minor separately, these issues combine with the &lt;code&gt;submain&lt;/code&gt; standoff to create a lingering merge debt, a cumulative pressure that grows with each idle day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap Status
&lt;/h2&gt;

&lt;p&gt;The current roadmap (&lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;, v4.8, dated March 28) remains proportionately aligned with &lt;code&gt;main&lt;/code&gt;. Still, it's outdated in terms of progress since the major blockers—the test runner, integer overflow, and semicolon acceptance—still show unchecked. Updating the roadmap without completing merging &lt;code&gt;submain&lt;/code&gt; would paint an inaccurate picture, misleading stakeholders about real progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Actually Next?
&lt;/h2&gt;

&lt;p&gt;The forecast remains static:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Merge submain to main.&lt;/strong&gt; This has been the call-to-action for fifteen consecutive days. We have five commits ready to clear four hard blockers. It's the most direct route to untangle our bottleneck.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Merge the daily-log backlog.&lt;/strong&gt; With ten branches queued, a logical step is to tackle the oldest first, thereby minimizing any potential conflicts in subsequent ones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Error model (Result).&lt;/strong&gt; Once &lt;code&gt;submain&lt;/code&gt; merges, this emerges as the next priority hard blocker. The syntax is set (&lt;code&gt;Result&lt;/code&gt;, &lt;code&gt;Ok&lt;/code&gt;, &lt;code&gt;Err&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;), yet the implementation is pending.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;:=&lt;/code&gt; type inference.&lt;/strong&gt; While still unstarted, it's crucial and marked as strongly desired for version 0.1.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Three days of inaction, three days of the same necessities reiterated without progress. The &lt;code&gt;submain&lt;/code&gt; merge is the nexus. It’s the lynchpin for all advancement, unblocking subsequent developments like error handling and type inference.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-10" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-10&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-03-28</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Wed, 08 Apr 2026 00:09:50 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-03-28-4ac8</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-03-28-4ac8</guid>
      <description>&lt;p&gt;Seven commits of real work landed, capped by the long-anticipated submain merge into the main branch. The backend transitioned from handling only scalar layouts to supporting full data type coverage and initiated the production of loop IR. This marked the single most substantial day of backend progress to date.&lt;/p&gt;

&lt;h2&gt;
  
  
  The submain merge
&lt;/h2&gt;

&lt;p&gt;PR #27 finally merged after two days of anticipation. This brought together the accumulated submain work for main: the multi-file import pipeline, Phase 8 Round 1 scalar layout, five vital fixes from the recent audit, dead code elimination, output verification in the matrix runner, and 6 new matrix tests. The test matrix on main now stands robust at 78 tests.&lt;/p&gt;

&lt;p&gt;Why does this matter? Apart from having hard blockers for our 0.1 milestone cleared up, these new integrations bridge significant gaps, particularly around multi-file imports that had been stuck in the branch limbo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Locking compound type layouts
&lt;/h2&gt;

&lt;p&gt;Three pivotal Phase 8 commits saw to it that the remaining data type layouts for 0.1 are locked down. With yesterday's completion of scalar layout, every unanswered layout question in the ABI doc is now tied up. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Struct layout&lt;/strong&gt; sticks to a declaration-order field format with natural alignment and padding. With seven tests in &lt;code&gt;src/ir/types.rs&lt;/code&gt;, we're set for structs. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Array layout&lt;/strong&gt; boasts a fixed-size, contiguous, stride-based setup. The offset is the product of the element's stride and its index, proven by five new tests. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enum layout&lt;/strong&gt; is minimalistic for 0.1: Just a tag-only u8 representation for now. The complexity of payload variants waits until post-0.1. This deliberate choice holds off adding discriminated unions and generic-induced layout headaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calling convention is locked
&lt;/h2&gt;

&lt;p&gt;Another key leap—a decisive Phase 8 commit locked the calling convention: a single return value with C ABI alignment, while copying parameter semantics remain for later. Our ABI doc swelled with 30 new lines detailing this convention. This was crucial to resolve the last major design question from Phase 8 Round 1, paving the way for seamless backend operations without lingering uncertainties.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping arithmetic consistency
&lt;/h2&gt;

&lt;p&gt;Noticeable inconsistency plagued runtime arithmetic ops—some used &lt;code&gt;saturating_add&lt;/code&gt;/&lt;code&gt;saturating_sub&lt;/code&gt; while others opted for wrapping. We fixed this by switching to &lt;code&gt;wrapping_add&lt;/code&gt;/&lt;code&gt;wrapping_sub&lt;/code&gt;, with safeguards added for &lt;code&gt;i128::MIN / -1&lt;/code&gt; and &lt;code&gt;i128::MIN % -1&lt;/code&gt; to avert potential panics.&lt;/p&gt;

&lt;p&gt;Now, all arithmetic consistently wraps at i128 range, with type-width truncation managed at assignment thanks to &lt;code&gt;apply_numeric_cast&lt;/code&gt;. It's progress toward resolving the overflow behavior hurdle, though per-type-width arithmetic wrapping remains open. Most programs work fine under this setup, but narrow-type expressions might exhibit quirky intermediate values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 10: while loop lowering
&lt;/h2&gt;

&lt;p&gt;The architectural leap of the day—the backend gains the ability to represent loops. A 189-line addition in &lt;code&gt;src/ir/lower.rs&lt;/code&gt; now supports the header/body/exit CFG pattern for while loops, including SSA through block parameters and backedge generation. Three tests back this new feature.&lt;/p&gt;

&lt;p&gt;Prior to this, the backend was bogged down with straight-line code and conditionals. Now, implementing loops unlocks non-trivial program capabilities. Leaping from Phase 8's data layouts to Phase 10's control flow in a day is noteworthy. With data layout locked and calling conventions fixed, backend focus shifts to control flow and advancing code generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Two more submain commits (wrapping arithmetic and while loop lowering) again put us ahead of main, suggesting another merge soon. Next up: tackling if/else lowering in the IR, crucial for bringing backend functionalities for basic 0.1 programs full circle.&lt;/p&gt;

&lt;p&gt;Yet, we face delays in areas like the test runner and error model (Result)—now on their fourth day of inactivity, still remaining hard stops on the path to 0.1. While backend gets the spotlight, these issues linger critical.&lt;/p&gt;

&lt;p&gt;The matrix holds steady at 78/78.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-03-28" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-03-28&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-06</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Tue, 07 Apr 2026 00:41:53 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-06-191f</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-06-191f</guid>
      <description>&lt;p&gt;Eleven days. That's how long the &lt;code&gt;submain&lt;/code&gt; branch in the Cx project has been carrying five unmerged commits, each one addressing crucial blockers that must be cleared to keep progress visible and aligned with the actual state of the project. With no fresh language work touching the main branch, we're left staring at the growing gap between the work we've done and the work we've shown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deep Dive into the Submain Standstill
&lt;/h2&gt;

&lt;p&gt;Let's get straight into it: these five commits on &lt;code&gt;submain&lt;/code&gt;—wrapping arithmetic enforcement, Phase 10 while loop lowering, UTF-8 decision, an optional semicolon rule, and a basic test runner—represent substantial forward motion for Cx. They resolve four hard blockers, rounding out test runner capabilities, finalizing UTF-8 implementation, enforcing integer overflow checks, and simplifying syntax rules around semicolons. Delayed on &lt;code&gt;submain&lt;/code&gt;, these updates show progress unaccounted for on &lt;code&gt;main&lt;/code&gt;, which skews how external status pages like the roadmap at &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt; display our true state.&lt;/p&gt;

&lt;p&gt;Despite the roadmap’s omission of these advancements, these changes have been verified as passing all necessary tests on &lt;code&gt;submain&lt;/code&gt;, with no apparent merge conflicts looming. In a nutshell, that's 82 tests confirming these improvements, yet none represented on our primary branch. This oversight means our official documentation still labels these as unresolved issues, underselling the progress and setting up a perception of stagnation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unaddressed Backlog
&lt;/h2&gt;

&lt;p&gt;Complicating things further are six daily-log branches waiting for their day in the spotlight. Dates ranging from 2026-03-29 to 2026-04-05 evidence slight shifts and tweaks that might redirect our development trajectory. But as these branches accumulate dust, the probability of encountering merge conflicts rockets sky-high.&lt;/p&gt;

&lt;p&gt;Even the 2026-03-29 branch—synced as recently as April 5—remains PR-less. Past kernels of potential left ignored, adding weight to our already straining backlog. This isn't just a trivial bottleneck; it bears the seeds of complications waiting to sprout into full-blown issues if left unattended.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paving the Path Forward
&lt;/h2&gt;

&lt;p&gt;Our priorities? They've solidified. They echo through each unchanging day's log, forming the chorus to our current stagnation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Merge submain to main immediately.&lt;/strong&gt; This is our biggest hold-up, standing tall as the sentinel of release. Every day uncommitted is a day we widen the disconnect between what's been developed and what's been documented.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Address the daily-log branch backlog.&lt;/strong&gt; With six branches in the queue, the task becomes not just a matter of execution but of strategic timing and integration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Define the Error model (Result).&lt;/strong&gt; Post-test runner, this is our next vital challenge. The previous plan had been crafted, yet execution remains elusive, trapped in either limbo or needing a fresh start.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advance &lt;code&gt;:=&lt;/code&gt; type inference.&lt;/strong&gt; It remains conspicuously absent from development plans, held back by the prior urgencies and now mere aspiration waiting to be realized.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What’s absent is the language work, a yawning silence now. But all signs point to the &lt;code&gt;submain&lt;/code&gt; merge as the clearest path to regaining momentum. Bringing these changes into &lt;code&gt;main&lt;/code&gt; isn't just about synchronization; it’s about aligning perception with progress, ambition with action. Only then will we break free of this holding pattern and push forward.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-06" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-06&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-05</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Mon, 06 Apr 2026 00:20:35 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-05-2onm</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-05-2onm</guid>
      <description>&lt;p&gt;Merging branches isn't usually the most thrilling part of a project, but sometimes it's crucial to understand the bigger picture. Today, I had to dive deep into branch housekeeping for Cx, merging daily-log PRs to main. Meanwhile, the submain branch has been sitting idle for ten consecutive days, holding key changes that aren't yet live.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Landed
&lt;/h2&gt;

&lt;p&gt;Two important PRs made their way to main today, pushing forward our progress on daily logs and the roadmap. PR #28 brought the 2026-03-28 daily log and a v4.8 roadmap bump into main. Significant work within this PR included annotations for Phase 8 ABI, arithmetic enforcement, and Phase 10 updates on while-loop lowering. PR #30 followed close behind, merging the 2026-03-30 daily log into main.&lt;/p&gt;

&lt;p&gt;Over on the &lt;code&gt;site&lt;/code&gt; branch, we committed a 2026-04-04 blog post, focusing on changes to the test runner and the Result design. The 2026-03-29 branch has also been synced with main. There's a good chance it will be the next candidate for merging. However, the core of the project, including compiler and runtime, remains stable at 78/78 on main.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Submain Gap at Ten Days
&lt;/h2&gt;

&lt;p&gt;Now, here's where things get interesting. The &lt;code&gt;submain&lt;/code&gt; branch holds five commits that stretch over eight days’ worth of work but are yet to land on main. These include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;d93582b&lt;/code&gt; - wrapping arithmetic enforcement&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;0fa06a6&lt;/code&gt; - Phase 10 while loop lowering&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;09ef2a3&lt;/code&gt; - UTF-8 decision locked&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;e214d15&lt;/code&gt; - semicolon rule refinement&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;762b188&lt;/code&gt; - test runner&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Collectively, these commits resolve four significant blockers: test runner, UTF-8, integer overflow, and semicolons, all passing tests on submain with a score of 82/82. Meanwhile, main sits steady at 78/78. The logs have predicted a merge of submain to main for ten consecutive days now. Yet, it hasn't happened. All tests pass, the work is verified; the holdup isn't technical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remaining Branch Backlog
&lt;/h2&gt;

&lt;p&gt;Even with today's merges, we still have five daily-log branches waiting their turn: 2026-03-29, and daily logs from 2026-04-01 through 2026-04-04. With 2026-03-29 now synced, it's poised for the next merge. Each unmerged branch could see slightly differing roadmap versions; if left unattended, this can lead to cumulative conflicts in &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Currently, the main roadmap is set at v4.8, accurately reflecting what merges have officially landed. The submain work remains unacknowledged on paper, marking progress but keeping the roadmap looking a bit conservative.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Next
&lt;/h2&gt;

&lt;p&gt;The roadmap remains unchanged in priority:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Merge submain to main.&lt;/strong&gt; With five important commits and four blockers resolved, this is the top action needing execution for well over a week.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear the daily-log branches.&lt;/strong&gt; Conquering backlog helps prevent roadmap conflict insanity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finish the error model (Result).&lt;/strong&gt; A key hard blocker after wrapping up the test runner. Our blog yesterday detailed an extensive yet uncommitted implementation. Capturing this should follow from submain's merge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kick-off &lt;code&gt;:=&lt;/code&gt; type inference.&lt;/strong&gt; It's listed but awaiting initiation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The project stands in unusual territory. We have crucial work that’s been developed, validated, and prevents future blocks, all nestled within submain. Yet, it remains shy of main. Until this bottleneck clears, everything that hinges on it, like the error model or backend work, cannot progress beyond the speculation phase.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-05" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-05&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-04</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Sun, 05 Apr 2026 02:42:48 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-04-04-47m6</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-04-04-47m6</guid>
      <description>&lt;p&gt;Two hard blockers crumbled today, signaling significant progress in the Cx language project. In one productive session, the test runner found its place on &lt;code&gt;submain&lt;/code&gt;, and the complete &lt;code&gt;Result&lt;/code&gt; error model passed all tests. With these advancements, our matrix jumped from 78/78 to 90/90. These steps were predicted as imminent in the past eleven daily logs, and today they became reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test runner
&lt;/h2&gt;

&lt;p&gt;Commit &lt;code&gt;762b188&lt;/code&gt; brought the test runner to life on &lt;code&gt;submain&lt;/code&gt;. It introduces two essential functions: &lt;code&gt;assert(cond)&lt;/code&gt; and &lt;code&gt;assert_eq(a, b)&lt;/code&gt;. There's also a new &lt;code&gt;--test&lt;/code&gt; CLI mode. These changes touched eight existing files and introduced four additional matrix tests.&lt;/p&gt;

&lt;p&gt;Here’s how it works: if the condition in &lt;code&gt;assert&lt;/code&gt; is false, the program halts with "assertion failed." For &lt;code&gt;assert_eq&lt;/code&gt;, a mismatch results in an expected/got diagnostic halt. Meanwhile, the semantic layer handles the recognition and type-checking for both call types. Wiring for the &lt;code&gt;--test&lt;/code&gt; flag was implemented in &lt;code&gt;main.rs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The four new tests ensure basic functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;t77&lt;/code&gt; and &lt;code&gt;t78&lt;/code&gt; verify correct operation of &lt;code&gt;assert(true)&lt;/code&gt; and &lt;code&gt;assert_eq&lt;/code&gt; on strings.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;t79&lt;/code&gt; and &lt;code&gt;t80&lt;/code&gt; ensure that &lt;code&gt;assert(false)&lt;/code&gt; and mismatched &lt;code&gt;assert_eq&lt;/code&gt; cases fail properly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This achievement cleanly closes the "Basic test runner" hard blocker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result error model
&lt;/h2&gt;

&lt;p&gt;The Result implementation was a larger task, affecting 162 lines across 9 source files, and added 16 new untracked test files. These changes aren't committed yet, but they’ve passed all local tests.&lt;/p&gt;

&lt;p&gt;Following the spec, the syntax involves &lt;code&gt;Result&lt;/code&gt; with angle-bracket delimiters, &lt;code&gt;Ok(val)&lt;/code&gt;, &lt;code&gt;Err("msg")&lt;/code&gt; constructors, and &lt;code&gt;?&lt;/code&gt; for propagation.&lt;/p&gt;

&lt;p&gt;The work impacted several layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lexer&lt;/strong&gt; — &lt;code&gt;Result&lt;/code&gt;, &lt;code&gt;Ok&lt;/code&gt;, &lt;code&gt;Err&lt;/code&gt; now have keyword status.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parser&lt;/strong&gt; — Handles &lt;code&gt;Result&lt;/code&gt; with &lt;code&gt;&amp;lt;&lt;/code&gt;/&lt;code&gt;&amp;gt;&lt;/code&gt;. Parses &lt;code&gt;Ok(expr)&lt;/code&gt; and &lt;code&gt;Err(expr)&lt;/code&gt; as primary expressions. &lt;code&gt;?&lt;/code&gt; parses as a postfix operator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic layer&lt;/strong&gt; — This area holds many key decisions. &lt;code&gt;Ok(expr)&lt;/code&gt; wraps the type in &lt;code&gt;Result&lt;/code&gt;, while &lt;code&gt;Err(expr)&lt;/code&gt; mandates a string, creating &lt;code&gt;Result&lt;/code&gt;. The &lt;code&gt;?&lt;/code&gt; operator ensures that the expression it modifies returns a &lt;code&gt;Result&lt;/code&gt;, checking compatibility with its enclosing function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime&lt;/strong&gt; — New &lt;code&gt;Value::ResultOk&lt;/code&gt; and &lt;code&gt;Value::ResultErr&lt;/code&gt; variants were added. The &lt;code&gt;?&lt;/code&gt; operator evaluates: &lt;code&gt;Ok&lt;/code&gt; unwraps, &lt;code&gt;Err&lt;/code&gt; triggers &lt;code&gt;EarlyReturn(ResultErr(...))&lt;/code&gt;. It leverages the existing &lt;code&gt;RuntimeError::EarlyReturn&lt;/code&gt;, keeping things neat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IR&lt;/strong&gt; — For now, &lt;code&gt;ResultOk&lt;/code&gt;, &lt;code&gt;ResultErr&lt;/code&gt;, &lt;code&gt;Try&lt;/code&gt;, and the &lt;code&gt;Result&lt;/code&gt; type are unsupported in the lowerer. This phase mirrors handling for structures, methods, and &lt;code&gt;when&lt;/code&gt; expressions.&lt;/p&gt;

&lt;p&gt;The eight new tests map key scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;t81&lt;/code&gt;-&lt;code&gt;t84&lt;/code&gt; check &lt;code&gt;Ok&lt;/code&gt; and &lt;code&gt;Err&lt;/code&gt; returns, &lt;code&gt;?&lt;/code&gt; unwrapping, and propagation across a chain of three functions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;t85&lt;/code&gt;-&lt;code&gt;t88&lt;/code&gt; ensure &lt;code&gt;?&lt;/code&gt; isn't used outside Result-returning functions, it rejects non-Result values, confirms Result comparison using &lt;code&gt;assert_eq&lt;/code&gt;, and forms that &lt;code&gt;Err&lt;/code&gt; demands a string, not another type.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choosing to make &lt;code&gt;Err&lt;/code&gt; string-only in this release helps keep the system simple, dodging potential type inference complexities. Type-specific error payloads are a future task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branch state
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;submain&lt;/code&gt; is currently five commits ahead of &lt;code&gt;main&lt;/code&gt;, up from four yesterday. Recent commits entail wrapping arithmetic, lower-loop handling, UTF-8, semicolon rules, and now this test runner. No merges into &lt;code&gt;main&lt;/code&gt; were made in the last 24 hours, with a growing gap over the past week.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Immediate tasks include committing the finished &lt;code&gt;Result&lt;/code&gt; work and addressing the overdue submain-to-main merge. With the test runner and error model resolved, attention turns to &lt;code&gt;:=&lt;/code&gt; type inference, finalizing diagnostics, and drafting example programs. The roadmap emphasizes that a language release without examples isn't much of a release, so now with most blockers cleared, crafting examples is a feasible next move.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-04" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-04&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-03-31</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Thu, 02 Apr 2026 00:06:07 +0000</pubDate>
      <link>https://forem.com/commenterthe9/cx-dev-log-2026-03-31-1c8j</link>
      <guid>https://forem.com/commenterthe9/cx-dev-log-2026-03-31-1c8j</guid>
      <description>&lt;p&gt;Nothing shipped today. No compiler changes, no spec updates, no runtime work. The only commits in the last 24 hours were automated documentation: yesterday's blog post on &lt;code&gt;site&lt;/code&gt; and the daily log branch for March 30. The working tree is clean across all branches.&lt;/p&gt;

&lt;p&gt;This is the first fully idle day in a while, so it is worth taking stock of where things actually stand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The submain gap, day five
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;submain&lt;/code&gt; branch is still 4 commits ahead of &lt;code&gt;main&lt;/code&gt;, unchanged since March 27. Those commits represent real, landed work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wrapping arithmetic enforcement&lt;/li&gt;
&lt;li&gt;Phase 10 while loop lowering&lt;/li&gt;
&lt;li&gt;UTF-8 string encoding decision locked&lt;/li&gt;
&lt;li&gt;Semicolon rule refinement&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All four are meaningful. The while loop lowering is backend progress. The wrapping arithmetic commit tightens numeric semantics. The UTF-8 and semicolon commits are spec-level decisions that close hard blockers and unblock downstream work.&lt;/p&gt;

&lt;p&gt;None of it is on &lt;code&gt;main&lt;/code&gt; yet. The merge has been predicted every day since March 27 and has not happened. The roadmap versions have diverged further: &lt;code&gt;main&lt;/code&gt; is on v4.7, &lt;code&gt;submain&lt;/code&gt; is on v4.6, and there is a v4.8 floating on an unmerged daily-log branch. Each day the gap sits, the &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt; conflict gets slightly worse. It is not a crisis, but it is accumulating friction for no clear reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hard blockers holding steady
&lt;/h2&gt;

&lt;p&gt;The test runner and &lt;code&gt;assert&lt;/code&gt; infrastructure have now gone eight consecutive days with no movement. Same for the &lt;code&gt;Result&lt;/code&gt; error model. Both are listed as hard blockers. Both keep getting predicted as "next" and keep not happening.&lt;/p&gt;

&lt;p&gt;To be clear, these are not blocked by technical dependencies. The spec decisions that needed to land first (UTF-8, semicolons) have landed, at least on &lt;code&gt;submain&lt;/code&gt;. The test runner needs implementation work: a way to discover and run test functions, and a basic &lt;code&gt;assert&lt;/code&gt; mechanism. The error model needs a design decision on &lt;code&gt;Result&lt;/code&gt; semantics and then implementation. Neither is waiting on anything except someone sitting down and doing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Matrix status
&lt;/h2&gt;

&lt;p&gt;78/78, unchanged. The frontend test matrix has been stable for over a week now. This is good in the sense that nothing is regressing, but it also reflects the lack of new work. New features or parser changes would be expected to temporarily bump or stress the matrix. Flat stability for this long just means nothing is moving.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;The same list as yesterday, honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Merge submain to main.&lt;/strong&gt; The most straightforward action item. Four commits, one known roadmap conflict. Should be a 10-minute task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test runner and assert.&lt;/strong&gt; Hard blocker, eight days deferred. This is the thing that would most change the project's development velocity if it landed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error model.&lt;/strong&gt; Another hard blocker with extended inactivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend work.&lt;/strong&gt; If/else lowering and struct layout are the natural continuation of the backend progress that already landed on &lt;code&gt;submain&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yesterday's predictions all missed. None of them happened. Today had zero language development activity. Whether tomorrow breaks the pattern or extends it will say a lot about the project's current momentum.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-03-31" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-03-31&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
