ASELSANMicrokernel
S116 · SOURCE-BOUND GATE EVIDENCE

S116 IORegistry exact-path preflight yazma ve lock öncesinde reddedildi

S116 ret kararı → exact IORegistry path/identity preflight kodu Bu sayfa yalnız S116 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.

S116Komut / fiziksel sözleşmeOperations id exactsource SHA exact

operation: rpi5-g8h-s116-ioregistry-preflight-rejected

script/Makefile/config · Operations · 2 exact excerpt

sequence-bound=true · implementation-bound=false
01 · Yürütme / doğrulama kodu

Kapının gerçek repository sözleşmesi

tam shell fonksiyonuL750–L891
scripts/flash-rpi5-g8h-staged.sh::require_unique_ioreg_binding
require_unique_ioreg_binding() {
    surface=$1
    printf '%s\n' "$surface" | awk \
        -v serial="$EXPECTED_CARD_SERIAL_DECIMAL" \
        -v product="$EXPECTED_IOREG_CARD_PRODUCT" \
        -v disk="${SD_DISK#/dev/}" \
        -v unit="$disk_suffix" \
        -v bytes="$EXPECTED_DISK_BYTES" \
        -v whole_name="$EXPECTED_IOREG_WHOLE_MEDIA_NAME" '
        function cells_ok(s, i, cell) {
            if (length(s) % 2 != 0) return 0
            for (i = 1; i <= length(s); i += 2) {
                cell = substr(s, i, 2)
                if (cell != "  " && cell != "| ") return 0
            }
            return 1
        }
        function literal_count(s, wanted, n, at) {
            n = 0
            while ((at = index(s, wanted)) != 0) {
                n++
                s = substr(s, at + length(wanted))
            }
            return n
        }
        /^[| ]*[+]-o / {
            marker = index($0, "+-o ")
            prefix = substr($0, 1, marker - 1)
            if (!cells_ok(prefix)) { bad++; next }
            depth_now = length(prefix) / 2
            if (depth_now > 0 && !(depth_now - 1 in stack)) { bad++; next }
            object++
            depth[object] = depth_now
            parent[object] = depth_now == 0 ? 0 : stack[depth_now - 1]
            if (depth_now == 0) root_objects++
            for (d = depth_now; d <= max_depth; d++) delete stack[d]
            stack[depth_now] = object
            if (depth_now > max_depth) max_depth = depth_now
            header = substr($0, marker + 4)
            class_at = index(header, "  <class ")
            if (class_at == 0) { bad++; next }
            name[object] = substr(header, 1, class_at - 1)
            class_text = substr(header, class_at + 9)
            sub(/[,>].*$/, "", class_text)
            class[object] = class_text
            current = object
            next
        }
        {
            if (current == 0) next
            first_quote = index($0, "\"")
            if (first_quote == 0) next
            property_prefix = substr($0, 1, first_quote - 1)
            if (length(property_prefix) != 2 * depth[current] + 6) { bad++; next }
            if (!cells_ok(property_prefix)) { bad++; next }
            after_quote = substr($0, first_quote + 1)
            second_quote = index(after_quote, "\"")
            if (second_quote == 0) { bad++; next }
            key = substr(after_quote, 1, second_quote - 1)
            tail = substr(after_quote, second_quote + 1)
            if (!match(tail, /^[[:space:]]*=[[:space:]]*/)) { bad++; next }
            value = substr(tail, RLENGTH + 1)
            sub(/[[:space:]]*$/, "", value)
            slot = current SUBSEP key
            property_count[slot]++
            property_value[slot] = value
        }
        END {
            for (i = 1; i <= object; i++) {
                if (depth[i] == 0 && name[i] == "AppleSDXC" && class[i] == "AppleSDXC") {
                    root_node[i] = 1
                    roots++
                }
                if (name[i] == "Port-SD Card@1") {
                    card_nodes++
                    chars = property_value[i SUBSEP "Card Characteristics"]
                    if (class[i] == "AppleSDXCSlot" &&
                        property_count[i SUBSEP "Card Characteristics"] == 1 &&
                        chars ~ /^\{.*\}$/ &&
                        literal_count(chars, "\"Product Name\"=") == 1 &&
                        literal_count(chars, "\"Product Name\"=\"" product "\"") == 1 &&
                        literal_count(chars, "\"Serial Number\"=") == 1 &&
                        literal_count(chars, "\"Serial Number\"=" serial ",") == 1) {
                        if (root_node[parent[i]]) {
                            valid_card[i] = 1
                            valid_cards++
                        }
                    }
                }
                if (class[i] == "AppleSDXCSlot") slot_nodes++
            }
            for (i = 1; i <= object; i++) {
                if (name[i] == "AppleSDXCBlockStorageDevice") {
                    block_nodes++
                    if (class[i] == "AppleSDXCBlockStorageDevice" &&
                        valid_card[parent[i]]) {
                        valid_block[i] = 1
                        valid_blocks++
                    }
                }
            }
            for (i = 1; i <= object; i++) {
                if (name[i] == "IOBlockStorageDriver") {
                    driver_nodes++
                    if (class[i] == "IOBlockStorageDriver" &&
                        valid_block[parent[i]]) {
                        valid_driver[i] = 1
                        valid_drivers++
                    }
                }
            }
            for (i = 1; i <= object; i++) {
                bsd_slot = i SUBSEP "BSD Name"
                if (property_count[bsd_slot] > 0 && property_value[bsd_slot] == "\"" disk "\"") {
                    target_bsd_occurrences += property_count[bsd_slot]
                    if (class[i] == "IOMedia") target_media_nodes++
                }
                if (class[i] == "IOMedia" &&
                    property_count[i SUBSEP "Whole"] == 1 && property_value[i SUBSEP "Whole"] == "Yes") whole_media_nodes++
                if (class[i] == "IOMedia" && name[i] == whole_name &&
                    property_count[i SUBSEP "Content"] == 1 && property_value[i SUBSEP "Content"] == "\"FDisk_partition_scheme\"" &&
                    property_count[i SUBSEP "Removable"] == 1 && property_value[i SUBSEP "Removable"] == "Yes" &&
                    property_count[i SUBSEP "Whole"] == 1 && property_value[i SUBSEP "Whole"] == "Yes" &&
                    property_count[bsd_slot] == 1 && property_value[bsd_slot] == "\"" disk "\"" &&
                    property_count[i SUBSEP "Ejectable"] == 1 && property_value[i SUBSEP "Ejectable"] == "Yes" &&
                    property_count[i SUBSEP "Writable"] == 1 && property_value[i SUBSEP "Writable"] == "Yes" &&
                    property_count[i SUBSEP "Size"] == 1 && property_value[i SUBSEP "Size"] == bytes &&
                    property_count[i SUBSEP "BSD Unit"] == 1 && property_value[i SUBSEP "BSD Unit"] == unit) {
                    valid_media++
                    if (valid_driver[parent[i]]) paths++
                }
            }
            if (bad != 0 || root_objects != 1 || roots != 1 || slot_nodes != 1 ||
                card_nodes != 1 || valid_cards != 1 ||
                block_nodes != 1 || valid_blocks != 1 ||
                driver_nodes != 1 || valid_drivers != 1 ||
                whole_media_nodes != 1 ||
                target_bsd_occurrences != 1 || target_media_nodes != 1 ||
                valid_media != 1 || paths != 1) exit 1
        }
    ' || fail "ioreg identity is not one exact card-ancestor/whole-IOMedia-descendant path"
}
snippet sha256: 20d8501756a3file sha256: e6e76ea1e37c
02 · Kapı kimlik kaydı

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

tam Operations kaydıL27350–L27381
website/src/lib/operations.ts::rpi5-g8h-s116-ioregistry-preflight-rejected
  {
    id: "rpi5-g8h-s116-ioregistry-preflight-rejected",
    date: "2026-08-23",
    sequence: 116,
    status: "passed",
    closure: {
      status: "passed",
      sequence: 119,
      operation_id: "rpi5-g8h-s119-appledouble-aware-microsd-write-verified",
      summary:
        "Düzeltilen exact-path preflight zinciri S119 AppleDouble-aware storage transaction'ında bağımsız kimlik, manifest, read-back, sync ve eject PASS ile kapandı.",
    },
    title:
      "S116 IORegistry exact-path preflight yazma ve lock öncesinde reddedildi",
    summary:
      "Düzeltilmiş system_profiler alanları hedefi bağladı; ancak IORegistry property-tree satırının dört karakterlik dal-art ekiyle bitmesi gerektiği varsayımı gerçek `IOPortTransportStateSD` leaf biçimini reddetti. Deneme lock oluşturulmadan ve kartta tek bayt yazılmadan durdu. Exact prefix uzunluğu ve hücre sınırı doğrulaması gerçek snapshot ile düzeltildi; malformed prefix, duplicate BSD ve wrong-driver negatifleri korunarak source-only gate yeniden geçti.",
    evidence: [
      "Preflight exact target üzerinde yalnız read-only diskutil/system_profiler/ioreg sorguları yaptı.",
      "LOCK=ABSENT, WRITE=0, SYNC=0 ve EJECT=0; kart S89 exact4 kaldı.",
      "Gerçek IORegistry snapshot exact-path testi PASS; malformed-target-prefix, duplicate-BSD ve wrong-driver fixture'ları REJECT.",
      "Kalıcı kanıt: `evidence/rpi5/g8h/sequence-116-ioregistry-exact-path-preflight-rejected`.",
    ],
    commands: [
      "make flash-rpi5-g8h-staged SD_DISK=/dev/disk6 SD_MOUNT=/Volumes/ASELSANBOOT S101_FLASH_AUTH=<exact-authorization-token>",
      "/usr/sbin/ioreg -r -l -w 0 -c AppleSDXC",
      "make verify-rpi5-g8h-staged-flash-source",
    ],
    limitations: [
      "Yazma branch'i açılmadı; bu kayıt S100 storage kabulü değildir.",
      "Kart boot edilmedi; UART=STOP, POWER=STOP ve PHYSICAL_BOOT8H=STOP.",
    ],
  },
snippet sha256: 9b46fbb060b4file sha256: 9726dbf00f84
Kayıtlı yürütme/kanıt komutu
make flash-rpi5-g8h-staged SD_DISK=/dev/disk6 SD_MOUNT=/Volumes/ASELSANBOOT S101_FLASH_AUTH=<exact-authorization-token>
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 91d38c7b6222f0b4c117be786454853543da55a160e543d9b951057cc20dcc06