Commit Graph

490 Commits

Author SHA1 Message Date
vasilito a92f698849 chore: track base pointer (fbcond keyboard CR->LF) 2026-07-18 12:02:48 +09:00
vasilito 246ebdfc4b chore: track userutils pointer (login chdir-before-mkns fix) 2026-07-18 11:01:26 +09:00
vasilito 4c610e6555 chore: track base+userutils pointers (init CWD fix) + clean brush patch 2026-07-18 10:43:18 +09:00
vasilito ab2ca5399a chore: track userutils pointer (spawn diag) 2026-07-18 10:26:53 +09:00
vasilito 74bea85fe7 chore: track userutils pointer (login CWD fix) 2026-07-18 10:17:13 +09:00
vasilito 302ae880da chore: track base submodule pointer (revert logger Warn) 2026-07-18 09:47:28 +09:00
vasilito c843db2682 chore: base gitlink (console log quiet) + durable brush redox patch
- Track base submodule pointer for output_level Warn console-quiet change.
- Capture brush entry.rs redox edits (tokio current-thread runtime, default
  minimal input backend) as patches/brush-redox-runtime-and-input.patch and
  apply it in the recipe, so a clean source re-fetch keeps the Redox port.
2026-07-18 08:55:55 +09:00
vasilito dc97454734 chore: track base submodule pointer for switch_root chdir restore 2026-07-18 08:24:20 +09:00
vasilito f8d269c4b6 chore: track userutils submodule pointer for spawn_shell diagnostics 2026-07-18 08:09:05 +09:00
vasilito 688645bf98 feat(serial): headless serial console for mini/bare via fbcond mirror
Track base e9342b78 (fbcond bidirectional serial mirror) + kernel 229046c6
(debug fevent readable). Disable the standalone 31_debug_console getty since
fbcond now owns the serial/debug console (avoids competing for the shared debug
input queue and duplicated output). Gives headless serial login on mini + bare.
2026-07-18 07:23:58 +09:00
vasilito 76d609a39e fix(timerfd): base ptr — compile sys_timerfd so timerfd_* link (unblocks Wayland) 2026-07-18 02:51:37 +09:00
vasilito ff49356d58 fix(full): unblock desktop stack build
- relibc ptr 3b40cc8e: sys/timerfd.h compiles in C (unblocks libwayland + glib)
- redbear-meta: add [package].version = 0.3.1 (cookbook couldn't guess it)
- pam-redbear: regenerate Cargo.lock (in-house crate version drift vs --locked)
- (glib corrupted partial source cleaned to force a fresh re-fetch)
2026-07-18 01:57:26 +09:00
vasilito 72351f2a6a fix(boot): base ptr (net warning cleanup + e1000e) + quieter sessiond dbus retry
Track base 01200174 (smolnetd empty-router/broadcast warnings silenced, e1000e
82574 NIC support). redbear-sessiond: suppress the harmless first dbus connect
retry so it does not print an alarming line on every boot.
2026-07-18 00:50:04 +09:00
vasilito 5b49b36724 fix(boot): base submodule ptr (bare/mini warning cleanup) + bare serial console
Track base 1769b083 (condition_path_exists for optional daemons, ahcid no-media,
netstack no-NIC idle, dhcpd fast-fail). Re-enable the serial debug console on
the bare target so it has a headless-visible login prompt (matching mini up to
login).
2026-07-18 00:30:00 +09:00
vasilito c415829a12 fix(relibc): F_DUPFD_CLOEXEC ABI translation -> tokio runtime works on Redox
Track relibc submodule pointer 733da068 (translate POSIX F_DUPFD_CLOEXEC 1030 to
Redox syscall value 5, so OwnedFd::try_clone and thus tokio Runtime::build stop
failing with EINVAL). Also revert the ineffective epoll_ctl retry.

Remove temporary tokio/sessiond EINVAL diagnostics now that the root cause is
fixed.
2026-07-17 23:00:23 +09:00
vasilito e0d62330ac kernel: track event kdup fix (tokio Runtime EINVAL root cause); build: only re-cook userspace when relibc/base change
The kernel event scheme now implements kdup, so dup() of an epoll fd works
and tokio's registry.try_clone() succeeds — fixing the tokio runtime EINVAL
that killed every zbus daemon and the brush login shell.

build-redbear.sh: gate the userspace build/sysroot clean on relibc/base
(the forks userspace links) instead of any low-level fork, so a kernel-only
change rebuilds the kernel + initfs + image without a full userspace re-cook.
2026-07-17 21:47:32 +09:00
vasilito ccccf94fb5 relibc: track epoll EINVAL/EBADF retry pointer; bare: brush login shell
Track relibc submodule at the epoll_ctl transient-retry fix (415fa3c8),
which lets tokio runtimes (the zbus daemons and the brush login shell)
build past the transient /scheme/event EINVAL/EBADF during early-boot
scheme churn.

redbear-bare.toml: switch [users.root]/[users.user] to /usr/bin/brush and
add the brush package, so bare and mini share an identical boot-to-login
shell (bare = minimal boot-test surface, mini = +app payload).
2026-07-17 00:32:09 +09:00
vasilito 81a1d7d565 track relibc pointer: waitid unsafe fix 2026-07-16 22:08:37 +09:00
vasilito 0c3b769b24 track submodule pointers: relibc waitid, fbcond scrollback, bootloader color 2026-07-16 22:04:37 +09:00
vasilito 4afefcd8e1 base: 00_tmp idempotent mkdir + audiod/pcid/smolnetd non-blocking (pointer c14a577d) 2026-07-16 20:05:55 +09:00
vasilito 1ebc92f51f base: 20_audiod.service oneshot_async (pointer f5f726ca) 2026-07-16 18:39:28 +09:00
vasilito 19470fb444 boot: make bare/base driver-manager + netstack non-blocking; changelog
Base submodule 1f826240: 00_pcid-spawner (/usr) and 10_smolnetd base-default
init units switched to oneshot_async so init never blocks the boot-to-login
path on PCI driver enumeration or a network adapter binding. Adds the
2026-07-16 CHANGELOG entry (mini login restored, kernel MSR #GP guard,
build-system staleness/lock/override fixes).
2026-07-16 12:48:57 +09:00
vasilito d5561184f0 boot: restore mini ISO to a working login prompt + build-system fixes
Mini now boots (q35/KVM) all the way to the getty "Red Bear login:" prompt
on VT2 with zero kernel panics. Root-cause fixes across submodules + config:

- config: 00_base.service zsh->mkdir (a full shell startup hangs an init
  oneshot; the earlier 'echo/mkdir also hang' result was a silent config
  override running zsh). 00_ptyd.service notify->{scheme=pty} (ptyd signals
  readiness via its scheme fd; notify made init block on a byte forever).
- kernel: wrmsr_safe/rdmsr_safe #GP recovery so /scheme/sys/msr can't panic
  the kernel (cpufreqd's P-state MSR write #GP'd on KVM, halting the boot
  before login). base: ptyd scheme type + hwd ACPI enum -> debug (noise).
  installer: warn on config [[files]] override. relibc/bootloader: prior
  getrlimit + warning-demotion pointers.
- build-redbear.sh: fix host-fstools staleness (installer/redoxfs never
  rebuilt on source change), prefix rebuild-every-build (touch libc.a), add
  concurrent-build flock.

Submodule pointers: base 8aa8616d, installer 460d9530, kernel 155d01b1,
relibc a7663b3a, bootloader 6e119641.
2026-07-16 12:20:14 +09:00
vasilito 2b64199007 fix: track clean kernel+base pointers (FileTableVerb::Resize fix, diagnostics removed) 2026-07-15 15:40:21 +09:00
vasilito 543cdfb962 chore: track kernel submodule pointer for PROCMGR write-mirror diag 2026-07-15 13:25:55 +09:00
vasilito b81ff59197 chore: track base submodule pointer for procmgr diagnostic 2026-07-15 13:06:03 +09:00
vasilito 0fbf56b2cd chore: track kernel submodule pointer for scheme-id diagnostic 2026-07-15 12:39:06 +09:00
vasilito 8cdd2b799a chore: track kernel submodule pointer for kdup diagnostic 2026-07-15 06:48:47 +09:00
vasilito d888ed0dff revert(relibc): drop ineffective spawn-leak workarounds
The thr_fd.take() and mem::forget(proc_fd) workarounds were
intended to keep the parent's proc scheme handles alive after
posix_spawn returns, so the child's ld_so could use them via
AT_REDOX_*_FD auxv entries. The boot diagnostic shows the actual
relibc binary does NOT take the 'fork' / 'thread-0' kdup path
(those calls never appear in the kdup trace), so the workarounds
targeted a code path that was not running. The real fix is
kernel-side: each Context must hold a self-reference to its own
proc handle so the handle cannot be dropped while the context
is alive.
2026-07-15 06:48:47 +09:00
vasilito 08ee8c23f5 chore: track relibc submodule pointer for mem::forget proc_fd leak 2026-07-15 06:48:47 +09:00
vasilito f8d5f390d2 chore: track relibc submodule pointer for proc_fd leak fix 2026-07-15 06:48:47 +09:00
vasilito 2fa8b3b835 chore: track relibc submodule pointer for spawn leak fix 2026-07-15 06:48:47 +09:00
vasilito c08379e03e chore: track base submodule pointer for waitpid fix 2026-07-15 06:48:46 +09:00
vasilito fac69f9d03 fix(kernel): ProcUptime f64 → integer in soft-float build
Kernel is built with target-feature=+soft-float (no SSE), but the
upstream ProcUptime code used f64 in format!() which requires SSE
register return. This caused a build error:

  error: src/scheme/proc.rs:2047:32: ... SSE register return with
        SSE disabled

Replace the f64 arithmetic with integer math (seconds.milliseconds)
to make the kernel buildable on the redoxer cross-toolchain.
2026-07-15 06:48:46 +09:00
vasilito ff1aa97ca7 Revert "chore: track relibc submodule pointer update"
This reverts commit 4f102d1e2b.
2026-07-14 23:08:57 +09:00
vasilito 4f102d1e2b chore: track relibc submodule pointer update
Submodule local/sources/relibc moved from 7dee5480 to 7a8c7564
(operator-side work). Local + origin now in sync.

(NO AI attribution)

# Conflicts:
#	local/sources/relibc
2026-07-14 18:30:18 +09:00
vasilito 05ae87bd61 merge: combine local Round-22 build system commit with origin/0.3.1 SUBMODULE-NORMALIZATION doc
Local had the SUBMODULE-NORMALIZATION doc + Round-22 build system commit
uncommitted; origin had the same doc pre-Round-22. This merge combines
both into a single linear history.

(NO AI attribution)

# Conflicts:
#	local/docs/SUBMODULE-NORMALIZATION-2026-07-13.md
2026-07-14 13:36:00 +09:00
vasilito 441aba3d32 local/docs/SUBMODULE-NORMALIZATION-2026-07-13.md: operator handoff for fork branch normalization
6 of 9 local fork working-trees are on branches that violate local/AGENTS.md § "BRANCH AND SUBMODULE POLICY":
  - 4 forks on master (bootloader, libredox, redoxfs, userutils)
  - 2 forks on version-suffixed branches (installer, syscall)

Captures the exact 6-command fix, verification, and AGENTS.md policy citations. NO fallbacks, NO code changes — operator-only per "agents MUST NOT create new git branches" rule.

(NO AI attribution)
2026-07-14 12:41:17 +09:00
vasilito 314f655f37 chore: update base and kernel submodule pointers for fd-transfer diagnostics 2026-07-14 11:19:31 +09:00
vasilito e38b1bac27 chore: update base and relibc submodule pointers for FILETABLE fixes
- base: pipe2 FILETABLE desync fix (1e341ff7)

- relibc: open() FILETABLE-aware allocation fix (aeabac73)
2026-07-14 08:52:08 +09:00
vasilito adbea07ec8 track forked-component pointer updates + qt6-wayland-smoke gitlink
Submodule pointers for base and relibc moved (operator-side work).
recipes/wip/wayland/qt6-wayland-smoke remains a broken gitlink
(known; see local/docs/SESSION-2026-07-13-DOC-CLEANUP.md for carry-over).

(NO AI attribution)
2026-07-14 01:18:38 +03:00
vasilito 1354b8d81f fix: base fork — remove FEXEC_STEP reference (removed from relibc) 2026-07-12 23:46:30 +03:00
vasilito 28edba9be6 fix: relibc — add sys_timerfd cbindgen config for header generation
relibc has full Rust implementation of timerfd_create/timerfd_settime/
timerfd_gettime but lacked cbindgen.toml. cbindgen skipped the directory
entirely so <sys/timerfd.h> was never installed.

Required for Qt6 QSocketNotifier and many C programs.
2026-07-12 19:19:49 +03:00
vasilito 2e5cee8d58 phase 18.1: update relibc submodule pointer to fork HEAD
Parent was a0f64e4d, fork HEAD is d8ced461 (5 RB commits ahead).
Fixes submodule pointer mismatch from stale gitlink.
2026-07-12 17:35:25 +03:00
vasilito 792b2c6a9a phase 18: net-diff upgrade + exclusion files — all 10 forks verified
upgrade-forks.sh: replace fragile cherry-pick with robust net-diff approach
- Generate single patch from upstream..old_HEAD (git diff, excludes Cargo.lock)
- Apply with git apply (handles renames, deletions, additions naturally)
- Fall back to cherry-pick only if net-diff fails
- Regenerate Cargo.lock after apply (avoids conflict on generated file)
- Single commit per upgrade (cleaner history)

verify-fork-functions.sh: hardened with common-name guard (phase 17.2)

Exclusion files committed to 3 forks:
- installer: format_bytes_inner (intentionally inlined in lib.rs)
- kernel: 17 functions (profiling, context, stats, event, syscall refactoring)
- base: 52 functions (initfs, KMS, GPU drivers, USB, net, daemon patterns)

Result: verify-fork-functions.sh passes for ALL 10 forks (exit 0).
Build system now guarantees upstream + RB patches on every build.
2026-07-12 17:11:15 +03:00
vasilito a1ce71f832 phase 17.1: update installer submodule pointer (exclusion file) 2026-07-12 16:42:47 +03:00
vasilito 38ebecabb6 phase 6.5: add --selftest mode to verify-patch-content + pre-push wiring
Adds --selftest mode that runs 5 regression test cases against a
temp directory. The temp dir is created OUTSIDE the parent git
working tree (e.g. via /tmp/.tmp-redbear-selftest-/) so that the
test's 'git log' commands don't pick up the parent repo's 100+
commits.

Test cases:
  1. patch with sig in fork target         preserved
  2. patch without sig in fork target       orphan
  3. no-target patch (no +++ b/ header)    orphan (no-target)
  4. patch with content-integrated target   orphan (classification)
  5. verify --report action produces per-orphan decision

Bug fixed during dev: passing fork_dir to git log WITHOUT
isolating it from the parent repo's git tree caused 50 'case2'
keyword matches to leak in from the RedBear-OS parent repo's
commit log, making case2 falsely classified as INTEGRATED. Fixed
by using tempfile.mkdtemp(dir=os.path.dirname(REPO_ROOT)) to put
the test fork dir OUTSIDE the parent git tree.

Also fixed: audit_component now accepts an optional patches_dir
arg (so selftest can pass a non-default patches path without
modifying the main code path).

Also fixed: 'if not target_path or target_path == \'?\'' check
in suggest_action_for_orphan to handle the literal '?' sentinel
that audit_component uses for no-target orphans.

Wired into pre-push-checks.sh as check #3b (verify-patch-content-selftest).
Total: 7 pre-push checks now run before any push.
2026-07-12 11:02:27 +03:00
vasilito 687b2650be phase 6.4: operator-decision automation in verify-patch-content
Adds --report action mode to verify-patch-content.py that implements
the AGENTS.md § 'Orphan-Patch Supersession Decision Tree' algorithmically.

For each orphan, the action recommender outputs one of:
  - INTEGRATED:      fork log has >5 commits matching topic keywords;
                    the work IS in the fork under a different commit
                    subject. Safe to archive as superseded.
  - FILE-RESTRUCTURED: target file no longer exists in fork (file
                    rebased past patch's expectations). Safe to archive.
  - NO-TARGET-FILE:  patch lacks +++ b/ header (non-actionable).
                    Safe to archive.
  - MISSING-UPSTREAM: work NOT in fork; needs reapply or fork rebase.

Algorithm (in suggest_action_for_orphan):
  1. Check if patch has no target file (lacks +++ b/) → NO-TARGET-FILE
  2. Check if target file no longer exists in fork → FILE-RESTRUCTURED
  3. Run 'git log -i --grep <topic-keyword>' on the fork; if >5 commits
     match → INTEGRATED
  4. Otherwise → MISSING-UPSTREAM

Validated with synthetic test: created a local/patches/relibc/
_test-synthetic-orphan.patch with target=lib/test/strange.rs (which
doesn't exist in fork). The recommender correctly classified it as
FILE-RESTRUCTURED.

Wired into pre-push-checks.sh as check #3a (verify-patch-content-action).
Future new orphans are auto-classified; the operator only needs to
verify the suggested classification matches reality and then archive
to legacy-superseded-2026-07-12/.
2026-07-12 10:43:15 +03:00
vasilito 9871d79aa4 phase 4.3: archive 2 kernel patches operator-superseded
Phase 4.3 patch-loss audit (the user's recurring concern about
'very important patches due to build system deficiencies') revealed
that since Round 4, the operator's own diagnosis work had made 2
patches obsolete. Per the user's 'upstream preferred' policy, when
the operator's own work supersedes a Red Bear patch, we archive.

P0-canary (operator-superseded):
- Original: Phase 1.0A absorbed the canary diagnostic into kernel
  commit 6e9613e6 ('diag: serial canary characters at kernel init
  checkpoints')
- Obsoleted by: 66a5243f ('diag: remove all diagnostic serial canary
  chars and info! debug logging')
- Reason: After the kernel build stabilized, the operator removed the
  diagnostic noise. The canary's purpose (early-boot serial output)
  is no longer needed.

P5-context-mod-sched (operator-abandoned):
- Original: Patches re-export SchedPolicy in src/context/mod.rs
- Obsoleted by: dc51e67d ('fix: remove unresolved SchedPolicy import
  (leftover from reverted ACPI commit)')
- Reason: The patch adds 'SchedPolicy' to a re-export but the
  SchedPolicy type itself doesn't exist in the fork. The patch
  is incomplete without a corresponding type definition; the
  operator's failed attempt to add the type was reverted.

Both moves follow AGENTS.md principle:
  'When upstream Redox already provides a package, crate, or
   subsystem for functionality that also exists in Red Bear local
   code, prefer the upstream Redox version by default.'

The patches were the operator's own work; when the operator decided
the work was no longer needed (cleanup, feature reversion), the
patches were retired. 'Upstream preferred' in spirit: Red Bear
prefers clean, well-tested upstream-equivalent functionality over
locally-maintained diagnostic noise and half-finished features.

After this commit:
  Active patches: 119 (was 121)
  Archived: 96 in legacy-superseded-2026-07-12/
  All forks: 0 orphans
2026-07-12 09:23:10 +03:00
vasilito 6fd13f3e28 phase 3.5: add push-fork-branches.sh — operator-reviewed fork push helper
After 3 rounds of patch-preservation work, multiple fork branches
have new commits that need to reach origin's submodule/<name> refs:

  fork          local-vs-origin  state
  base          2564 ahead, 190 behind    significant divergence
  bootloader    10 ahead, 128 behind     927 vs 77 file divergence
  installer     61 ahead, 0 behind       ready to force-push
  kernel        45 ahead, 0 behind       ready to force-push
  libredox      69 ahead, 11 behind      fast-forward possible
  relibc        3434 ahead, 60 behind    significant divergence
  syscall       1 ahead, 0 behind        ready to force-push
  userutils     202 ahead, 12 behind     merge decisions needed

This script provides:
1. Status table showing ahead/behind for each fork
2. Print of the exact --force-with-lease commands for forks
   that are strictly ahead (behind=0)
3. NO-OP default mode (must use --execute to actually push)
4. A 5-second abort window if --execute is used

Per AGENTS.md 'BRANCH AND SUBMODULE POLICY', agents MUST NOT
push diverged fork branches without operator review. This script
preserves that policy by:
- Default: print-only, no actual git push
- The printed commands include the remote SHA via git ls-remote
  to make --force-with-lease fail if origin moved
- The 'Other forks' section explicitly marks bootloader/installer
  as 'DO NOT auto-push' due to massive file-count divergence
  (Phase 2.4+ work)

Implementation notes:
- Uses 'local_sha..remote_sha' / 'remote_sha..local_sha' form
  to avoid the 'ambiguous HEAD' error in submodule working
  trees (the fork tree has a stale symlink that confuses git
  revision parsing — see commit history if that needs fixing)
- behind=0 and ahead>0 are the only cases the script marks
  'REVIEW_NEEDED' — behind>0 forks need merge decisions
2026-07-12 02:38:12 +03:00