1. Filesystem type detection (architect P2 finding)
_primitives/_rust/keisei/src/fs_type.rs (NEW, 103 LOC)
- statfs(2)-based detection on unix (libc = '0.2' under
[target.'cfg(unix)'.dependencies])
- Recognizes exfat / msdos (FAT32) via f_fstypename on macOS,
via f_type magic numbers on Linux (0x4d44, 0x2011bab0)
- Windows stub returns Unknown (GetVolumeInformationW TBD)
- warn_on_unsafe_fs(root) emits stderr warning on ExFat/Fat32
brain.rs::load calls warn_on_unsafe_fs after canonicalize+symlink
checks. Warning NOT fatal — user can opt into single-client use.
2. Battle-test matrix (architect P3 finding)
tests/battle/Dockerfile.install-test-alpine (NEW)
- alpine:3.19 + apk rust/cargo/pandoc
- Exposes musl-vs-glibc issues in aws-sdk-s3, rusqlite, git2
tests/battle/Dockerfile.install-test-debian (NEW)
- debian:12 + rustup stable + pandoc
- Default server distro, different apt structure from Ubuntu
tests/battle/README.md rewritten — 3-distro matrix with run script
3. USB-BRAIN-GUIDE platform split
docs/USB-BRAIN-GUIDE.md — restructured as TOC + platform-agnostic
preamble + exFAT warning + cross-platform troubleshooting
docs/USB-BRAIN-GUIDE-macos.md (NEW, 97 LOC) — Gatekeeper, diskutil,
/Volumes, xattr -d com.apple.quarantine
docs/USB-BRAIN-GUIDE-linux.md (NEW, 98 LOC) — /media/$USER,
umount, ext4 recommended, systemd-udev auto-mount note
docs/USB-BRAIN-GUIDE-windows.md (NEW, 115 LOC) — PowerShell
Dismount-Volume, NTFS, FS-advisory Unknown caveat
REAL VERIFICATION (paste from agent):
cargo check -p keisei: Finished (clean)
cargo test -p keisei --release: 32 passed 0 failed (30 existing + 2 new)
docker buildx outline: both new Dockerfiles parse
Constructor Pattern:
fs_type.rs 103 LOC, brain.rs 198 LOC (at limit 200, held the line)
All fns <30 LOC. Each USB guide sub-doc 97-115 LOC.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
46 lines
1.7 KiB
Text
46 lines
1.7 KiB
Text
# tests/battle/Dockerfile.install-test-debian
|
|
# Debian 12 (bookworm) — the default server distro. glibc, different apt
|
|
# repo structure from Ubuntu (no `ubuntu-*` meta-packages).
|
|
#
|
|
# Build from repo root:
|
|
# docker build -t keisei-battle-debian:latest -f tests/battle/Dockerfile.install-test-debian .
|
|
# Run (default: minimal profile):
|
|
# docker run --rm keisei-battle-debian:latest
|
|
# Override:
|
|
# docker run --rm -e PROFILE=full keisei-battle-debian:latest
|
|
|
|
FROM debian:12
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
LANG=C.UTF-8 \
|
|
LC_ALL=C.UTF-8 \
|
|
CARGO_HOME=/root/.cargo \
|
|
RUSTUP_HOME=/root/.rustup \
|
|
PATH=/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
|
|
# Baseline deps + rustup-installed stable toolchain. Debian 12 ships
|
|
# rustc 1.63 (too old for edition = "2024"), so apt-install of rustc is
|
|
# explicitly NOT enough — same quirk the Ubuntu Dockerfile documents.
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
bash curl ca-certificates git build-essential \
|
|
jq pandoc \
|
|
&& curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
|
|
| sh -s -- -y --default-toolchain stable --profile minimal --no-modify-path \
|
|
&& ln -sf /root/.cargo/bin/cargo /usr/local/bin/cargo \
|
|
&& ln -sf /root/.cargo/bin/rustc /usr/local/bin/rustc \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& rustc --version && cargo --version
|
|
|
|
WORKDIR /opt/keiseikit
|
|
COPY . /opt/keiseikit/
|
|
|
|
COPY tests/battle/verify.sh /usr/local/bin/verify.sh
|
|
COPY tests/battle/battle-entry.sh /usr/local/bin/battle-entry.sh
|
|
|
|
RUN chmod +x /usr/local/bin/verify.sh \
|
|
/usr/local/bin/battle-entry.sh \
|
|
/opt/keiseikit/install.sh
|
|
|
|
ENV PROFILE=minimal
|
|
ENTRYPOINT ["/usr/local/bin/battle-entry.sh"]
|