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: 20d8501756a3…file 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: 9b46fbb060b4…file 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