Standalone shared library migration
The owner chose to move cross-app libraries out of Homey while setting up Maven
publication. sysout-dev/sysout-platform/sysout-platform now owns all four modules;
Homey and Little Bloomers become consumers. This supersedes the earlier plan to
publish libraries from Homey’s app project and its custom Python uploader.
Merging and library/Play publication remain with the owner.
Repositories and scope
-
Producer:
sysout-dev/sysout-platform/sysout-platform, project87989353. Extraction MR 1, revisiona6e93065ad40016e291c04c7e6300c463b20f87825551f344453c50a26cca1e7. -
Registry:
https://gitlab.com/api/v4/projects/87989353/packages/maven. -
Shared execution:
sysout-dev/sysout-platform/sysout-gitlab-ci, MR 3, pinned revision2e5b8310147d0ac7baf4deb04283d0e056ac86828b7deb51da762ea18ac22113. -
Homey consumer: project
60144767, MR 12. -
Little Bloomers consumer: project
85045545; its 0.3 release draft is preserved.
The producer is cloned at C:/Data/Projects/Sysout/Projects/sysout-platform on
codex/extract-shared-libraries. Its initial library source is Homey’s ready 1.5
checkpoint 8c0d69a5e561744c0759a8045f2dc6d600ad3869. Ten relevant module commits
retain their authors/dates/messages through Git export/import. The new repository
uses SHA-256 rather than Homey’s SHA-1, so its history-map document records the
converted commit IDs. Existing new-repository security configuration/history and
the original Homey checkout are preserved.
| Library | Initial publication coordinate |
|---|---|
Meal domain |
|
Meal data |
|
Recipe catalog |
|
Compose helpers |
|
Packages and coordinates retain their historical names for API compatibility. Source ownership is independent of those names. All 46 source/test files and all compiled library class bytes match the reviewed extraction baseline. The current Homey source includes its revised shared headers/chip controls; it is not rebuilt from Little Bloomers' older workstation cache. Recipe header interaction already passed the earlier signed-candidate smoke test.
On October 23, 2026 the owner explicitly approved adopting the current Homey
header for Little Bloomers 0.3. Recipe Details' Ingredients section collapse and
expand passed on the signed candidate on LittleBloomers_API_36 (API 36).
The header-adoption decision is closed; live registry delivery remains open.
Standard Gradle publication
The standalone build includes only the four libraries. Their existing
maven-publish publications generate binaries, sources, POM and Gradle metadata.
gradle/maven-publishing.gradle.kts supplies the new registry and credentials.
Root tasks aggregate verification and standard GitLab/Maven Local publication.
There is no staging manifest, custom uploader, version-existence check or package
download/hash framework. Snapshot and qualified versions are supported normally;
GitLab’s group package policy controls duplicate releases and snapshot exceptions.
Shared CI owns setup, workflow guards and commands. The producer supplies only an
include adapter and its aggregate task names. Normal verification runs in one
library job alongside retained security scans. A protected-main web pipeline with
PIPELINE_ACTION=publish exposes a manual job that verifies before Gradle uploads.
It neither builds/tags an app nor publishes to Play.
Consumers and first-publication sequence
Homey’s migration removes its four included source modules and replaces them with
Maven dependencies; its app remains 1.5/code 6. Both apps resolve the two Sysout
groups exclusively from the new project endpoint. CI uses CI_JOB_TOKEN; local
private-registry builds can use the user Gradle property gitLabPrivateToken.
No secret values belong in tracked files or logs.
For local integration only, each consumer permits an explicit
-PsysoutMavenRepository=file:///absolute/isolated/repository; CI’s -Pci rejects
the override. The producer populates that directory with normal Maven Local
publication using -Dmaven.repo.local. There is no normal local Maven fallback.
-
Review/merge shared CI MR 3, then the standalone platform extraction. Keep history-preserving merges for the platform import. Automatic draft pipelines are skipped to conserve the owner’s limited GitLab minutes.
-
Inspect the new producer’s Maven duplicate-package policy and allow Homey (
60144767) and Little Bloomers (85045545) package reads through its inbound job-token allowlist. Retain normal operator/project access requirements. -
Start the platform’s protected-main web
PIPELINE_ACTION=publishpipeline and approvepublish_maven_libraries. Gradle runs tests/lint before publication. -
Once packages are available, merge Homey’s consumer migration and run ordinary app verification. Resolve Little Bloomers against the new registry before completing its release-preparation commit/push and fresh GitLab verification.
-
The owner performs application merging and Play publication. Earlier signed Little Bloomers 0.2-to-0.3 evidence is preserved; it is not proof of this new registry’s availability or the GitLab consumer’s permissions.
Local evidence and remaining external checks
The standalone build passes its five existing unit tests and Android release lint
with zero errors and five warnings. Domain and Compose modules currently have no
unit-test sources. Standard isolated Maven Local publication succeeds. Shared CI
has 17 passing local guard/toolchain/compatibility tests. Homey’s 66 app tests,
debug lint (zero errors, 37 warnings), debug assembly and release/R8 assembly pass against those
publications. Little Bloomers' five app/shared tests, debug lint (zero errors,
52 warnings), debug assembly and version-tag guard also pass. Current evidence lives in
artifacts/validation/2026-10-23-platform-extraction/; earlier signed/runtime
evidence remains in 2026-10-23-registry-adoption/.
October 23 publication follow-up
All three infrastructure merge requests are merged. Platform pipeline
2980144502
passed tests/lint, security scans and all four standard Gradle GitLab publication
tasks. Homey pipeline
2980307462
then passed lint, unit tests and debug assembly on the merged consumer commit
b6843f24827551167281ba79e5a2b84db81efd31.
The initial publication and Homey consumer gates are complete. Little Bloomers'
local build has also resolved the real private registry and passed five tests,
lint (zero errors, 53 warnings), signed APK/AAB generation, fresh signed install
and a data-preserving signed 0.2-to-0.3 upgrade. Recipe Details' adopted header
passes collapse/expand. Its own job-token access will be established by the fresh
app verification pipeline after the preparation push. Local release evidence is in
artifacts/validation/2026-10-23-live-registry/. The app’s existing signing/Play
setup remains owner-confirmed. The owner retains application merge/publication.
References: GitLab Maven and Gradle publication.
Android runner follow-up
Little Bloomers' first own CI run stopped before Gradle on the pinned image’s
non-root checkout permissions. Its four adapters now additionally adopt shared
revision abe74c44d3e79fbc1ef709d3ea5c3c89cb05ce5e94d5cfeedebb212a5dac45c5
from MR 4.
The shared Android setup uses Docker UID 0 and installs missing declared SDK
packages through sdkmanager. The local SDK/toolchain/workflow suite has 23
passing tests. The app selects the locally validated Build Tools 36.1.0.
No app behavior or signed-artifact bytes change. Merge shared MR 4 without
squashing before the app; existing platform/Homey consumers keep their prior pins.