ASELSANMicrokernel
S99 · SOURCE-BOUND GATE EVIDENCE

G8h reproducibility GREEN; S100 immutable package sırada

Operations --test hedefi → focused test içindeki include_str!/#[path] bağı → kaynak kesiti Bu sayfa yalnız S99 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.

S99Focused kod testiOperations id exactsource SHA exacttest target exact

operation: rpi5-g8h-reproducible-payload-green

uygulama/model · focused test · Operations · 3 exact excerpt

sequence-bound=true · implementation-bound=true
01 · Testin bağlı olduğu uygulama/model kodu

Kapının yürüttüğü gerçek kaynak

tam dosyaL1–L813
scripts/verify-rpi5-g8h-reproducible.sh::verify-rpi5-g8h-reproducible.sh
#!/bin/sh
# Sıra 99: mevcut workspace deploy payloadı ile aynı manifestten üretilen temiz
# reference-main ve A/B/C replikalarının deploy-relevant eşdeğerliği.
# Bu kapı workspace ELF'ini yeniden üretmez; image/package/device/evidence
# yüzeylerine yazmaz ve audit kökünü bağımsız inceleme için bilerek saklar.
# S99 predecessor script=36168 B sha256=ed1e813202a90d2efb40619224b3834c3b25747dd3a72a1d79a9c15053449f78
set -eu

if [ "$#" -ne 8 ]; then
    echo "kullanım: $0 <make> <cargo> <llvm-readobj> <llvm-objdump> <llvm-objcopy> <main-elf> <dtb> <config>" >&2
    exit 2
fi

make_bin=$1
cargo_bin=$2
readobj=$3
objdump=$4
objcopy=$5
workspace_elf=$6
dtb=$7
config=$8

script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
repo_root=$(CDPATH= cd -- "$script_dir/.." && pwd)
target_triple=aarch64-unknown-none
expected_raw_bytes=316864
expected_raw_sha=7e4b713a4ba4f45d572b61ca170cf7f5c89f9a4485f839dc12cc5a8c23570de1
expected_source_files=183
expected_source_paths_sha=f54f583bb9370a735d51c8c25fb5f085255c40c0a2e25adb77eaf346b73246be

die() {
    echo "S99 HATA: $*" >&2
    if [ -n "${audit_root:-}" ]; then
        echo "AUDIT_ROOT=$audit_root RETAINED=YES" >&2
    fi
    exit 1
}

sha256_file() {
    shasum -a 256 "$1" | awk '{print $1}'
}

file_bytes() {
    wc -c < "$1" | tr -d '[:space:]'
}

file_mode() {
    if stat -f '%Lp' "$1" >/dev/null 2>&1; then
        stat -f '%Lp' "$1"
    else
        stat -c '%a' "$1"
    fi
}

file_mtime() {
    if stat -f '%m' "$1" >/dev/null 2>&1; then
        stat -f '%m' "$1"
    else
        stat -c '%Y' "$1"
    fi
}

file_identity() {
    path=$1
    printf '%s %s %s %s\n' \
        "$(file_mode "$path")" \
        "$(file_bytes "$path")" \
        "$(file_mtime "$path")" \
        "$(sha256_file "$path")"
}

file_dev_inode() {
    if stat -f '%d:%i' "$1" >/dev/null 2>&1; then
        stat -f '%d:%i' "$1"
    else
        stat -c '%d:%i' "$1"
    fi
}

resolve_tool() {
    tool=$1
    case "$tool" in
        */*) [ -x "$tool" ] || die "araç executable değil: $tool"; (CDPATH= cd -- "$(dirname -- "$tool")" && printf '%s/%s\n' "$PWD" "$(basename -- "$tool")") ;;
        *) command -v "$tool" || die "araç PATH içinde yok: $tool" ;;
    esac
}

require_regular() {
    [ -f "$1" ] || die "regular dosya yok: $1"
    [ ! -L "$1" ] || die "symlink kabul edilmez: $1"
}

file_nlink() {
    if stat -f '%l' "$1" >/dev/null 2>&1; then
        stat -f '%l' "$1"
    else
        stat -c '%h' "$1"
    fi
}

make_bin=$(resolve_tool "$make_bin")
cargo_bin=$(resolve_tool "$cargo_bin")
readobj=$(resolve_tool "$readobj")
objdump=$(resolve_tool "$objdump")
objcopy=$(resolve_tool "$objcopy")
rustc_bin=$(resolve_tool rustc)

case "$workspace_elf" in /*) ;; *) workspace_elf="$repo_root/$workspace_elf" ;; esac
case "$dtb" in /*) ;; *) dtb="$repo_root/$dtb" ;; esac
case "$config" in /*) ;; *) config="$repo_root/$config" ;; esac
[ "$workspace_elf" = "$repo_root/target/rpi5/$target_triple/debug/aselsan_kernel" ] || \
    die "workspace ELF canonical target/rpi5 production path değil"
[ "$dtb" = "$repo_root/firmware/bcm2712-rpi-5-b.dtb" ] || die "DTB canonical source path değil"
[ "$config" = "$repo_root/firmware/config.txt" ] || die "config canonical source path değil"

require_regular "$workspace_elf"
require_regular "$dtb"
require_regular "$config"

audit_root_created=$(mktemp -d "${TMPDIR:-/tmp}/aselsanos-g8h-repro.XXXXXX")
audit_root=$(CDPATH= cd -- "$audit_root_created" && pwd -P)
mkdir -p "$audit_root/manifests" "$audit_root/artifacts" "$audit_root/tools"
audit_ok=0
report_retained_root() {
    status=$?
    if [ "$status" -ne 0 ] && [ "$audit_ok" -ne 1 ]; then
        echo "S99_EXIT=FAIL AUDIT_ROOT=$audit_root RETAINED=YES" >&2
    fi
}
trap report_retained_root 0
trap 'exit 129' HUP
trap 'exit 130' INT
trap 'exit 143' TERM
echo "AUDIT_ROOT=$audit_root RETAINED=YES"
workspace_raw="$audit_root/artifacts/workspace-preflight.raw"
"$objcopy" -O binary "$workspace_elf" "$workspace_raw"
[ "$(file_bytes "$workspace_raw")" = "$expected_raw_bytes" ] || \
    die "workspace deploy raw byte identity frozen S97/S98 payloadı değil"
[ "$(sha256_file "$workspace_raw")" = "$expected_raw_sha" ] || \
    die "workspace deploy raw SHA-256 frozen S97/S98 payloadı değil"
echo "WORKSPACE_PREFLIGHT=DEPLOY_PAYLOAD_ACCEPTED RAW=$expected_raw_bytes/$expected_raw_sha"
echo "FRESH_CHECKOUT_WITHOUT_WORKSPACE_ELF=STOP"

emit_snapshot_paths() {
    printf '%s\n' \
        Cargo.lock \
        Cargo.toml \
        Makefile \
        kernel/.cargo/config.toml \
        kernel/Cargo.toml \
        kernel/build.rs \
        kernel/linker.ld \
        kernel/linker-rpi4.ld \
        kernel/linker-rpi5.ld \
        kernel/rust-toolchain.toml \
        simulation/Cargo.toml \
        userspace/hello/.cargo/config.toml \
        userspace/hello/Cargo.lock \
        userspace/hello/Cargo.toml \
        userspace/hello/linker.ld \
        userspace/hello/rust-toolchain.toml \
        userspace/ipc_demo/.cargo/config.toml \
        userspace/ipc_demo/Cargo.lock \
        userspace/ipc_demo/Cargo.toml \
        userspace/ipc_demo/linker.ld \
        userspace/ipc_demo/rust-toolchain.toml \
        userspace/mod.rs \
        firmware/bcm2712-rpi-5-b.dtb \
        firmware/config.txt \
        scripts/stage-rpi5-g8h-package.sh \
        scripts/verify-rpi5-pre-mmu-atomics.sh \
        scripts/verify-rpi5-g7c-layout.sh \
        scripts/verify-rpi5-g7d-layout.sh \
        scripts/verify-rpi5-g8-layout.sh \
        scripts/verify-rpi5-g8b-layout.sh \
        scripts/verify-rpi5-g8c-layout.sh \
        scripts/verify-rpi5-g8d-layout.sh \
        scripts/verify-rpi5-g8e-layout.sh \
        scripts/verify-rpi5-g8f-layout.sh \
        scripts/verify-rpi5-g8g-layout.sh \
        scripts/verify-rpi5-g8h-layout.sh \
        scripts/verify-rpi5-g8h-matrix.sh \
        scripts/verify-rpi5-g8h-reproducible.sh
    find kernel/src simulation/src simulation/examples simulation/tests \
        userspace/hello/src userspace/ipc_demo/src \
        -type f ! -name '*.bak' -print
}

for tree in kernel/src simulation/src simulation/examples simulation/tests \
    userspace/hello/src userspace/ipc_demo/src; do
    [ -d "$repo_root/$tree" ] || die "snapshot ağacı yok: $tree"
    if find "$repo_root/$tree" -type l -print | grep -q .; then
        die "snapshot ağacında symlink var: $tree"
    fi
    if find "$repo_root/$tree" ! -type d ! -type f -print | grep -q .; then
        die "snapshot ağacında regular olmayan girdi var: $tree"
    fi
done

raw_paths="$audit_root/manifests/source-paths.raw"
sorted_paths="$audit_root/manifests/source-paths.sorted"
(cd "$repo_root" && emit_snapshot_paths) > "$raw_paths"
[ -s "$raw_paths" ] || die "source path listesi boş"
duplicate_paths=$(LC_ALL=C sort "$raw_paths" | uniq -d)
[ -z "$duplicate_paths" ] || die "duplicate source path: $duplicate_paths"
LC_ALL=C sort "$raw_paths" > "$sorted_paths"
[ "$(wc -l < "$sorted_paths" | tr -d '[:space:]')" -eq "$expected_source_files" ] || \
    die "source path count versionlenmemiş biçimde değişti"
[ "$(sha256_file "$sorted_paths")" = "$expected_source_paths_sha" ] || \
    die "source path set versionlenmemiş biçimde değişti"

source_sha="$audit_root/manifests/source-manifest.sha256"
source_mode="$audit_root/manifests/source-manifest.mode"
source_inode="$audit_root/manifests/source-manifest.inode"
: > "$source_sha"
: > "$source_mode"
: > "$source_inode"
while IFS= read -r relative; do
    case "$relative" in
        ''|/*|./*|*/./*|../*|*/../*|*//*|*'/target/'*|target/*|build/rpi5/*|docs/*|website/*|evidence/*|.git/*|.env*|*.bak)
            die "manifest dışı/yasak yol: $relative" ;;
    esac
    source="$repo_root/$relative"
    require_regular "$source"
    [ "$(file_nlink "$source")" -eq 1 ] || die "source hardlink count bir değil: $relative"
    printf '%s %s %s\n' "$(sha256_file "$source")" "$(file_bytes "$source")" "$relative" >> "$source_sha"
    printf '%s %s\n' "$(file_mode "$source")" "$relative" >> "$source_mode"
    printf '%s %s\n' "$(file_dev_inode "$source")" "$relative" >> "$source_inode"
done < "$sorted_paths"

duplicate_inode=$(awk '{print $1}' "$source_inode" | LC_ALL=C sort | uniq -d)
[ -z "$duplicate_inode" ] || die "hardlink/duplicate inode snapshot içinde: $duplicate_inode"
source_count=$(wc -l < "$sorted_paths" | tr -d '[:space:]')
source_total_bytes=$(awk '{sum += $2} END {print sum + 0}' "$source_sha")
source_manifest_sha=$(sha256_file "$source_sha")
source_modes_sha=$(sha256_file "$source_mode")
echo "SOURCE_MANIFEST=EXACT SOURCE_MODES=EXACT SOURCE_FILES=$source_count SOURCE_BYTES=$source_total_bytes SOURCE_MANIFEST_SHA256=$source_manifest_sha SOURCE_MODES_SHA256=$source_modes_sha"
echo "SOURCE_PATHS=CANONICAL_SORTED_UNIQUE COUNT=$expected_source_files SHA256=$expected_source_paths_sha"

assert_artifact_free() {
    replica=$1
    for forbidden in .git target build docs website evidence .env .env.local; do
        [ ! -e "$replica/$forbidden" ] && [ ! -L "$replica/$forbidden" ] || \
            die "artifact-free replica içinde yasak yol: $forbidden"
    done
    [ ! -e "$replica/userspace/hello/target" ] || die "hello target temiz değil"
    [ ! -e "$replica/userspace/ipc_demo/target" ] || die "ipc_demo target temiz değil"
    [ ! -e "$replica/.cargo/config.toml" ] && [ ! -L "$replica/.cargo/config.toml" ] || \
        die "root Cargo config production contexti gölgeliyor"
    [ ! -e "$replica/.cargo/config" ] && [ ! -L "$replica/.cargo/config" ] || \
        die "legacy root Cargo config production contexti gölgeliyor"
}

manifest_replica() {
    replica=$1
    out_dir=$2
    : > "$out_dir/source-manifest.sha256"
    : > "$out_dir/source-manifest.mode"
    while IFS= read -r relative; do
        file="$replica/$relative"
        require_regular "$file"
        [ "$(file_nlink "$file")" -eq 1 ] || die "replica hardlink count bir değil: $relative"
        [ "$(file_dev_inode "$file")" != "$(file_dev_inode "$repo_root/$relative")" ] || \
            die "replica/source inode bağımsız değil: $relative"
        printf '%s %s %s\n' "$(sha256_file "$file")" "$(file_bytes "$file")" "$relative" >> "$out_dir/source-manifest.sha256"
        printf '%s %s\n' "$(file_mode "$file")" "$relative" >> "$out_dir/source-manifest.mode"
    done < "$sorted_paths"
    cmp -s "$source_sha" "$out_dir/source-manifest.sha256" || die "replica source manifest farklı"
    cmp -s "$source_mode" "$out_dir/source-manifest.mode" || die "replica mode manifest farklı"
    if grep -F "$repo_root" "$out_dir/source-manifest.sha256" "$out_dir/source-manifest.mode" >/dev/null 2>&1; then
        die "replica manifest absolute source prefix taşıyor"
    fi
}

replica_path() {
    case "$1" in
        main) printf '%s\n' "$audit_root/replica-M" ;;
        A|B|C) printf '%s\n' "$audit_root/replica-$1" ;;
        *) die "bilinmeyen replica id: $1" ;;
    esac
}

for replica_id in main A B C; do
    replica=$(replica_path "$replica_id")
    replica_manifest="$audit_root/manifests/replica-$replica_id"
    mkdir -p "$replica" "$replica_manifest"
    while IFS= read -r relative; do
        mkdir -p "$replica/$(dirname -- "$relative")"
        cp -p "$repo_root/$relative" "$replica/$relative"
    done < "$sorted_paths"
    assert_artifact_free "$replica"
    manifest_replica "$replica" "$replica_manifest"
done

while IFS= read -r relative; do
    main_inode=$(file_dev_inode "$(replica_path main)/$relative")
    a_inode=$(file_dev_inode "$(replica_path A)/$relative")
    b_inode=$(file_dev_inode "$(replica_path B)/$relative")
    c_inode=$(file_dev_inode "$(replica_path C)/$relative")
    [ "$main_inode" != "$a_inode" ] && [ "$main_inode" != "$b_inode" ] && \
        [ "$main_inode" != "$c_inode" ] && [ "$a_inode" != "$b_inode" ] && \
        [ "$a_inode" != "$c_inode" ] && [ "$b_inode" != "$c_inode" ] || \
        die "replica inode bağımsızlığı yok: $relative"
done < "$sorted_paths"

for cargo_config in \
    "$repo_root/.cargo/config" "$repo_root/.cargo/config.toml" \
    "${CARGO_HOME:-$HOME/.cargo}/config" "${CARGO_HOME:-$HOME/.cargo}/config.toml"; do
    [ ! -e "$cargo_config" ] && [ ! -L "$cargo_config" ] || \
        die "production contexti gölgeleyen Cargo config: $cargo_config"
done

config_ancestor=$audit_root
while :; do
    for ancestor_config in "$config_ancestor/.cargo/config" "$config_ancestor/.cargo/config.toml"; do
        [ ! -e "$ancestor_config" ] && [ ! -L "$ancestor_config" ] || \
            die "replica ancestor Cargo config kabul edilmez: $ancestor_config"
    done
    [ "$config_ancestor" = / ] && break
    config_ancestor=$(dirname -- "$config_ancestor")
done

for legacy_input in \
    "$repo_root/kernel/.cargo/config" \
    "$repo_root/userspace/hello/.cargo/config" \
    "$repo_root/userspace/ipc_demo/.cargo/config" \
    "$repo_root/rust-toolchain" "$repo_root/rust-toolchain.toml" \
    "$repo_root/kernel/rust-toolchain" \
    "$repo_root/userspace/hello/rust-toolchain" \
    "$repo_root/userspace/ipc_demo/rust-toolchain"; do
    [ ! -e "$legacy_input" ] && [ ! -L "$legacy_input" ] || \
        die "manifest dışı effective Cargo/rustup input: $legacy_input"
done
for config_dir in kernel/.cargo userspace/hello/.cargo userspace/ipc_demo/.cargo; do
    actual_config_entries=$(find "$repo_root/$config_dir" -mindepth 1 -maxdepth 1 -print | LC_ALL=C sort)
    [ "$actual_config_entries" = "$repo_root/$config_dir/config.toml" ] || \
        die "unexpected Cargo config sibling: $config_dir"
done
for override in RUSTFLAGS CARGO_ENCODED_RUSTFLAGS RUSTC RUSTC_WRAPPER \
    RUSTC_WORKSPACE_WRAPPER RUSTDOCFLAGS RUSTUP_TOOLCHAIN CARGO_BUILD_TARGET \
    CARGO_BUILD_RUSTC CARGO_BUILD_RUSTFLAGS CARGO_TARGET_DIR; do
    eval "override_value=\${$override-}"
    [ -z "$override_value" ] || die "build override environment kabul edilmez: $override"
done

tool_identity() {
    label=$1
    tool=$2
    version_arg=$3
    [ -x "$tool" ] || die "$label wrapper executable değil"
    target=$(realpath "$tool")
    require_regular "$target"
    if [ -L "$tool" ]; then wrapper_kind=SYMLINK; else wrapper_kind=REGULAR; fi
    printf 'TOOL=%s WRAPPER_PATH=%s WRAPPER_KIND=%s TARGET_PATH=%s MODE=%s BYTES=%s SHA256=%s\n' \
        "$label" "$tool" "$wrapper_kind" "$target" "$(file_mode "$target")" "$(file_bytes "$target")" "$(sha256_file "$target")" \
        >> "$audit_root/tools/identities.txt"
    "$tool" "$version_arg" > "$audit_root/tools/$label.version.txt" 2>&1 || die "$label version alınamadı"
}

: > "$audit_root/tools/identities.txt"
tool_identity make "$make_bin" --version
tool_identity cargo "$cargo_bin" --version
tool_identity rustc "$rustc_bin" -vV
tool_identity llvm-readobj "$readobj" --version
tool_identity llvm-objdump "$objdump" --version
tool_identity llvm-objcopy "$objcopy" --version
(cd "$repo_root/kernel" && "$cargo_bin" --version && "$rustc_bin" -vV) > "$audit_root/tools/kernel-context.txt"
rustup_bin=$(resolve_tool rustup)
for context in root kernel hello ipc_demo; do
    case "$context" in
        root) context_dir=$repo_root ;;
        kernel) context_dir=$repo_root/kernel ;;
        hello) context_dir=$repo_root/userspace/hello ;;
        ipc_demo) context_dir=$repo_root/userspace/ipc_demo ;;
    esac
    actual_cargo=$(cd "$context_dir" && "$rustup_bin" which cargo)
    actual_rustc=$(cd "$context_dir" && "$rustup_bin" which rustc)
    require_regular "$actual_cargo"
    require_regular "$actual_rustc"
    {
        printf 'CONTEXT=%s CARGO=%s CARGO_SHA256=%s RUSTC=%s RUSTC_SHA256=%s\n' \
            "$context" "$actual_cargo" "$(sha256_file "$actual_cargo")" \
            "$actual_rustc" "$(sha256_file "$actual_rustc")"
        (cd "$context_dir" && "$cargo_bin" -Vv)
        (cd "$context_dir" && "$rustc_bin" -vV)
    } > "$audit_root/tools/$context.resolved-toolchain.txt"
    case "$context" in
        root) root_actual_cargo=$actual_cargo; root_actual_rustc=$actual_rustc ;;
        kernel) kernel_actual_cargo=$actual_cargo; kernel_actual_rustc=$actual_rustc ;;
        hello) hello_actual_cargo=$actual_cargo; hello_actual_rustc=$actual_rustc ;;
        ipc_demo) ipc_actual_cargo=$actual_cargo; ipc_actual_rustc=$actual_rustc ;;
    esac
done

tool_state() {
    output=$1
    : > "$output"
    for tool in "$make_bin" "$cargo_bin" "$rustc_bin" "$rustup_bin" \
        "$readobj" "$objdump" "$objcopy" "$root_actual_cargo" \
        "$root_actual_rustc" "$kernel_actual_cargo" "$kernel_actual_rustc" \
        "$hello_actual_cargo" "$hello_actual_rustc" "$ipc_actual_cargo" \
        "$ipc_actual_rustc"; do
        target=$(realpath "$tool")
        printf '%s %s %s %s %s\n' "$tool" "$target" "$(file_mode "$target")" \
            "$(file_bytes "$target")" "$(sha256_file "$target")" >> "$output"
    done
}

tools_before="$audit_root/manifests/tools.before"
tool_state "$tools_before"
echo "TOOLCHAIN_IDENTITIES=PATH+MODE+SHA256+VERSION"

snapshot_tree() {
    tree=$1
    output=$2
    : > "$output"
    if [ ! -e "$tree" ] && [ ! -L "$tree" ]; then
        printf 'STATE=ABSENT\n' > "$output"
        return
    fi
    [ -d "$tree" ] && [ ! -L "$tree" ] || die "snapshot tree directory değil: $tree"
    if find "$tree" ! -type d ! -type f -print | grep -q .; then
        die "snapshot tree symlink/nonregular içeriyor: $tree"
    fi
    printf 'STATE=DIRECTORY MODE=%s MTIME=%s PATH=.\n' "$(file_mode "$tree")" "$(file_mtime "$tree")" >> "$output"
    find "$tree" -mindepth 1 -print | LC_ALL=C sort | while IFS= read -r entry; do
        relative=${entry#"$tree"/}
        if [ -d "$entry" ]; then
            printf 'D %s %s %s\n' "$(file_mode "$entry")" "$(file_mtime "$entry")" "$relative"
        elif [ -f "$entry" ] && [ ! -L "$entry" ]; then
            printf 'F %s %s %s %s %s\n' \
                "$(file_mode "$entry")" "$(file_bytes "$entry")" "$(file_mtime "$entry")" \
                "$(sha256_file "$entry")" "$relative"
        else
            die "snapshot tree entry regular değil: $entry"
        fi
    done >> "$output"
}

main_before="$audit_root/manifests/workspace-elf.before"
build_before="$audit_root/manifests/build-rpi5.before"
dtb_before="$audit_root/manifests/dtb.before"
config_before="$audit_root/manifests/config.before"
file_identity "$workspace_elf" > "$main_before"
snapshot_tree "$repo_root/build/rpi5" "$build_before"
file_identity "$dtb" > "$dtb_before"
file_identity "$config" > "$config_before"

layout_gates='verify-rpi5-g8-layout.sh verify-rpi5-g8b-layout.sh verify-rpi5-g8c-layout.sh verify-rpi5-g8d-layout.sh verify-rpi5-g8e-layout.sh verify-rpi5-g8f-layout.sh verify-rpi5-g8g-layout.sh verify-rpi5-g8h-layout.sh'

for gate in $layout_gates; do
    case "$gate" in
        verify-rpi5-g8-layout.sh)
            sh "$repo_root/scripts/$gate" "$readobj" "$objdump" "$workspace_elf" ;;
        *)
            sh "$repo_root/scripts/$gate" "$objdump" "$workspace_elf" ;;
    esac
done > "$audit_root/workspace.layouts.log" 2>&1 || die "workspace semantic reference G8-G8h layout zinciri başarısız"
echo "WORKSPACE_LAYOUT=G8-G8h LAYOUT_GATES=8/8"

build_replica() {
    replica_id=$1
    replica=$(replica_path "$replica_id")
    [ ! -e "$replica/userspace/hello/target/aarch64-unknown-none/release/hello" ] || die "replica $replica_id hello fresh değil"
    [ ! -e "$replica/userspace/ipc_demo/target/aarch64-unknown-none/release/ipc_demo" ] || die "replica $replica_id ipc fresh değil"
    [ ! -e "$replica/target/rpi5/$target_triple/debug/aselsan_kernel" ] || die "replica $replica_id kernel fresh değil"

    (
        unset MAKEFILES MAKEFLAGS MFLAGS GNUMAKEFLAGS
        cd "$replica"
        CARGO_NET_OFFLINE=true "$make_bin" CARGO="$cargo_bin" BOARD=rpi5 kernel
    ) \
        > "$audit_root/replica-$replica_id.build.log" 2>&1 || die "replica $replica_id production build başarısız"

    hello="$replica/userspace/hello/target/$target_triple/release/hello"
    ipc="$replica/userspace/ipc_demo/target/$target_triple/release/ipc_demo"
    elf="$replica/target/rpi5/$target_triple/debug/aselsan_kernel"
    require_regular "$hello"
    require_regular "$ipc"
    require_regular "$elf"

    for gate in $layout_gates; do
        case "$gate" in
            verify-rpi5-g8-layout.sh)
                sh "$replica/scripts/$gate" "$readobj" "$objdump" "$elf" ;;
            *)
                sh "$replica/scripts/$gate" "$objdump" "$elf" ;;
        esac
    done > "$audit_root/replica-$replica_id.layouts.log" 2>&1 || die "replica $replica_id G8-G8h layout zinciri başarısız"
    manifest_replica "$replica" "$audit_root/manifests/replica-$replica_id"
    echo "REPLICA=$replica_id USERSPACE_PREREQUISITE=PASS KERNEL_CONFIG=kernel/.cargo/config.toml LAYOUT=G8-G8h LAYOUT_GATES=8/8"
}

for replica_id in main A B C; do
    build_replica "$replica_id"
done

for replica_id in main A B C; do
    replica=$(replica_path "$replica_id")
    reference_replica=$(replica_path main)
    cmp -s "$reference_replica/userspace/hello/target/$target_triple/release/hello" \
        "$replica/userspace/hello/target/$target_triple/release/hello" || die "hello $replica_id main ile farklı"
    cmp -s "$reference_replica/userspace/ipc_demo/target/$target_triple/release/ipc_demo" \
        "$replica/userspace/ipc_demo/target/$target_triple/release/ipc_demo" || die "ipc_demo $replica_id main ile farklı"
done
echo "USERSPACE_MAIN_A_B_C=EXACT"

artifact_elf() {
    replica=$(replica_path "$1")
    printf '%s\n' "$replica/target/rpi5/$target_triple/debug/aselsan_kernel"
}

for id in main A B C; do
    elf=$(artifact_elf "$id")
    out="$audit_root/artifacts/$id"
    mkdir -p "$out"
    cp -p "$elf" "$out/kernel.full.elf"
    "$objcopy" -O binary "$elf" "$out/kernel.raw"
    "$objcopy" --strip-all "$elf" "$out/kernel.strip-all.elf"
    "$objcopy" --strip-debug "$elf" "$out/kernel.strip-debug.elf"
    for artifact in "$out/kernel.full.elf" "$out/kernel.raw" "$out/kernel.strip-all.elf" "$out/kernel.strip-debug.elf"; do
        require_regular "$artifact"
        [ "$(file_nlink "$artifact")" -eq 1 ] || die "$id artifact hardlink: $artifact"
        [ "$(file_mode "$artifact")" = 755 ] || die "$id artifact mode exact 0755 değil: $artifact"
    done
done
mkdir -p "$audit_root/artifacts/workspace"
cp -p "$workspace_elf" "$audit_root/artifacts/workspace/kernel.full.elf"
cp -p "$workspace_raw" "$audit_root/artifacts/workspace/kernel.raw"
"$objcopy" --strip-all "$workspace_elf" "$audit_root/artifacts/workspace/kernel.strip-all.elf"
"$objcopy" --strip-debug "$workspace_elf" "$audit_root/artifacts/workspace/kernel.strip-debug.elf"
for artifact in \
    "$audit_root/artifacts/workspace/kernel.full.elf" \
    "$audit_root/artifacts/workspace/kernel.raw" \
    "$audit_root/artifacts/workspace/kernel.strip-all.elf" \
    "$audit_root/artifacts/workspace/kernel.strip-debug.elf"; do
    require_regular "$artifact"
    [ "$(file_nlink "$artifact")" -eq 1 ] || die "workspace artifact hardlink: $artifact"
    [ "$(file_mode "$artifact")" = 755 ] || die "workspace artifact mode exact 0755 değil: $artifact"
done

require_equal_artifact_set() {
    kind=$1
    suffix=$2
    reference="$audit_root/artifacts/main/$suffix"
    for id in A B C; do
        cmp -s "$reference" "$audit_root/artifacts/$id/$suffix" || die "$kind main/$id farklı"
        [ "$(file_mode "$reference")" = "$(file_mode "$audit_root/artifacts/$id/$suffix")" ] || \
            die "$kind main/$id mode farklı"
    done
    cmp -s "$reference" "$audit_root/artifacts/workspace/$suffix" || die "$kind main/workspace farklı"
    [ "$(file_mode "$reference")" = "$(file_mode "$audit_root/artifacts/workspace/$suffix")" ] || \
        die "$kind main/workspace mode farklı"
    printf '%s_BYTES=%s %s_SHA256=%s\n' \
        "$kind" "$(file_bytes "$reference")" "$kind" "$(sha256_file "$reference")"
}

require_equal_artifact_set raw kernel.raw
require_equal_artifact_set strip-all kernel.strip-all.elf
echo "RAW_PAYLOAD=EXACT STRIP_ALL=EXACT"

section_names() {
    "$readobj" --sections "$1" | awk '/^[[:space:]]*Name: \./ {print $2}'
}

section_block() {
    elf=$1
    wanted=$2
    "$readobj" --sections "$elf" | awk -v wanted="$wanted" '
        /^[[:space:]]*Section \{/ {block=$0 "\n"; keep=0; next}
        block != "" {block=block $0 "\n"}
        /^[[:space:]]*Name: / {name=$2; if (name == wanted) keep=1}
        /^[[:space:]]*\}/ {if (keep) {printf "%s", block; exit} block=""}
    '
}

section_is_alloc() {
    section_block "$1" "$2" | grep -q 'SHF_ALLOC'
}

section_signature() {
    elf=$1
    section=$2
    output=$3
    block="$output.block"
    data="$output.data"
    section_block "$elf" "$section" > "$block"
    [ -s "$block" ] || die "section yok: $section"
    awk '
        /Name:|Type:|Flags \[|SHF_|Address:|Size:|AddressAlignment:|EntrySize:/ {print}
    ' "$block" > "$output"
    if grep -q 'Type: SHT_NOBITS' "$block"; then
        printf 'CONTENT=NOBITS\n' >> "$output"
    else
        "$objcopy" --dump-section "$section=$data" "$elf" >/dev/null 2>&1 || die "section dump başarısız: $section"
        printf 'CONTENT_SHA256=%s\n' "$(sha256_file "$data")" >> "$output"
    fi
}

require_expected_sections() {
    label=$1
    elf=$2
    expected=$3
    actual=$(section_names "$elf" | tr '\n' ' ' | sed 's/[[:space:]]*$//')
    [ "$actual" = "$expected" ] || die "$label section inventory unexpected: $actual"
}

full_sections='.text .rodata .data .bss .debug_loc .debug_abbrev .debug_info .debug_aranges .debug_ranges .debug_str .debug_frame .debug_line .symtab .shstrtab .strtab'
strip_debug_sections='.text .rodata .data .bss .symtab .shstrtab .strtab'
strip_all_sections='.text .rodata .data .bss .shstrtab'
allowed_full_diffs='.debug_info .debug_str .symtab .strtab'
allowed_strip_debug_diffs='.symtab .strtab'

for id in main A B C; do
    require_expected_sections "$id full" "$audit_root/artifacts/$id/kernel.full.elf" "$full_sections"
    require_expected_sections "$id strip-debug" "$audit_root/artifacts/$id/kernel.strip-debug.elf" "$strip_debug_sections"
    require_expected_sections "$id strip-all" "$audit_root/artifacts/$id/kernel.strip-all.elf" "$strip_all_sections"
done

derive_section_diffs() {
    variant=$1
    suffix=$2
    sections=$3
    allowed=$4
    differences=''
    exact_count=0
    variant_count=0
    for section in $sections; do
        for id in main A B C; do
            elf="$audit_root/artifacts/$id/$suffix"
            sig="$audit_root/artifacts/$id/$variant-${section#.}.signature"
            section_signature "$elf" "$section" "$sig"
        done
        reference="$audit_root/artifacts/main/$variant-${section#.}.signature"
        same=1
        for id in A B C; do
            cmp -s "$reference" "$audit_root/artifacts/$id/$variant-${section#.}.signature" || same=0
        done
        if [ "$same" -eq 1 ]; then
            exact_count=$((exact_count + 1))
        else
            differences="${differences}${differences:+ }$section"
            variant_count=$((variant_count + 1))
            section_is_alloc "$audit_root/artifacts/main/$suffix" "$section" && \
                die "$variant farkı ALLOC section içinde: $section"
        fi
    done
    [ "$differences" = "$allowed" ] || die "$variant dynamic diff set unexpected: $differences"
    printf '%s_DIFFS=%s %s_EXACT=%s %s_VARIANT=%s\n' \
        "$variant" "$differences" "$variant" "$exact_count" "$variant" "$variant_count"
}

derive_section_diffs FULL_DEBUG kernel.full.elf "$full_sections" "$allowed_full_diffs"
derive_section_diffs STRIP_DEBUG kernel.strip-debug.elf "$strip_debug_sections" "$allowed_strip_debug_diffs"
main_root=$(replica_path main)
a_root=$(replica_path A)
b_root=$(replica_path B)
c_root=$(replica_path C)
[ "${#main_root}" -eq "${#a_root}" ] && [ "${#a_root}" -eq "${#b_root}" ] && \
    [ "${#b_root}" -eq "${#c_root}" ] || die "fresh replica roots equal-length değil"
for id in main A B C; do
    root=$(replica_path "$id")
    strings "$audit_root/artifacts/$id/FULL_DEBUG-debug_str.signature.data" | grep -Fq "$root" || \
        die "$id debug_str içinde canonical replica root yok"
done
echo "FULL_DEBUG=NON_ALLOC_VARIANT STRIP_DEBUG=NON_ALLOC_VARIANT DEBUG_ROOTS=OBSERVED_EQUAL_LENGTH_DISTINCT"

loadable_signature() {
    elf=$1
    out=$2
    {
        "$readobj" --file-headers "$elf" | awk '/^[[:space:]]*Entry:/ {print "ENTRY=" $2}'
        program_headers="$out.program-headers"
        "$readobj" --program-headers "$elf" | awk '
            /^[[:space:]]*ProgramHeaders \[/ {inside=1; next}
            inside && /^\]$/ {inside=0; exit}
            inside {sub(/^[[:space:]]*/, ""); print}
        ' > "$program_headers"
        [ "$(wc -l < "$program_headers" | tr -d '[:space:]')" -eq 51 ] || exit 1
        [ "$(sha256_file "$program_headers")" = edf9f3cbad0407b947c371388e45a21817637954b83e38ab7a71a74cf4d0a0d7 ] || exit 1
        grep -q 'Type: PT_GNU_STACK (0x6474E551)' "$program_headers" || exit 1
        cat "$program_headers"
        load_rows="$out.load-rows"
        "$readobj" --program-headers "$elf" | awk '
            /^[[:space:]]*ProgramHeader \{/ {load=0; offset=""; va=""; pa=""; filesz=""; memsz=""; r="-"; w="-"; x="-"; align=""; next}
            /^[[:space:]]*Type: PT_LOAD/ {load=1; count++; next}
            load && /^[[:space:]]*Offset:/ {offset=$2; next}
            load && /^[[:space:]]*VirtualAddress:/ {va=$2; next}
            load && /^[[:space:]]*PhysicalAddress:/ {pa=$2; next}
            load && /^[[:space:]]*FileSize:/ {filesz=$2; next}
            load && /^[[:space:]]*MemSize:/ {memsz=$2; next}
            load && /PF_R/ {r="R"; next}
            load && /PF_W/ {w="W"; next}
            load && /PF_X/ {x="X"; next}
            load && /^[[:space:]]*Alignment:/ {align=$2; next}
            load && /^[[:space:]]*\}/ {print count, offset, va, pa, filesz, memsz, r w x, align; load=0}
        ' > "$load_rows"
        expected_load_rows="$out.expected-load-rows"
        printf '%s\n' \
            '1 0x10000 0x80000 0x80000 165804 165804 R-X 65536' \
            '2 0x39000 0xA9000 0xA9000 145334 145334 R-- 65536' \
            '3 0x5D000 0xCD000 0xCD000 1472 17200008 RW- 65536' \
            > "$expected_load_rows"
        cmp -s "$load_rows" "$expected_load_rows" || exit 1
        load_count=$(wc -l < "$load_rows" | tr -d '[:space:]')
        printf 'PT_LOAD_COUNT=%s\n' "$load_count"
        [ "$load_count" -eq 3 ] || exit 1
        while read -r load_index load_offset load_va load_pa load_size load_mem load_flags load_align; do
            segment="$out.ptload-$load_index.data"
            dd if="$elf" of="$segment" bs=1 skip=$((load_offset)) count=$load_size 2>/dev/null || exit 1
            [ "$(file_bytes "$segment")" -eq "$load_size" ] || exit 1
            segment_sha=$(sha256_file "$segment")
            case "$load_index:$segment_sha" in
                1:9093334a4c505a5c9a0c06cf30c65d4b2e40760cea597b756a03981ff381ea30|\
                2:db531b647543f4721916838e1fe8c050fd6141c78dd69074bd0798c408177cc8|\
                3:ddfaafdbb55f568bdf81df864f8993397b0cb766bbd3117ca7413a48d36fb332) ;;
                *) exit 1 ;;
            esac
            printf 'PT_LOAD_%s_BYTES_SHA256=%s\n' "$load_index" "$segment_sha"
        done < "$load_rows"
        for section in .text .rodata .data .bss; do
            block=$(section_block "$elf" "$section")
            printf 'SECTION=%s\n' "$section"
            printf '%s\n' "$block" | awk '/Type:|Flags \[|SHF_|Address:|Size:|AddressAlignment:/ {print}'
            if ! printf '%s\n' "$block" | grep -q 'SHT_NOBITS'; then
                data="$out.${section#.}.data"
                "$objcopy" --dump-section "$section=$data" "$elf" >/dev/null 2>&1 || exit 1
                printf 'CONTENT_SHA256=%s\n' "$(sha256_file "$data")"
            else
                printf 'CONTENT=NOBITS\n'
            fi
        done
    } > "$out"
}

for id in workspace main A B C; do
    loadable_signature "$audit_root/artifacts/$id/kernel.full.elf" \
        "$audit_root/artifacts/$id/loadable.signature" || die "$id loadable signature başarısız"
done
for id in workspace main A B C; do
    alloc_count=$("$readobj" --sections "$audit_root/artifacts/$id/kernel.full.elf" | grep -c 'SHF_ALLOC')
    [ "$alloc_count" -eq 4 ] || die "$id ALLOC section count 4 değil: $alloc_count"
done
for id in workspace A B C; do
    cmp -s "$audit_root/artifacts/main/loadable.signature" "$audit_root/artifacts/$id/loadable.signature" || \
        die "main/$id loadable semantics farklı"
done

entry=$("$readobj" --file-headers "$workspace_elf" | awk '/^[[:space:]]*Entry:/ {print $2; exit}')
[ "$entry" = 0x80000 ] || die "entry 0x80000 değil: $entry"
pt_load_count=$("$readobj" --program-headers "$workspace_elf" | grep -c 'Type: PT_LOAD')
[ "$pt_load_count" -eq 3 ] || die "PT_LOAD count 3 değil: $pt_load_count"
alloc_count=$("$readobj" --sections "$workspace_elf" | grep -c 'SHF_ALLOC')
[ "$alloc_count" -eq 4 ] || die "ALLOC section count 4 değil: $alloc_count"
bss_block=$(section_block "$workspace_elf" .bss)
printf '%s\n' "$bss_block" | grep -q 'Address: 0xCE000' || die ".bss address değişti"
printf '%s\n' "$bss_block" | grep -q 'Size: 17195912' || die ".bss size değişti"
echo "ENTRY=0x80000 PT_LOAD_COUNT=3 ALLOC_SECTIONS=4/4 BSS=EXACT LOADABLE=EXACT"

for source_input in "$dtb" "$config"; do
    name=$(basename -- "$source_input")
    for id in A B C; do
        replica=$(replica_path "$id")
        cmp -s "$source_input" "$replica/firmware/$name" || die "$name replica $id farklı"
    done
    echo "SOURCE_INPUT=$name MODE=$(file_mode "$source_input") BYTES=$(file_bytes "$source_input") SHA256=$(sha256_file "$source_input") IDENTITY=MAIN_A_B_C"
done
echo "SOURCE_INPUT=bcm2712-rpi-5-b.dtb SOURCE_INPUT=config.txt CANONICAL_PATHS=EXACT"

main_after="$audit_root/manifests/workspace-elf.after"
build_after="$audit_root/manifests/build-rpi5.after"
dtb_after="$audit_root/manifests/dtb.after"
config_after="$audit_root/manifests/config.after"
tools_after="$audit_root/manifests/tools.after"
file_identity "$workspace_elf" > "$main_after"
snapshot_tree "$repo_root/build/rpi5" "$build_after"
file_identity "$dtb" > "$dtb_after"
file_identity "$config" > "$config_after"
tool_state "$tools_after"
cmp -s "$main_before" "$main_after" || die "main ELF pre/post identity değişti"
cmp -s "$build_before" "$build_after" || die "build/rpi5 pre/post değişti"
cmp -s "$dtb_before" "$dtb_after" || die "DTB source pre/post değişti"
cmp -s "$config_before" "$config_after" || die "config source pre/post değişti"
cmp -s "$tools_before" "$tools_after" || die "tool binary identity pre/post değişti"

source_sha_after="$audit_root/manifests/source-manifest.after.sha256"
source_mode_after="$audit_root/manifests/source-manifest.after.mode"
raw_paths_after="$audit_root/manifests/source-paths.after.raw"
sorted_paths_after="$audit_root/manifests/source-paths.after.sorted"
(cd "$repo_root" && emit_snapshot_paths) > "$raw_paths_after"
duplicate_paths_after=$(LC_ALL=C sort "$raw_paths_after" | uniq -d)
[ -z "$duplicate_paths_after" ] || die "post-run duplicate source path: $duplicate_paths_after"
LC_ALL=C sort "$raw_paths_after" > "$sorted_paths_after"
cmp -s "$sorted_paths" "$sorted_paths_after" || die "workspace source path set pre/post değişti"
: > "$source_sha_after"
: > "$source_mode_after"
while IFS= read -r relative; do
    source="$repo_root/$relative"
    require_regular "$source"
    printf '%s %s %s\n' "$(sha256_file "$source")" "$(file_bytes "$source")" "$relative" >> "$source_sha_after"
    printf '%s %s\n' "$(file_mode "$source")" "$relative" >> "$source_mode_after"
done < "$sorted_paths"
cmp -s "$source_sha" "$source_sha_after" || die "workspace source manifest pre/post değişti"
cmp -s "$source_mode" "$source_mode_after" || die "workspace source modes pre/post değişti"
echo "MAIN_ELF_PRE_POST=UNCHANGED BUILD_RPI5_PRE_POST=UNCHANGED"
echo "DTB_CONFIG_PRE_POST=UNCHANGED TOOLS_PRE_POST=UNCHANGED WORKSPACE_SOURCE_PRE_POST=UNCHANGED"

echo "IMAGE_BUILD=NOT_RUN PACKAGE=STOP EVIDENCE=STOP MICROSD=STOP DEVICE=STOP UART=STOP POWER_ACTION=STOP"
echo "DOCS=NOT_WRITTEN WEB=NOT_WRITTEN PI_POWER=OFF"
echo "S99 PASS: fresh main+A/B/C production builds; workspace semantic reference ile raw/strip-all/loadable exact; izinli non-ALLOC varyantlar gözlendi ve eş-uzun distinct kökler kaydedildi"
echo "AUDIT_ROOT=$audit_root RETAINED=YES CLEANUP=MOVE_TO_TRASH_AFTER_REVIEW"
audit_ok=1
snippet sha256: 43abefb6e3d2file sha256: 43abefb6e3d2
02 · Doğrulayan test kodu

Operations komutuna bağlı focused test

tam Rust öğesiL509–L548
simulation/tests/rpi5_g8h_reproducible_source.rs::make_exposes_only_the_image_free_s99_chain

#[test]
fn make_exposes_only_the_image_free_s99_chain() {
    assert!(MAKEFILE.contains("verify-rpi5-g8h-reproducible verify-rpi5-g8h-image-input \\\n"));
    assert!(MAKEFILE.contains(
        "  make verify-rpi5-g8h-reproducible - Dört temiz RPi5 deploy-payload reproducibility kapısı"
    ));
    let body = MAKEFILE
        .split_once("verify-rpi5-g8h-reproducible:")
        .expect("S99 reproducibility target")
        .1
        .split_once("\n\n")
        .expect("bounded S99 target")
        .0;
    assert_eq!(
        body,
        concat!(
            "\n\t$(CARGO) test -p aselsan_microkernel_simulation \\\n",
            "\t\t--test rpi5_g8h_reproducible_source\n",
            "\t@sh scripts/verify-rpi5-g8h-reproducible.sh \\\n",
            "\t\t\"$(MAKE)\" \"$(CARGO)\" \"$(READOBJ)\" \"$(OBJDUMP)\" \"$(OBJCOPY)\" \\\n",
            "\t\t\"$(RPI5_ELF)\" \"$(RPI5_DTB)\" \"$(RPI5_CONFIG)\"",
        )
    );
    for forbidden in [
        "verify-rpi5-g8h-layout",
        "verify-rpi5-g8h-matrix",
        "verify-core",
        "image-rpi5",
        "flash-rpi5",
        "capture-rpi5",
        "package",
        "SD_DISK",
    ] {
        assert!(
            !body.contains(forbidden),
            "forbidden Make action: {forbidden}"
        );
    }
}
snippet sha256: f324030a61e2file sha256: 2fd9f7d5ffee
03 · Kapı kimlik kaydı

Operations sıra, kimlik ve başlık bağı

tam Operations kaydıL28016–L28105
website/src/lib/operations.ts::rpi5-g8h-reproducible-payload-green
  {
    id: "rpi5-g8h-reproducible-payload-green",
    date: "2026-08-22",
    sequence: 99,
    status: "verified",
    title: "G8h reproducibility GREEN; S100 immutable package sırada",
    summary:
      "Sequence 98'in frozen image-free full-matrix prerequisite'i korunarak mevcut workspace ELF semantik referansı ve aynı exact 177-file snapshotından üretilen dört artifact-free production-context replica karşılaştırıldı. Workspace ile fresh main/A/B/C'nin G8–G8h layout zinciri 5×8=40/40 PASS; raw payload, strip-all ELF ve loadable signature beş subject arasında exact aynı çıktı. Full-debug ve strip-debug ELF'lerde yalnız allowlist'teki non-ALLOC debug/symbol bölümlerinin değişebileceği fail-closed doğrulandı. Workspace 313/313 ve bağımsız reviewer FINAL GO verdi. Bu image/package/evidence veya fiziksel BOOT8H kabulü değildir; S100 immutable package sıradadır. Son fiziksel PASS S92 BOOT8G ve Pi kapalıdır.",
    evidence: [
      "`make verify-rpi5-g8h-reproducible`: workspace testleri exact 313/313 PASS; focused S98+S99 source testleri 12/12 PASS.",
      "Canonical source snapshot exact 177 file / 3.352.289 B; sorted path hash 5244beead1eb65fc75ad16631240de8dc3e2eb830d9854c31444da93df9c80b8.",
      "Source content manifest exact 18.224 B / a9e769aa4884b961c8533a688a83efd3e6de9a3d8687cffd2b1ec8a467c86a51; mode manifest exact 6.496 B / 1948ee4dce2bd142145a937789ae8a407bb5d04eba605fdca9944cef4c3edd4a.",
      "Workspace ve fresh main/A/B/C source ağaçlarında independent inode exact 885/885; symlink, non-regular, duplicate path ve hardlink=0.",
      "Workspace semantic reference + fresh main/A/B/C üzerinde G8–G8h layout exact 5×8=40/40 PASS; workspace ELF yeniden üretilmedi.",
      "Workspace ELF 7.963.488 B / edf89d762ef3b210bd3b459785192e9f2f79037524a21e3d92f852a7de9d0d8f.",
      "Fresh full-debug ELF diagnostics: main 7.963.520 B / 1cb9f505…8ffbe, A 7.963.512 B / 49c30a7d…0ee43, B 7.963.480 B / 5be8b333…dad0b, C 7.963.512 B / 7494041e…f602d.",
      "Beş subject'in raw payload'ı exact 316.864 B / 7e4b713a4ba4f45d572b61ca170cf7f5c89f9a4485f839dc12cc5a8c23570de1.",
      "Beş subject'in strip-all ELF'i exact 382.824 B / 59a23f58801ed94986e0ace39b0e066d9c6ec7562acc951ab24b557f16ac79fa.",
      "Loadable signature exact 2.066 B / 4dac229f4f039c6c2550589c85b9f6fb94ee0f18e7a978d589ea70d4b3e28ee1; PHDR exact 739 B / edf9f3cbad0407b947c371388e45a21817637954b83e38ab7a71a74cf4d0a0d7.",
      "ENTRY=0x80000, PT_LOAD_COUNT=3, ALLOC_SECTIONS=4/4 ve BSS=EXACT; RAW_PAYLOAD=EXACT, STRIP_ALL=EXACT, LOADABLE=EXACT.",
      "FULL_DEBUG=NON_ALLOC_VARIANT yalnız `.debug_info/.debug_str/.symtab/.strtab`; STRIP_DEBUG=NON_ALLOC_VARIANT yalnız `.symtab/.strtab`. Full-debug exact equality iddia edilmez.",
      "Makefile exact 27.275 B / a5f86bfa5ecabe621f6dfd95338374360e39c617e0f445db4d012ecaff97a3a7; reproducibility script exact 36.168 B / ed1e813202a90d2efb40619224b3834c3b25747dd3a72a1d79a9c15053449f78.",
      "S99 source test exact 13.374 B / 64822a5f5e7b84fd532bde3de23fe45a8a87df86929dcca9dec2b5f6c9593956; versioned S98 test exact 10.834 B / 408f4df36a8a7b07b64168d217ff74cad625336233d838460ca60095a2d224f9.",
      "Source, tool identities, workspace ELF, build/rpi5 ve DTB/config pre/post exact değişmedi; canonical run IMAGE_BUILD=NOT_RUN bıraktı.",
      "Image/package/evidence/microSD/device/UART/power/physical BOOT8H ve Generic SMP runtime STOP; son fiziksel PASS S92 immutable BOOT8G raw ve Pi kapalı.",
      "S99 reproducibility source, ELF, deploy-semantics ve yan-etki sınırlarının tamamında independent reviewer FINAL GO aldı.",
      "S99 docs/static-site proof 409 satır / 12.027 B / dc377aba…d8373; web 184/184, lint, TypeScript ve 23/23 static export PASS sonrasında frozen out exactly-one deploy ile `e0a62488.aselsan-microkernel.pages.dev` production'a yayımlandı ve dört canonical route byte-for-byte eşleşti.",
    ],
    terminalSessionsNote:
      "Sequence 99 oturumları mevcut workspace ELF'i salt-okunur referans alan ve yalnız geçici audit-root türevleri üreten reproducibility denetimleridir; canonical image/package/evidence veya fiziksel oturum değildir.",
    terminalSessions: [
      {
        id: "g8h-sequence99-source-contract",
        title: "Reproducibility source TDD ve snapshot sınırı",
        commandLines: [
          "cargo test -p aselsan_microkernel_simulation --test rpi5_g8h_reproducible_source -- --test-threads=1",
          "audit canonical path/content/mode manifests and independent replica inodes",
        ],
        outputLines: [
          "source=177 files/3352289 B · paths=5244beea…0b8",
          "content=a9e769aa…6a51 · modes=1948ee4d…d4a",
          "independent inodes=885/885 · symlink/nonregular/hardlink=0",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8h-sequence99-reproducibility",
        title:
          "Dört fresh production replica ve workspace semantik karşılaştırması",
        commandLines: [
          "make verify-rpi5-g8h-reproducible",
          "compare workspace + fresh main/A/B/C layout, raw, strip-all, loadable and debug variance",
        ],
        outputLines: [
          "workspace tests=313/313 · layout=5x8=40/40",
          "raw=316864/7e4b713a…70de1 · strip-all=382824/59a23f58…79fa",
          "loadable=2066/4dac229f…8ee1 · full/strip-debug=NON_ALLOC_VARIANT",
          "image build/package/evidence/device=NOT_RUN",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8h-sequence99-independent-final-audit",
        title: "Bağımsız reproducibility final audit",
        commandLines: [
          "re-audit frozen S99 source identities and five-subject deploy semantics",
          "compare source/tool/workspace/build-rpi5/DTB/config pre/post and inspect STOP boundaries",
        ],
        outputLines: [
          "S99 reproducibility reviewer=FINAL GO · blocker=NONE",
          "RAW_PAYLOAD=EXACT · STRIP_ALL=EXACT · LOADABLE=EXACT",
          "FULL_DEBUG/STRIP_DEBUG=NON_ALLOC_VARIANT only",
          "S100 immutable package=NEXT/STOP · physical BOOT8H=STOP · Pi=OFF",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
    ],
    limitations: [
      "S99 yalnız reproducible deploy-semantics kabulüdür; S100 immutable image/package sıradaki ayrı kapıdır ve henüz STOP'tur.",
      "Workspace ELF fresh build değildir; dört fresh main/A/B/C replica ile salt-okunur semantik referans olarak karşılaştırılmıştır.",
      "Full-debug ve strip-debug ELF byte'ları exact değildir; yalnız allowlist'teki non-ALLOC debug/symbol varyansı kabul edilir.",
      "IMAGE_BUILD=NOT_RUN; image, package, evidence, microSD ve bütün device/artifact kapıları STOP'tur.",
      "Pi kapalı tutulur; UART descriptor/capture, power ve fiziksel BOOT8H kapıları STOP'tur. Son fiziksel PASS S92 BOOT8G'dir.",
      "Generic SMP runtime, scheduler/runqueue, migration, TLB shootdown, CPU2/CPU3, hotplug ve soak kapalıdır.",
      "Web deploy provenance'i yalnız yayınlanan docs/static-site çıktısına aittir; kernel/image/package üretim veya Git-provider provenance'i kurmaz.",
    ],
  },
snippet sha256: 8a0166e0f6e4file sha256: 9726dbf00f84
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test rpi5_g8h_reproducible_source -- --test-threads=1
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 91d38c7b6222f0b4c117be786454853543da55a160e543d9b951057cc20dcc06