Files
RedBear-OS/local/docs/ORPHAN-STATUS.md
T
vasilito 304b0d4977 docs: correct first-class-citizen policy + remove stale ORPHAN markers
The 2026-07-28 FIRST-CLASS CITIZEN POLICY was initially drafted with all 48
redbear-* recipes wired into redbear-mini. The operator corrected this:

  MINI target includes just packages whicha are not related to graphics.
  While FULL must contain all text+graphial packages.

So the corrected architecture is:
- redbear-mini = text-only binaries (24 original + a few more)
- redbear-full = ALL redbear-* (text + graphics, via inheritance + explicit
  full-only entries)

Updated docs:

- REDBEAR-FIRST-CLASS-CITIZEN-POLICY.md: rewrote with the wiring table per
  program classification (text-only binary / graphics binary / library-only /
  hardware peripheral driver). Library-only recipes follow their consumers'
  target: tui-theme (consumed by power/cub/tlc in mini) goes in mini;
  hid-core/login-protocol/passwd (consumed by desktop-only programs) go in full.

- ORPHAN-STATUS.md: rewrote as 'Library-only Red Bear Crates' reference.
  Documents the 4 library-only recipes, their consumers, and the config
  they are wired into per the corrected policy.

- FIRMWARE-SUBSETS-DECISION.md: rewrote. All 5 firmware recipes (monolithic
  + 4 subsets) are now correctly classified as graphics-related and wired
  into redbear-full (not mini). Original decision was to KEEP-ORPHAN them,
  but the corrected FIRST-CLASS policy promotes them to first-class citizens
  in redbear-full.

- REDBEAR-UFW-STATUS.md: rewrote. redbear-ufw is a text-only firewall prototype
  and is wired into redbear-mini (the text-only target), not redbear-full.
  The prototype is built on every canonical build invocation per the
  FIRST-CLASS CITIZEN policy.

- 5 firmware README.md files: removed stale 'KEEP-ORPHAN' / 'STUB-DATA'
  markers that were written before the corrected policy. Each now reads
  'FIRST-CLASS CITIZEN (wired into config/redbear-full.toml [packages])'
  per the corrected wiring.

All 48 redbear-* recipes remain reachable from at least one config:
- text-only binaries + their consumers' libraries in redbear-mini
- graphics binaries + library-only recipes for desktop consumers in redbear-full
- hardware peripherals in redbear-{wifi,bluetooth}-experimental.toml (inherited by full)

sync-versions.sh --check still passes (75 Cat 1 crates, 0 drift).
2026-07-28 16:24:17 +09:00

101 lines
4.1 KiB
Markdown

# Orphan Status — Library-Only Red Bear Crates (corrected 2026-07-28)
**Date:** 2026-07-28 (corrected to reflect FIRST-CLASS CITIZEN wiring)
## Status: NO ORPHANS REMAIN
As of 2026-07-28, **every** `redbear-*` recipe is reachable from at least one Red Bear OS
build config (`redbear-mini.toml` for text-only, `redbear-full.toml` for graphics, plus
experimental configs for peripherals). Verification:
```bash
# All 48 redbear-* recipe directories in local/recipes/ are referenced from
# at least one config (via direct [packages] entry or transitive inheritance).
$ for r in $(find local/recipes -maxdepth 3 -type d -name "redbear-*" | sort -u); do
prog=$(basename "$r")
if ! grep -rq "$prog" config/redbear-full.toml config/redbear-mini.toml \
config/redbear-*-experimental.toml 2>/dev/null; then
echo "ORPHAN: $prog"
fi
done
# (prints nothing)
```
See `local/docs/REDBEAR-FIRST-CLASS-CITIZEN-POLICY.md` for the policy text.
## What this doc covers
This doc explains the **library-only** category: recipes that produce no binary and are
consumed via Cargo path dependencies. Library-only recipes are still first-class citizens
(they appear in some config) — they just don't ship a binary.
### Library-only recipes (4)
| Recipe | Consumers | Config |
|---|---|---|
| `redbear-hid-core` | (HID parser library — future input stack consumers; no current consumers in mini) | `redbear-full.toml [packages]` (paired with desktop input stack) |
| `redbear-login-protocol` | `redbear-authd`, `redbear-greeter` (both in full) | `redbear-full.toml [packages]` |
| `redbear-passwd` | (account parsing library — currently unused by any binary in mini; consumed by future `passwd` CLI) | `redbear-full.toml [packages]` |
| `redbear-tui-theme` | `redbear-power`, `cub`, `tlc` (all in mini) | `redbear-mini.toml [packages]` |
These recipes have a `[lib]` section in their `Cargo.toml` but no `[[bin]]` entries. The
cookbook builds them as `.rlib` artifacts that consumers link against via Cargo path deps.
## Why library-only recipes are not "orphans"
A recipe is "orphaned" if it is unreachable from any build config. Library-only recipes are
unreachable only if their consumers don't exist. In Red Bear OS:
- `redbear-hid-core`, `redbear-login-protocol`, `redbear-passwd` are wired into `full` because
their consumers (input stack, login stack, future passwd CLI) are full-only.
- `redbear-tui-theme` is wired into `mini` because its consumers (TUI apps: power, cub, tlc)
are in mini.
This is **not** an orphan pattern. It is the **correct consumption pattern** for libraries:
declare the library as a build target, list it in some config so the cookbook cooks it,
and let consumers pull it in via Cargo path dep.
## Historical note
Before 2026-07-28, `redbear-hid-core`, `redbear-login-protocol`, `redbear-passwd`,
`redbear-tui-theme`, `redbear-input-headers`, `redbear-driver-policy` were all considered
"orphans" by the systematic assessment because they did not appear in any config. This was
incorrect analysis — the correct classification is "library-only / data-only / cross-category
build dep". The 2026-07-28 FIRST-CLASS CITIZEN wiring pass resolved all such cases by
adding them to the appropriate config (mini or full) per the wiring table in
`local/docs/REDBEAR-FIRST-CLASS-CITIZEN-POLICY.md`.
## Recipe TOML files for library-only crates
All 4 library-only recipes follow the standard cookbook format:
```toml
[package]
name = "<recipe>"
version = "0.3.1"
edition = "2024"
license = "MIT"
repository = "https://gitea.redbearos.org/vasilito/RedBear-OS"
[source]
path = "source"
[build]
template = "cargo"
```
Their source `Cargo.toml` files have a `[lib]` section (e.g. `[lib] name = "redbear_login_protocol"`)
but no `[[bin]]` entries. Consumers add a path dependency:
```toml
[dependencies]
redbear-login-protocol = { path = "../../../system/redbear-login-protocol/source" }
```
This is the standard Cargo workspace pattern for library-only internal crates.
## See also
- `local/docs/REDBEAR-FIRST-CLASS-CITIZEN-POLICY.md` — wiring policy (mini vs full table)
- `local/docs/FIRMWARE-SUBSETS-DECISION.md` — firmware subset recipes (data-only, graphics-only)