RAIkeep is the umbrella workspace for four related .NET libraries and two command-line packages:
| Order | Repository | Package / command | 4.0.1 role |
|---|---|---|---|
| 1 | OsLib |
OsLibCore |
Coordinated patch alignment; no API or behavior change |
| 2 | RaiUtils |
RaiUtils |
Coordinated patch alignment; no API or behavior change |
| 3 | RaiImage |
RaiImage |
Coordinated patch alignment; no API or behavior change |
| 4 | JsonPit |
JsonPit |
Coordinated patch alignment; no persistence or concurrency change |
| 5 | ImgSeeder |
ImgSeeder / iorg |
Adds organize/clean commands with a 4.x legacy transition |
| 6 | PitSeeder |
PitSeeder / pits |
Adds seed/export/audit commands with a 4.x legacy transition |
Each child remains its own Git repository, package, solution, and release workflow. The umbrella workspace supplies local project wiring, coordinated validation, dependency-order documentation, and sequential release automation.
The prepared coordinated release is 4.0.1 across all six repositories.
The principal functional changes are:
PitSeeder: command-firstseed,export, andauditsyntax, contextual help, and early option validation.ImgSeeder: command-firstorganizeand safe short-namecleansyntax with isolated options.- Established flat seed/export/image-organizer invocations remain supported throughout
4.x; the legacy parsers are scheduled for removal in5.x.x. - The recently added
pitsaudit flags move directly to the new command syntax and are not retained as legacy aliases. - OsLibCore, RaiUtils, RaiImage, and JsonPit carry synchronized
4.0.1metadata without functional changes from4.0.0.
RaiUtils, RaiImage, and ImgSeeder participate in the same major line so fallback package dependencies remain aligned throughout the release order.
All change requests and release notes are centralized in doc/. Child repositories should not contain independent CR_*.md or RELEASE_NOTES*.md files.
Current release notes:
Flag and coordination behavior is documented in JsonPit flag files and concurrency. It explains the distinction between per-process activity windows and the stable master-writer lease without replacing the separate open concurrency CR.
From the workspace root:
dotnet build RAIkeep.slnx
dotnet test OsLib/OsLib.Tests/OsLib.Tests.csproj
dotnet test RaiUtils/RaiUtils.slnx
dotnet test RaiImage/RaiImage.slnx
dotnet test ImgSeeder/ImgSeeder.slnx
dotnet test PitSeeder/PitSeeder.slnxThe JsonPit suite includes real cloud/remote scenarios and a separately documented open concurrency regression. Use the validation scope stated in the JsonPit release notes rather than hiding those distinctions behind incidental test-runner parallelism or local configuration substitution.
Publication requires explicit approval. Preparing versions, documentation, commits, or packages does not authorize a push, tag, workflow dispatch, or NuGet publication.
After approval, use one release mechanism for the chain. The established local orchestrator is:
cd /Users/RSB/Projects/GitHub/RAIkeep
scripts/release-chain.sh 4.0.1Before publication begins, all six child release commits and their exact submodule pointers must already be committed on the umbrella main. The script preflights that state, pushes the prepared umbrella main, and applies the passed version as its tag first. The umbrella tag does not publish a package; its workflow is manual-only.
It then processes packages in this exact order:
OsLibCore → RaiUtils → RaiImage → JsonPit → ImgSeeder → PitSeeder
For every package before the next repository is pushed/tagged:
- Push the prepared repository
mainonly if it is ahead. - Push that repository's
v4.0.1tag to trigger its publish workflow. - Wait for the matching GitHub workflow to finish successfully.
- Verify the exact
.nupkgis visible through the NuGet flat-container URL with HTTP200. - Enforce the full
380-second hold. - Only then continue to the next repository.
The local script and the umbrella sequential workflow both enforce 380 seconds. This longer window reflects observed RaiUtils indexing latency. Do not run both release mechanisms for the same version. The local script refuses to move an existing conflicting version tag and verifies at the end that the umbrella still records the exact released child commits.
Detailed operational guidance is in RunReleaseChain.md.
- Preserve the real machine configuration file as the source of truth; do not substitute environment variables or rewrite configuration for test isolation.
- Keep the shared configured cloud-root contract aligned on
Dropbox,OneDrive,GoogleDrive, andICloudDrive. - Use OsLib path/file abstractions in JsonPit and the CLIs instead of introducing direct filesystem operations where an OsLib API applies.
- Do not use temporary-file rename replacement for canonical pits or cloud-backed coordination flags.
- Keep one in-memory
Pitinstance per distinct pit path in a long-running process and share it through the application container/singleton mechanism.