Skip to content

feat(bom): add falco-bom, a platform pinning the published modules - #5

Merged
TheMeinerLP merged 4 commits into
mainfrom
feat/falco-bom
Aug 1, 2026
Merged

feat(bom): add falco-bom, a platform pinning the published modules#5
TheMeinerLP merged 4 commits into
mainfrom
feat/falco-bom

Conversation

@TheMeinerLP

Copy link
Copy Markdown
Contributor

Proposed changes

The three published modules are built and released together and only ever make sense in the same
version, but a consumer had to repeat that version on every dependency line and was free to get it
wrong. falco-bom is a java-platform project whose only product is a POM with a
dependencyManagement block, so the version is declared once as a platform:

dependencies {
    implementation(platform("net.onelitefeather", "falco-bom", "0.3.1-SNAPSHOT"))
    implementation("net.onelitefeather:falco-anvil")
    implementation("net.onelitefeather:falco-light")
    implementation("net.onelitefeather:falco-instance")
}

It pins its siblings by project reference rather than by coordinate string, so Gradle reads the
version off the module itself instead of asking someone to keep a literal in sync on every release.
The single line Release Please rewrites stays the only place a version number is written.

Two consequences for the root build, both of which are the actual substance of this change:

  • java-library and java-platform are mutually exclusive plugins, so the block that configures
    the Java modules now runs over subprojects - project(":falco-bom"). group and version stay
    on all subprojects, because the BOM needs its own version to be right for the project references
    above to resolve to the correct numbers.
  • java-platform is applied to falco-bom from the root script, not from the module's own. A
    subproject's build script only runs after the root one, so a plugin applied there would leave the
    javaPlatform software component unregistered by the time the publishing block further down the
    root script reaches for it.

The publishing setup is split accordingly: one shared block configures the repository, credentials
and the release/snapshot switch for all four published modules, and two component-specific blocks
publish components["java"] with sources and javadoc jars for the libraries, and
components["javaPlatform"] for the BOM, which has nothing to compile or document.

Why the README uses a snapshot coordinate

The BOM was added after 0.3.0 was cut, so the release endpoint does not serve it and won't —
falco-bom:0.3.0 returns 404 and always will. Until the first release that contains it, the README
writes the coordinate in the three-argument form, which is the same device this project already used
for falco-instance before it had a release: the Renovate rule that rewrites group:name:version
coordinates to the latest release deliberately does not match it, so the snippet cannot be pointed at
a version that does not exist. From the next release on it becomes a normal coordinate and both the
snapshot version and the comment explaining it should go.

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Performance change (behaviour unchanged, cost changed)
  • Documentation Update (if none of the other choices apply)

Checklist

  • I have read the CONTRIBUTING.md
  • The title of this pull request is a Conventional Commit — note it introduces a new scope,
    (bom), alongside the (anvil) / (light) / (instance) / (map) the template lists. It
    follows the same convention of naming the module it touches.
  • I have added tests — not applicable, and deliberately so: a java-platform project has no
    sources and no runtime behaviour to test. What it produces is a POM, and that is verified by
    generating it (see below) rather than by a test class.
  • Tests are package-private, named test<What><Expectation> — no tests added, see above.
  • Javadoc on every new class and method — no classes or methods added; the build file carries
    prose comments in the style of the surrounding build scripts instead.
  • I have not written @NotNull; the package @NotNullByDefault covers it
  • ./gradlew build is green locally
  • I have added necessary documentation (if appropriate) — the Using it section of the README

Verification

./gradlew :falco-bom:generatePomFileForMavenPublication produces exactly the dependencyManagement
block the change exists for:

<dependencyManagement>
  <dependencies>
    <dependency><groupId>net.onelitefeather</groupId><artifactId>falco-anvil</artifactId><version>0.3.0</version></dependency>
    <dependency><groupId>net.onelitefeather</groupId><artifactId>falco-light</artifactId><version>0.3.0</version></dependency>
    <dependency><groupId>net.onelitefeather</groupId><artifactId>falco-instance</artifactId><version>0.3.0</version></dependency>
  </dependencies>
</dependencyManagement>
  • ./gradlew clean build — green, existing modules and their tests unaffected by the subprojects
    restructure.
  • ./gradlew publishToMavenLocal~/.m2/repository/net/onelitefeather/falco-bom/0.3.0/ contains
    falco-bom-0.3.0.pom and falco-bom-0.3.0.module.
  • The Renovate rule was checked against the new README: it matches the five release coordinates and
    leaves the BOM's three-argument snapshot line alone, which is the intended behaviour described
    above.

Further comments

Nothing in .github/workflows needed changing — there are no per-module path filters or publish
lists; publish runs at the root and now covers four modules instead of three.

STATUS.md and docs/ were left alone on purpose. Their module tables describe compiled types and
test counts, and a platform module has neither, so a row there would be noise rather than signal.

Out of scope, but worth recording: the Snapshots, Maven and API documentation subsections of
the README still carry hardcoded 0.2.1 / 0.2.2-SNAPSHOT examples and a "no release yet" note for
falco-instance that 0.3.0 already made false. Those were stale before this change and fixing them
means verifying live javadoc URLs, so they are left for a separate documentation pass.

🤖 Generated with Claude Code

The three published modules are built and released together and only ever
make sense in the same version, but a consumer had to repeat that version on
every dependency line and was free to get it wrong. falco-bom is a
java-platform project whose only product is a POM with a dependencyManagement
block, so the version is declared once as a platform and the modules cannot
drift into a combination nobody tested.

It pins its siblings by project reference rather than by coordinate string,
which makes Gradle read the version off the module itself instead of asking
someone to keep a literal in sync on every release. The single line Release
Please rewrites stays the only place a version number is written.

Two consequences for the root build. java-library and java-platform are
mutually exclusive, so the block that configures the Java modules now runs
over the subprojects minus falco-bom, while group and version stay on all of
them because the BOM needs its own version to be right. And java-platform is
applied to falco-bom from the root script rather than from the module's own,
because a subproject's script only runs after the root one and the publishing
block further down would otherwise reach for a javaPlatform component that is
not registered yet.

The README keeps the BOM on a snapshot coordinate in the three-argument form
for now: it was added after 0.3.0 was cut, so the release endpoint does not
serve it yet, and the Renovate rule that rewrites release coordinates would
otherwise point the snippet at a version that does not exist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@TheMeinerLP
TheMeinerLP requested a review from a team as a code owner August 1, 2026 08:44
@github-actions

This comment has been minimized.

@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Test results

  153 files    153 suites   2m 50s ⏱️
  554 tests   554 ✅ 0 💤 0 ❌
1 671 runs  1 671 ✅ 0 💤 0 ❌

Results for commit fdb0853.

♻️ This comment has been updated with latest results.

@github-actions

This comment has been minimized.

The Gradle build files carried extensive prose comments explaining why
things are built the way they are. That rationale now lives on the
project wiki (https://github.com/OneLiteFeatherNET/Falco/wiki), split
into pages by topic: build setup, versioning and releases, dependency
management, publishing, testing/Javadoc, and the benchmarks/demo
modules. Each build file keeps a single one-line pointer to the wiki.

No functional code changed. The `// x-release-please-version` marker
on the version line in the root build.gradle.kts was deliberately left
untouched, since Release Please locates that line by this exact
comment string.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

This comment has been minimized.

TheMeinerLP and others added 2 commits August 1, 2026 12:21
Brings in the DemoReport path fix from #8, without which the Windows job
fails on five tests this branch never touched.
* docs: move the long-form documentation to the wiki

Moves docs/anvil-chunk-loader.md, docs/light-engine.md, docs/benchmarks.md,
docs/rationale/, docs/research/ and STATUS.md to the OneLiteFeatherNET/Falco
wiki (Anvil-Chunk-Loader, Light-Engine, Benchmarking, the five Rationale-*
pages, the four Research-* pages, and Project-Status), verbatim apart from
relative links rewritten to wiki page names or GitHub blob URLs. Home.md
gains "Getting started" / "Background: rationale" / "Background: research"
groups above the six existing Gradle build pages, all of which stay linked.

README.md is slimmed from 494 to 300 lines: it keeps what a first-time
visitor needs (what the project is, the module table, a condensed
performance summary, the four-step quick start, and how to declare the
dependency including the BOM) and points to the wiki for everything else.
The four illustrated benchmark write-ups moved into the wiki's Benchmarking
page as "Headline results", with the chart SVGs staying in docs/charts/
(referenced from the wiki via raw.githubusercontent.com, since the wiki is
a separate repository) rather than being duplicated there.

Left in the repository, and why:
- docs/charts/ — generator script plus the SVGs README embeds directly;
  moving images into the wiki would need a different reference scheme for
  no benefit, since the wiki page already reaches them over raw GitHub URLs.
- docs/superpowers/ — planning-workflow artefacts (a spec and its plan),
  not user documentation; the spec is explicitly left "as it was approved"
  with an addendum, so it stays put rather than being edited or moved.
- falco-demo/README.md — a module README next to the code it documents;
  only its three links to files that did move were repointed.
- STATUS.md's content is not stale: it is the active decision/defect/open-
  items log referenced throughout the other documents, so it moved whole
  as Project-Status rather than being trimmed or split.

Fixes every cross-reference this broke: the two docs/benchmarks.md links
in falco-demo/README.md and one in .github/pull_request_template.md, the
docs/*.md references baked into four .github/ISSUE_TEMPLATE/*.yml forms
(dropdown options, checklist labels, placeholders), and two Javadoc
{@code docs/research/instance-container.md} mentions in falco-instance
(text only, no logic touched). The renovate.json custom manager still
matches exactly the three two-argument release coordinates in README.md
and not the three-argument falco-bom snapshot line, verified with the
regex it actually uses.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* docs: correct the stale version references in the README

The README still quoted 0.2.1/0.2.2-SNAPSHOT after 0.3.0 shipped:

- The snapshot explanation said the latest release was 0.2.1 and the
  snapshot endpoint served 0.2.2-SNAPSHOT. It is 0.3.0 released and
  0.3.1-SNAPSHOT served (release patch + 1, per build.gradle.kts).
- The Javadoc table linked falco-anvil and falco-light at 0.2.1, and
  claimed falco-instance had "No release yet" with only a
  0.2.2-SNAPSHOT javadoc link. falco-instance shipped in 0.3.0 (see
  CHANGELOG.md and commit cee5f94), so all three now point at their
  0.3.0 release javadoc.

Verified each new javadoc URL resolves (200) before adding it; none of
the old URLs are removed without a working replacement. The falco-bom
three-argument snapshot coordinate is left untouched, since it exists
specifically so the renovate.json customManager does not rewrite it to
a release version that does not exist yet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@TheMeinerLP
TheMeinerLP merged commit 33f220f into main Aug 1, 2026
7 checks passed
@github-actions github-actions Bot mentioned this pull request Aug 1, 2026
@TheMeinerLP
TheMeinerLP deleted the feat/falco-bom branch August 3, 2026 19:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant