<feed xmlns='http://www.w3.org/2005/Atom'>
<title>catch3/tools, branch build/bcr</title>
<subtitle>Progmasoft Catch3: an independently maintained C++17 test framework with a parallel runner, property checks, snapshots and structured results.</subtitle>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/'/>
<entry>
<title>Prepare the Bazel Central Registry entry as progmasoft_catch3</title>
<updated>2026-11-15T20:08:05+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-15T20:08:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=67c3ef401b34716f7214374ff0d6c24b3c50a149'/>
<id>67c3ef401b34716f7214374ff0d6c24b3c50a149</id>
<content type='text'>
- MODULE.bazel names the module progmasoft_catch3, the name it has in
  the registry, with bazel_compatibility &gt;=8.0.0; //tools:version finds
  the version under the new name.
- .bcr/ holds the templates publish-to-bcr fills: metadata, source (the
  GitHub archive of the catch3-* tag) and the presubmit, which runs the
  test module on Debian, Ubuntu, macOS (x86-64 and arm64) and Windows
  with Bazel 8.x and 9.x.
- tests/Progmasoft/BazelModule is a module that depends on Catch3 as a
  user's does, through //:catch3_main and through //:catch3 with its
  own main. The root ignores it; Bazel Builds tests it with Bazel 8.x
  and 9.x on Ubuntu and Windows.
- Publish to BCR runs when a catch3-* release is published, or by hand
  for a tag, and opens the registry pull request from the fork of the
  maintainer, without attestations.
- The integration guide says how a module depends on progmasoft_catch3.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- MODULE.bazel names the module progmasoft_catch3, the name it has in
  the registry, with bazel_compatibility &gt;=8.0.0; //tools:version finds
  the version under the new name.
- .bcr/ holds the templates publish-to-bcr fills: metadata, source (the
  GitHub archive of the catch3-* tag) and the presubmit, which runs the
  test module on Debian, Ubuntu, macOS (x86-64 and arm64) and Windows
  with Bazel 8.x and 9.x.
- tests/Progmasoft/BazelModule is a module that depends on Catch3 as a
  user's does, through //:catch3_main and through //:catch3 with its
  own main. The root ignores it; Bazel Builds tests it with Bazel 8.x
  and 9.x on Ubuntu and Windows.
- Publish to BCR runs when a catch3-* release is published, or by hand
  for a tag, and opens the registry pull request from the fork of the
  maintainer, without attestations.
- The integration guide says how a module depends on progmasoft_catch3.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/devel' into legal/lgpl</title>
<updated>2026-11-15T17:09:21+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-15T17:09:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=258075e94cd68fa36350fa6722faff96b7bfa101'/>
<id>258075e94cd68fa36350fa6722faff96b7bfa101</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>License Catch3's Progmasoft files under LGPL-3.0-or-later</title>
<updated>2026-11-15T11:01:10+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-15T11:01:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=5c865488e762dec616a0c483d0fc07250123c387'/>
<id>5c865488e762dec616a0c483d0fc07250123c387</id>
<content type='text'>
Every Progmasoft-authored file moves from MPL-2.0 WITH
AdditionRef-Progmasoft-Exception-2.0 to LGPL-3.0-or-later, from 0.5.0
on. Catch2-originated files keep BSL-1.0, and the vendored yyjson and
pugixml keep MIT.

- LICENSES/ holds the LGPL-3.0 text and the GPL-3.0 text it builds on,
  both as published by the FSF; the MPL-2.0 and Progmasoft Exception
  texts go, since no file uses them any more.
- Five files that came from Catch2 and were rewritten by Progmasoft
  (.clang-format, the issue and pull request templates, SECURITY.md)
  keep Catch2's notice next to Progmasoft's and say
  LGPL-3.0-or-later AND BSL-1.0.
- //tools:check expects the new header of Progmasoft files; the
  amalgamation notes say LGPL-3.0-or-later and the amalgamated files
  are regenerated; meson's project license is BSL-1.0 and
  LGPL-3.0-or-later.
- README gains a License section; LICENSES/README.md, contributing.md
  and progmasoft-catch3.md describe the new split and that releases
  before 0.5.0 keep the license they were published under.

Every commit to Progmasoft's files since the fork is the maintainer's.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Every Progmasoft-authored file moves from MPL-2.0 WITH
AdditionRef-Progmasoft-Exception-2.0 to LGPL-3.0-or-later, from 0.5.0
on. Catch2-originated files keep BSL-1.0, and the vendored yyjson and
pugixml keep MIT.

- LICENSES/ holds the LGPL-3.0 text and the GPL-3.0 text it builds on,
  both as published by the FSF; the MPL-2.0 and Progmasoft Exception
  texts go, since no file uses them any more.
- Five files that came from Catch2 and were rewritten by Progmasoft
  (.clang-format, the issue and pull request templates, SECURITY.md)
  keep Catch2's notice next to Progmasoft's and say
  LGPL-3.0-or-later AND BSL-1.0.
- //tools:check expects the new header of Progmasoft files; the
  amalgamation notes say LGPL-3.0-or-later and the amalgamated files
  are regenerated; meson's project license is BSL-1.0 and
  LGPL-3.0-or-later.
- README gains a License section; LICENSES/README.md, contributing.md
  and progmasoft-catch3.md describe the new split and that releases
  before 0.5.0 keep the license they were published under.

Every commit to Progmasoft's files since the fork is the maintainer's.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'devel' into docs/no-former-language</title>
<updated>2026-11-15T10:53:40+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-11-15T10:53:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=9ea8d3a88334d62711f3e9aa429c7fe4905f2ef0'/>
<id>9ea8d3a88334d62711f3e9aa429c7fe4905f2ef0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Drop references to the former compiler from two comments</title>
<updated>2026-11-15T09:07:30+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-15T09:07:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=13ecce487c3075e4ccc2f62b9c08597459d1a268'/>
<id>13ecce487c3075e4ccc2f62b9c08597459d1a268</id>
<content type='text'>
The macOS workflow and RepositoryReport.hpp explained themselves by another project; they now say what they do: macOS gets one job, and the JSON report uses the field names of RepositoryReport in camelCase.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The macOS workflow and RepositoryReport.hpp explained themselves by another project; they now say what they do: macOS gets one job, and the JSON report uses the field names of RepositoryReport in camelCase.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Refuse a next patch past the largest number</title>
<updated>2026-11-14T19:42:54+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-14T19:42:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=e2905c736cf2e36965c071c21bc7911eb3c59a7b'/>
<id>e2905c736cf2e36965c071c21bc7911eb3c59a7b</id>
<content type='text'>
NextPatch added one to the patch without a check, so a patch at
std::numeric_limits&lt;unsigned&gt;::max() wrapped to 0 and --next would have
moved the version back. It returns nothing there now; tests cover a
three- and a four-number version at the limit.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
NextPatch added one to the patch without a check, so a patch at
std::numeric_limits&lt;unsigned&gt;::max() wrapped to 0 and --next would have
moved the version back. It returns nothing there now; tests cover a
three- and a four-number version at the limit.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Number versions MAJOR.MINOR.PATCH in the version tool</title>
<updated>2026-11-14T19:03:45+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-14T19:03:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=2d21d2e0f9c6e0789e9c55d6cba611234dc61a60'/>
<id>2d21d2e0f9c6e0789e9c55d6cba611234dc61a60</id>
<content type='text'>
Progmasoft repositories use Semantic Versioning since 2026-11-12, but
//tools:version still knew the four-number counters: given 0.4.0 it
wrote 0.4.0.0 everywhere, and --next stepped the fourth number.

- A Version is three numbers; ParseVersion takes exactly three, without
  leading zeros, and FormatVersion writes three.
- --next is the next patch release. It also follows a four-number
  version as the rule says: the fourth number goes and the patch rises,
  so 0.3.0.2 is followed by 0.3.1.
- ReleaseNotesOf finds a section by the version it was published as.
  Its fallback for "D = 0" read the fourth element of what is now a
  three-element array; it is gone.
- Tests for the new parsing, NextPatch and release-note lookup;
  docs/contributing.md and the tool's usage say what the tool does.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Progmasoft repositories use Semantic Versioning since 2026-11-12, but
//tools:version still knew the four-number counters: given 0.4.0 it
wrote 0.4.0.0 everywhere, and --next stepped the fourth number.

- A Version is three numbers; ParseVersion takes exactly three, without
  leading zeros, and FormatVersion writes three.
- --next is the next patch release. It also follows a four-number
  version as the rule says: the fourth number goes and the patch rises,
  so 0.3.0.2 is followed by 0.3.1.
- ReleaseNotesOf finds a section by the version it was published as.
  Its fallback for "D = 0" read the fourth element of what is now a
  three-element array; it is gone.
- Tests for the new parsing, NextPatch and release-note lookup;
  docs/contributing.md and the tool's usage say what the tool does.

Claude-Session: https://claude.ai/code/session_01Ji7xZMYjc4zankoc7hGBE1
</pre>
</div>
</content>
</entry>
<entry>
<title>Answer the review of the tools</title>
<updated>2026-11-01T19:58:30+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-01T19:58:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=e66db1cf17714be2ebfeab37670ef3d8965fc7cc'/>
<id>e66db1cf17714be2ebfeab37670ef3d8965fc7cc</id>
<content type='text'>
repo_info starts Git in the checkout with fixed commands, so a shell never
reads a path, reports an unknown state as null rather than clean, and
counts only files it can start. third_party reads every archive before
it changes a file and refuses two modes. version checks that the sources
make a distribution, computes every place before writing any, and
release_notes finds a three-number heading for a version with D = 0.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
repo_info starts Git in the checkout with fixed commands, so a shell never
reads a path, reports an unknown state as null rather than clean, and
counts only files it can start. third_party reads every archive before
it changes a file and refuses two modes. version checks that the sources
make a distribution, computes every place before writing any, and
release_notes finds a three-number heading for a version with D = 0.
</pre>
</div>
</content>
</entry>
<entry>
<title>Name the Bazel targets of the tools in snake_case</title>
<updated>2026-11-01T19:19:02+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-01T19:19:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=e32c9d107274f42b9cca700475404c80e96533c5'/>
<id>e32c9d107274f42b9cca700475404c80e96533c5</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Move the tools from Python to C++17 and Bazel</title>
<updated>2026-11-01T19:16:14+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-01T19:16:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=da3c9d0880dbd4a74e0e43f092d10f5ae42c5043'/>
<id>da3c9d0880dbd4a74e0e43f092d10f5ae42c5043</id>
<content type='text'>
The scripts in use become programs run with `bazelisk run //tools:&lt;tool&gt;`,
and arguments follow `--`:

  amalgamate     the single-file distribution; --check only compares it
  check          licenses, convenience headers, header guards, file names,
                 versions and whether the distribution is up to date
  third-party    compares third_party/ with its archives, or writes it
  version        prints the version, or moves every place that states it
  release-notes  prints a section of the release notes
  repo-info      reports the checkout and the tools on PATH; --json writes
                 it through yyjson, with the fields of Tala's repo-info

amalgamate writes what the Python script wrote, byte for byte, except for
the time of generation. That line is gone so that the output is
deterministic and --check can compare it.

MODULE.bazel now pins the archives of third_party/ by version and sha256,
so Bazel fetches and checks them instead of a tool of ours, and Renovate
reads the versions there.

Scripts nobody used are gone: fixWhitespace, updateDocumentSnippets,
buildAndTest, and updateDocumentToC, which rewrote unrelated documents.
CheckConvenienceHeaders leaves CTest, since //tools:check runs it in CI.
The Python of tests/TestScripts stays: those are tests, not tools.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The scripts in use become programs run with `bazelisk run //tools:&lt;tool&gt;`,
and arguments follow `--`:

  amalgamate     the single-file distribution; --check only compares it
  check          licenses, convenience headers, header guards, file names,
                 versions and whether the distribution is up to date
  third-party    compares third_party/ with its archives, or writes it
  version        prints the version, or moves every place that states it
  release-notes  prints a section of the release notes
  repo-info      reports the checkout and the tools on PATH; --json writes
                 it through yyjson, with the fields of Tala's repo-info

amalgamate writes what the Python script wrote, byte for byte, except for
the time of generation. That line is gone so that the output is
deterministic and --check can compare it.

MODULE.bazel now pins the archives of third_party/ by version and sha256,
so Bazel fetches and checks them instead of a tool of ours, and Renovate
reads the versions there.

Scripts nobody used are gone: fixWhitespace, updateDocumentSnippets,
buildAndTest, and updateDocumentToC, which rewrote unrelated documents.
CheckConvenienceHeaders leaves CTest, since //tools:check runs it in CI.
The Python of tests/TestScripts stays: those are tests, not tools.
</pre>
</div>
</content>
</entry>
</feed>
