ASELSANMicrokernel
S3 · SOURCE-BOUND GATE EVIDENCE

Workspace test harness çakışması düzeltildi

Operations komutu/kapı ailesi → gerçek repository yürütme sözleşmesi Bu sayfa yalnız S3 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.

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

operation: workspace-test-harness

script/Makefile/config · Operations · 2 exact excerpt

sequence-bound=true · implementation-bound=false
01 · Yürütme sözleşmesi

Gerçek script / Makefile / config kaynağı

tam dosyaL1–L454
kernel/Cargo.toml::Cargo.toml
[package]
name = "aselsan_kernel"
version.workspace = true
edition.workspace = true
license.workspace = true
description = "ASELSAN Milli Telefon - Gerçek aarch64 Microkernel (EL1 + Capability + IPC)"

[[bin]]
name = "aselsan_kernel"
path = "src/main.rs"
# Bare-metal binary kendi panic handler'ına sahiptir. `cargo test --workspace`
# std test harness'ini bu binary'ye bağlamaya çalışırsa duplicate panic_impl oluşur.
test = false
bench = false

[dependencies]
aselsan_abi = { path = "../abi" }
# AselBrowser motoru telefon imajinin icinde. `default-features = false` ->
# no_std + alloc; std yok, unsafe yok (crate `#![forbid(unsafe_code)]`).
asel_browser = { path = "../userspace/asel_browser", default-features = false }
linked_list_allocator = { version = "0.10", default-features = false, features = ["use_spin"] }

# 0.9.8 was yanked on 2026-07-13; 0.9.9 is the un-yanked republish of the
# same 0.9 Mutex/RwLock API. Do not float back onto a yanked 0.9.8 pin.
spin = { version = "0.9.9", default-features = false, features = ["spin_mutex", "rwlock"] }
heapless = { version = "0.8", default-features = false }

# Bare-metal aarch64 için temel crate'ler (ileride eklenecek)
# aarch64 = "0.14"     # CPU register erişimi
# log = "0.4"          # Logging facade

# Profiller workspace root'ta tanımlı (Cargo.toml)

[features]
# R120: BCM43455'te BT ve WLAN ayni kalipta PMU/saat paylasir.  Bu bayrak
# SADECE BT-A1 bring_up'ini (BT_ON surme + UARTA yazma) atlar; salt-okunur
# BT envanteri ve Wi-Fi yolu aynen kalir.  Tek degiskenli cikarma deneyi.
rpi5-bt-isolate = []

default = ["board-qemu"]
# SMP / Multi-core desteği (henüz aktif değil, sadece iskelet)
smp = []

# M8.1 — Board / Platform seçimi (feature flag ile)
board-qemu = []
board-rpi4 = []
board-rpi5 = []
# Opt-in Touch Display 2 bring-up image.  It is deliberately separate from
# the frozen board-rpi5 image so a screen probe can never silently replace the
# R1/R2 physical evidence payload.
rpi5-screen-demo = []
# Dedicated foreground GT911 polling image. It deliberately diverges after
# SCREEN0 and never enters the frozen two-task G7 scheduler proof.
rpi5-touch-demo = ["rpi5-screen-demo"]
# Dedicated UI-Server live-frame image. It diverges after SCREEN0, owns the
# DSI heap through FramebufferManager::create_cap, and never enters the
# GT911 poll loop or the frozen two-task G7 scheduler proof.
rpi5-ui-server-demo = ["rpi5-screen-demo"]
# Attempt-23: iPhone-like pager + GT911 consumer. Separate from Path B
# ACCEPTED=0 poll image and from A21/A22 freezes.
rpi5-ios-home-demo = ["rpi5-touch-demo"]
# SD-A0: read-only SDHCI register inventory for the microSD controller.
# One new MMIO page, zero commands, zero writes.  Separate from the screen
# and ios-home images so a mapping mistake cannot reach them.
rpi5-sd-inventory = ["rpi5-ios-home-demo"]
# SD-A1: the first real SD command.  READ_SINGLE_BLOCK only; the module can
# emit no other command index.  Still zero card writes.
rpi5-sd-read = ["rpi5-sd-inventory"]

# SD-C W3: the first card write.  Only this image contains a write command
# index; every earlier stage is built without it and can be shown to be
# write-incapable rather than merely well behaved.
rpi5-sd-write = ["rpi5-sd-read"]

# SD-C W4: the superblock commit protocol.  Its own feature so the W3 image
# provably writes one data sector and nothing else, and the W4 image provably
# writes superblocks and no data sector.
rpi5-sd-write-superblock = ["rpi5-sd-write"]

# SD-C W5: codec-free bulk timing.  1024 data sectors of a fixed pattern, so
# the first throughput number belongs to the card and the write path and not
# to a scaler or an encoder that does not exist yet.
rpi5-sd-write-bulk = ["rpi5-sd-write"]

# SD-C W6: the same 1024 sectors and the same pattern, via CMD25 bursts of at
# most one cluster.  Built on bulk so the bytes on the card can be compared
# with W5's; the W5 loop is compiled out of this image.
rpi5-sd-write-multi = ["rpi5-sd-write-bulk"]

# SD-C W7: one real frame.  Scaler + RGB565 + ROW_RLE16 enter here.  Built on
# multi so the frame uses CMD25; the W6 pattern loop is compiled out.
rpi5-sd-write-frame = ["rpi5-sd-write-multi"]
# SENSORS: the four things this board can measure about itself -- hardware
# RNG, CPU temperature, the power button, and the CPU's own performance
# counters.  Three of the four are read-only; the RNG must start its block
# before it produces words, so it is the only one that writes.  Its own
# feature so the frozen ios-home image can be shown to map neither the AVS
# monitor, the RNG, nor the GPIO bank.
rpi5-sensors = ["rpi5-ios-home-demo"]

# WIFI-A0 + BT-A0: read-only inventory of the WiFi SDIO2 page and the
# Bluetooth UARTA page.  Zero commands, zero writes, zero HCI.  Separate
# from the SD and screen images so a mapping mistake cannot reach them.
rpi5-radio-inventory = ["rpi5-ios-home-demo"]

# Polled FullMAC control/escan path. Diagnostic radio images remain separate.
rpi5-wifi-scan = ["rpi5-radio-inventory"]

# R127: one-boot prerequisite sweep.  The scan image tries a single
# prerequisite-block configuration and dies on the first unanswered control
# request; this image walks a bounded matrix of configurations in one power
# cycle, re-arming ONLY on ControlTimeout and only while trial budget remains.
# Its own feature for two reasons.  First, the CCCR CARDCAP (0x000f0) write and
# the trial receipt fields exist nowhere else, so every earlier image can be
# shown to be incapable of them rather than merely not using them.  Second, the
# default path stays byte-for-byte the R126 straight-line block, so no sealed
# R99-R126 receipt is disturbed.
rpi5-wifi-sweep = ["rpi5-wifi-scan"]

# R130: add exactly one card-side recovery action to the R129 sweep.  Before
# every re-armed function-2 write, issue CCCR IO_ABORT for function 2 and
# record whether that CMD52 completed.  Kept in its own feature so rebuilding
# R127-R129 cannot silently acquire the abort.
rpi5-wifi-f2-abort = ["rpi5-wifi-sweep"]

# R131: replace R130's IO_ABORT with one verified function-2 lifecycle.  Clear
# F2 in CCCR IO_ENABLE, observe IO_READY clear, restore F2, and observe ready
# set before the re-armed write.  Block-size programming remains untouched.
rpi5-wifi-f2-reenable = ["rpi5-wifi-sweep"]

# R132: keep the verified R131 lifecycle, then sample/ack the new HOST_INT
# before the re-armed F2 write.  Kept separate from block-size programming.
rpi5-wifi-f2-post-irq = ["rpi5-wifi-f2-reenable"]

# R133: preserve the R132 chain, then reassert and verify the 512-byte
# function-2 block size immediately before the re-armed control write.
rpi5-wifi-f2-block-size = ["rpi5-wifi-f2-post-irq"]

# R134: preserve R133, then issue one host-controller-only SDHCI DATA reset
# immediately before the re-armed function-2 control write.  R134's physical
# run eliminated this action (same 0x0020 second-write failure); the feature
# remains so the sealed R134 image stays rebuildable byte-for-byte.
rpi5-wifi-host-data-reset = ["rpi5-wifi-f2-block-size"]

# R135: preserve the R133 chain (R134's eliminated send-boundary reset is NOT
# part of this image), then shape the re-armed function-2 control write with
# Linux's 64-byte short-write unit (16 zero-pad bytes).  The first bootstrap
# write keeps the R126 shape unchanged.  No card command, no host reset.
rpi5-wifi-f2-write-64 = ["rpi5-wifi-f2-block-size"]

# R138: complete the dongle host-mailbox handshake on EVERY mailbox read the
# way Linux's brcmf_sdio_hostmail does: acknowledge the data (SMB_INT_ACK to
# tosbmailbox) whether or not the value changed, and rewrite the protocol
# version to tosbmailboxdata whenever DEVREADY/FWREADY is reported.  R137
# measured zero mailbox changes with FWREADY never set; this feature changes
# only the timing of two writes that already exist.  No new register, reset,
# card command or frame byte.
rpi5-wifi-hostmail-complete = ["rpi5-wifi-sweep"]

# R139: write the CR4 reset vector the way Linux's brcmf_sdio_buscore_activate
# does — a 4-byte CMD53 with the SB_ACCESS_4B flag at backplane address 0 —
# with the validated CMD52 write as a bounded fallback.  R88 tried this before
# R94 reworked the CMD53 data-line discipline and it failed with data CRC
# 0x0060; the R139 desk measurement showed every other CR4-start value already
# matches Linux, so the transport of this one write is the remaining
# structural difference on the critical path.
rpi5-wifi-rstvec-cmd53 = ["rpi5-wifi-scan"]

# R140: the "host ready" handshake moves to the position Linux measured.  Linux
# writes SDPCM_PROT_VERSION << 16 to tosbmailboxdata (0x18004048) inside
# brcmf_sdio_firmware_callback (sdio.c:4261-4262) immediately after the CR4 is
# released — the R139 Linux wire trace puts it 74 us after the release ioctl and
# *before* F2 enable and before hostintmask — while R136-R139 wrote the same
# value seconds later, in the protocol-phase mail watch.  One write changes
# place; the protocol-phase watch keeps R138's acknowledgement but no longer
# repeats the version.  The same feature adds a read-only early witness that
# samples tohostmailboxdata/intstatus for ~600 ms after the write, so the
# dongle's DEVREADY and FWREADY timings become visible.
rpi5-wifi-hostready-at-start = ["rpi5-wifi-rstvec-cmd53"]

# R141: answer the dongle's mailbox interrupt where it happens.  R140 moved the
# "host ready" version write to the Linux position and the dongle answered with
# FWREADY 30 ms later (INTSTATUS 0x208000c0) — the first such signal in this
# project — but the R140 window was read-only, so the handshake was never
# acknowledged and the mailbox fell back to DEVREADY.  This feature performs
# exactly what Linux's ISR does in the same window: acknowledge the mailbox
# (SMB_INT_ACK to tosbmailbox) after each read and write-1-to-clear the observed
# intstatus bits, then close the window early once the handshake settles.
rpi5-wifi-mailbox-answer-at-start = ["rpi5-wifi-hostready-at-start"]

# R142: in a polling design the card must not drive the DAT1 interrupt line.
# R141's failure receipt measured HOST_CARD_INT=true with
# SDHCI_INT_SIGNAL_ENABLE=0 while the F1 4-byte CMD53 reads died with data CRC,
# and the permission to drive DAT1 comes from the CCCR INT_ENABLE pair this
# driver writes (0x03 then 0x07).  The same two writes now clear the master
# interrupt bit (0x02 then 0x06); the F1/F2 function bits are unchanged.
rpi5-wifi-int-enable-off = ["rpi5-wifi-mailbox-answer-at-start"]

# R143: the card's permission to drive DAT1 is the SDIO core host interrupt mask
# (0x18004024), which the R121 prerequisite block writes as 0x200000f0 to mimic
# Linux.  R142 cleared the CCCR master bit and the card still drove DAT1
# (HOST_CARD_INT=true, READ_FAILURES=5 again), so the gate is here.  A polling
# design reads intstatus directly and needs no host interrupt line: the mask is
# written as 0 instead.
rpi5-wifi-hostintmask-off = ["rpi5-wifi-int-enable-off"]

# R144: an intermittent data-line CRC on the poll's intstatus read must not end
# the trial.  The transport layer already performs a bounded recovery (SDHCI
# reset + one read; WIFIREAD_RECOVERY reports RECOVERY_OK=1 POST_READ_OK=1
# POST_VALUE=Some(0)) but still propagates the error, and R141/R142/R143 all
# died exactly there.  With this feature the read is taken once more after that
# recovery and only a second failure fails the trial.  Error path only: no new
# register, value, frame, clock or reset.
rpi5-wifi-poll-retry = ["rpi5-wifi-hostintmask-off"]

# R145: the same single-retry rule moves to the F2 frame reads.  R144 reached
# the protocol phase for the first time (interrupt_status_or=0xc0, FRAME_IND=1,
# HOST_INT=1) and died on the first F2 read: Cmd53Read fn=2 addr=0x8000,
# command_complete=true, buffer_ready=true, transfer_complete=false,
# bytes_read=64, error_status=0x20, timeout_transfer=true.  With this feature
# both FIFO reads are taken once more after the transport layer's bounded
# recovery; a second failure stays fatal.  Read geometry unchanged.
rpi5-wifi-fifo-retry = ["rpi5-wifi-poll-retry"]

# R146: read-only.  brcmfmac learns the dongle's state from the SDPCM shared
# area whose address sits in the last 4 bytes of RAM (brcmf_sdio_readshared);
# its flags word reports the firmware's own ASSERT/TRAP/FAIL state and carries
# the assert line/file and console addresses.  R145 measured a transport that
# carries eight trials with the mailbox parked at DEVREADY and no interrupt, so
# the missing information is what the dongle itself publishes.  This feature
# reads that pointer and the structure once, at the END of the run, with the
# ChipCommon chipid as a before/after sentinel; it writes nothing.
rpi5-wifi-shared-witness = ["rpi5-wifi-fifo-retry"]

# R147: read-only continuation of R146.  The dongle reported itself healthy and
# published a console address (W5_CONSOLE=0x0025debc), which is where the
# firmware keeps its own log text (Linux dumps it in brcmf_sdio_dump_console).
# This feature reads the console header, picks the first aligned RAM pointer
# found in it as the log buffer, dumps 128 bytes from it and 128 bytes from the
# console address itself, and prints the printable characters.  Nothing is
# written; the read stays at the end of the run behind a chipid sentinel.
rpi5-wifi-console-witness = ["rpi5-wifi-shared-witness"]

# R148: the console dump reads the WHOLE log.  R147's second boot read the first
# 128 bytes and showed the firmware's own wl0 lines ("wlc_channels_commit: no
# valid channel ...", "Broadcom BCM4345"), with the header measuring the buffer
# (W2=buf 0x0025dab4, W3=size 0x400, W4=idx 0x177 = 367 bytes written).  This
# feature reads the full buffer (<=1024 bytes) and prints all printable text,
# and retries the chipid sentinel a bounded number of times before the console
# read (R147 recorded SENT_B_OK=0 after the shared-area read).  Read-only.
rpi5-wifi-console-full = ["rpi5-wifi-console-witness"]

# R149: one bit — FORCE_HT.  Linux writes CHIPCLKCSR = saveclk | FORCE_HT
# (0xd2) immediately after releasing the CR4 (R139 wire trace t=143.630589);
# this driver's terminal value is 0xd0.  R148's full console dump shows the
# firmware writing "wl0: wlc_stf_txcore_shmem_write: No clock" and then losing
# its SDPCM datapath ("sdpcmd_dpc: Disable" -> "sdpcmd_tx: device disabled" ->
# "sdpcmd_sendheader: tx submit failed!!") exactly when our control frame was
# submitted.  This feature writes Linux's measured value.
rpi5-wifi-force-ht = ["rpi5-wifi-console-full"]

# R150: leave the D11 (PHY/TX) core out of reset.  R148/R149's firmware console
# reports "wl0: wlc_stf_txcore_shmem_write: No clock"; the R139 Linux wire trace
# contains no D11 reset-control write at all (only ioctl 0x07 =
# PHYCLOCKEN|FGC|CLK), while this driver asserts the reset and leaves it — and a
# core held in reset has no clock.  The reset is still asserted and verified as
# before; this feature releases it afterwards.
rpi5-wifi-d11-release = ["rpi5-wifi-force-ht"]

# R151: host-side timeline.  R150's console log carries the firmware's own
# timestamps ("000006.082 sdpcmd_dpc: Disable") while the host side has none, so
# the trigger of the repeating datapath-disable cannot be identified.  This
# feature records the CR4 release instant and stamps the critical host events
# (trial start/result, between-trial recovery, F2 enable, console read) with ms
# since that instant.  No behaviour changes; values, frames and resets are
# untouched.
rpi5-wifi-host-timeline = ["rpi5-wifi-d11-release"]

# R152: the R151 timeline produced T_MS=0 for every event because
# host_now_ms() divided by a frequency that is not yet cached on its first call
# (the T0 line printed 2018624513 = raw counter ticks).  This feature makes the
# ms source initialise the frequency itself, so the measurement R151 armed can
# actually be read.  Nothing else changes: still measurement only.
rpi5-wifi-timeline-fix = ["rpi5-wifi-host-timeline"]

# R153: the first control frame's SDPCM sequence byte.  This driver started at
# 255 (SDPCM_SEQ_WRAP-1); Linux's sealed measurement
# (linux-r136-first-frame-v3/decoded-pass1.txt) shows a small, increasing value
# (byte4_seq=0x02), and brcmfmac sets its counter to SDPCM_SEQ_WRAP-1 but
# increments before sending, so its first frame carries 0.  R152's aligned
# timeline showed that our frame is what makes the dongle disable its datapath
# and fail the tx submit; this is the one measured frame-byte difference left.
rpi5-wifi-seq-zero = ["rpi5-wifi-timeline-fix"]

# R154: the FIRST control frame's content.  Linux's sealed first (preinit) frame
# is a SET, not the GET this driver sends: cmd=263 (WLC_SET_VAR),
# flags=0x00040002 (id=4, SET), len=20, data "cur_etheraddr\0" + the 6-byte MAC
# measured on the same card (linux-r136-first-frame-v3).  The wire format stays
# R136's glom layout with dat_offset=20; only the dcmd content changes, and only
# for the first frame of the session.
rpi5-wifi-preinit-first = ["rpi5-wifi-seq-zero"]

# R155: measurement only.  The read-error recovery receipts (WIFIREAD_RECOVERY)
# carry an SDHCI line reset and had no timestamp, so the dongle's repeating
# "sdpcmd_dpc: Disable" could not be attributed to either our control frame
# (constant ~326 ms earlier) or our own bus reset.  This feature adds T_MS to
# that receipt; nothing else changes.
rpi5-wifi-recovery-timeline = ["rpi5-wifi-preinit-first"]

# R157: glom negotiation.  Linux's sealed preinit sequence sends its first two
# control frames WITHOUT the glom extension (data_offset 12) and negotiates glom
# only in the second frame (SET bus:rxglom = 1); this driver has been sending
# glom frames from the very first one.  R156's alignment showed the dongle
# disables its datapath right after our frame, so this feature replays the
# measured three-frame sequence byte for byte (two plain, then the glom
# cur_etheraddr frame).
rpi5-wifi-glom-negotiation = ["rpi5-wifi-recovery-timeline"]

# R158: drain before write.  In both R157 boots the F2 write failed
# (WriteFifo, F2 0x8000) while the dongle had frames indicated
# (CORE_OR=0xc0), so the measured preinit sequence never went out (SENT=0).
# Linux drains the pending SDPCM frames before its DPC writes a control frame;
# this feature keeps the preinit send behind the existing idle-queue gate.
rpi5-wifi-drain-first = ["rpi5-wifi-glom-negotiation"]

# R159: the F2 write unit for the plain (pre-negotiation) control frames.  Linux
# writes every short control frame to F2 0x8000 as a 64-byte unit (all R80/R136
# trace writes are 64 bytes; R135's note: "never 48 B").  Our first plain frame
# is 57 bytes, 4-byte aligned to 60, and that write is the one that failed with
# WriteFifo in both R157 boots and in R158's third boot, while the 8-byte-aligned
# glom frames had been accepted earlier.
rpi5-wifi-f2-write-unit = ["rpi5-wifi-drain-first"]

# R160: the ACCEPTANCE rule for that one F2 write.  R159's sealed WIFIREAD
# receipt shows the write was not refused by the card: ISSUED=1
# COMMAND_COMPLETE=1 BUFFER_READY=1 TRANSFER_COMPLETE=1 BYTES_READ=64,
# R5_FLAGS=0x10 (no bit of R5_ERROR_MASK) and the only complaint is SDHCI's
# data-CRC flag (ERROR_STATUS=0x0020).  The completeness predicate nevertheless
# fails the transfer because it requires error_status == 0, so the measured
# preinit sequence dies on its first frame.  This feature accepts exactly that
# measured class - a COMPLETED write with the exact requested byte count whose
# only error bit is the data CRC - counts it, prints it and continues.  Every
# other failure stays fatal; nothing is forgiven silently.
rpi5-wifi-f2-crc-accept = ["rpi5-wifi-f2-write-unit"]

# R161: the SCOPE of that verified rule.  R160 proved the class (completed
# transfer, exact byte count, no R5 error, only SDHCI's data-CRC bit) and the
# measured Linux preinit sequence went out for the first time (SENT=3, console
# "Disable" 0).  The run then died on the very next write - the ordinary 56-byte
# control frame in `send_control` - with the SAME measured class, because R160
# scoped the acceptance to the preinit sequence only.  This feature applies the
# identical pure rule to every SDPCM F2 write and counts them separately.
rpi5-wifi-f2-crc-scope = ["rpi5-wifi-f2-crc-accept"]

# R162: the IDENTITY of the control frames that follow the measured preinit
# sequence.  R161's sealed log (and R160's) shows the same requests going out
# twice: the preinit sequence sends dcmd ids 2, 3, 4 and the trial path then
# sends 4, 2, 3, 4.  The sealed Linux frame list increments the dcmd id for every
# single request (0x8f, 0x90, 0x91 ...) - ids are unique and monotonic.  At each
# of our repeated frames the dongle's own console disables its SDPCM TX
# ("sdpcmd_dpc: Disable", "sdpcmd_tx: device disabled",
# "sdpcmd_sendheader: tx submit failed!!").  This feature continues the id after
# the preinit sequence and stops replaying a request the dongle already received.
rpi5-wifi-ctrl-id-continuation = ["rpi5-wifi-f2-crc-scope"]

# R163: yazma öncesi F2 yaşam döngüsü "önce SOR" olur.  R162'nin mühürlü
# kaydı, her deneme öncesi yapılan F2 disable/re-enable toggle'ının dongle'ın
# kendi `sdpcmd_dpc: Disable` + `sdpcmd_tx: device disabled` +
# `sdpcmd_sendheader: tx submit failed!!` üçlüsüyle milisaniye düzeyinde
# çakıştığını ölçtü (her denemede bir kez, ≈2,98 s periyot); toggle yapmayan
# preinit yazmalarında ise o üçlü hiç görünmüyor.  Bu özellik F2 zaten açık ve
# READY ise dongle'ın SDIO cihazını kapatmaz; yalnız gerçekten hazır değilse
# R131 yaşam döngüsünü uygular.  Kayıt değerleri, çerçeve baytları ve diğer her
# şey aynı kalır.
rpi5-wifi-f2-ready-first = ["rpi5-wifi-ctrl-id-continuation"]

# Hands-free koşu altyapısı (RADYO DEĞİŞKENİ DEĞİL): BCM2712 PM watchdog'unu
# kurup saniyede bir besler ve konsol UART'ından `R` baytı gelince donanım
# resetini tetikler. Çerçeve baytlarına, SDPCM sırasına, kabul kuralına ve
# hiçbir SDIO kaydına dokunmaz; adresler kendi DTB'mizden ölçülmüştür
# (`watchdog@7d200000` -> 0x107d200000). Makbuzları: WIFIAUTORESET_PLAN,
# WIFIAUTORESET ARMED/RESET/RESULT. Açık olduğu imajlar mühründe
# `automation=rpi5-auto-reset` yazar.
rpi5-auto-reset = []

# R164 (ALTYAPI, radyo değişkeni DEĞİL): soğuk kart SD başlatması. Bugüne kadar
# her koşu SD'den boot ediyordu ve firmware kartı bizim için başlatıyordu;
# `read_block` bu "devralınan durum"a sessizce bağımlıydı. Netboot'ta bootloader
# karta hiç dokunmaz, bu yüzden FWREAD PART_LBA=0 VOL_OK=0 ölçüldü (2026-09-14,
# attempt-r163-f2-ready-first-uart-capture-repeat-01). Bu özellik açıkken önce
# devralınan yol denenir; yalnız kullanılamıyorsa SD spesifikasyonunun zorunlu
# kıldığı soğuk başlatma dizisi uygulanır ve okuma yinelenir. SD boot'ta dal hiç
# çalışmaz; karta yazma komutu üretilmez (CARD_WRITES=0).
rpi5-sd-cold-init = []

# Hands-free (ALTYAPI, radyo değişkeni DEĞİL): Wi-Fi payload'ını (BRCMFW.BIN,
# BRCMNVR.TXT, BRCMCLM.BLB) firmware'in `initramfs` mekanizmasıyla ağdan taşı ve
# FAT bölümü okunamadığında oradan kullan. Netboot'ta bootloader SD karta hiç
# dokunmadığı için FAT yolu düşüyor (ölçüldü: FWREAD PART_LBA=0); SD boot'ta bu
# dal hiç çalışmaz ve mevcut tüm makbuzlar yeniden kurulabilir kalır.
rpi5-fw-initramfs = []

# R165: okuma öncesi SINIRLI host-idle kapısı.  R163'te süpürmenin ikinci
# denemesi F1 INTSTATUS okumasında (`PRESENT_STATE=0x01ff0206` =
# DAT_INHIBIT|DAT_LINE_ACTIVE) düştü; R164 netboot koşusunda aynı nokta
# `Session(CommandDeadline(Mac))` olarak göründü.  Kapı, R114/R115'te fiziksel
# olarak kanıtlanmış `bounded_host_idle_poll`/`runtime_host_idle` çiftini okuma
# yoluna uygular: bekleme SINIRLIDIR ve sayıları makbuza girer.  Yazma yolu,
# çerçeve baytları ve tüm kayıt değerleri değişmez.
rpi5-wifi-read-gate = ["rpi5-fw-initramfs"]

# R166: okuma-hatti kurtarmasinin SINIRLI reset butcesi.  R163'un muhurlu
# makbuzu latch'in ILK olayda R116 reset'iyle acildigini (RESET_POLLS=2,
# ELAPSED_US=10, CLEARED=1) ve AYNI trial icinde tekrar armedigini olctu; ikinci
# olayda butce yoktu (USED_BEFORE=1 ELIGIBLE=0) ve supurme TRIALS_RUN=1'de
# kapandi.  R166 yalnizca kac olayin karsilanacagini degistirir; adres, hata
# sinifi, pasif sinir, DAT0/CMD kosullari ve reset dizisi aynen kalir.
rpi5-wifi-reset-budget = []

# R167: R127'nin State::Failed'dan TEK sinirli cikisina kabul edilen hata
# sinifini genisletir: ControlTimeout -> ControlTimeout + CommandDeadline.
# R166'nin muhurlu makbuzu duvari adiyla verdi: butce tukenmedi (BUDGET=4,
# USED_BEFORE 0->1->2) ve uc kurtarma da kabul edildi, ama kosu
# `STOP=NOT_REARMABLE` ile kapandi: oturum katmaninin adim zaman asimi
# (`Error::CommandDeadline(Step)`, brcmf_scan.rs) transport poll'undan ONCE
# donuyor, bu yuzden R127 uygunlugu (yalniz ControlTimeout'ta latch'li) hic
# kurulmuyor.  Baska hicbir sey degismez: kredi kurali, silahli supurme kosulu,
# profil siniri, prereq_stop adlari, reset butcesi, okuma kapisi, yazma yolu,
# cerceve bicimi ve Transport/Wire/Firmware siniflarinin fatal davranisi aynen.
rpi5-wifi-rearm-deadline = ["rpi5-wifi-sweep"]

# R168: okuma latch'inin NEDEN yeniden armlan-digini olcen SALT-OKUNUR tanik.
# R167'nin muhurlu makbuzu ayni okuma adresinde dort kurtarmanin da kabul
# edildigini ve butcenin 4/4 tukendigini gosterdi; latch her alisveriste yeniden
# armlaniyor ama nedeni olculmedi (kart kredisi mi, bekleyen veri sahipligi mi).
# Tanik yalniz CMD52 OKUMALARI yapar (CCCR IO_ENABLE/IO_READY/INT_PENDING/
# BUS_IFACE) ve R116/R119 karari HESAPLANDIKTAN SONRA kosar (R117 matrisi gibi);
# donen degeri ya da yuzeye cikan hatayi degistiremez.  Deponun sirasi once
# tanik sonra mekanizmadir (R114/R115 -> R116, R117 -> R119, R146 -> kullanim).
rpi5-wifi-read-owner = []

# R169: R168'in tanigi latch aninda karti SAGLIKLI buldu (F2 hem etkin hem
# hazir, komut inhibit temiz, DAT0 birakilmis, host bosta), yani yeniden
# armlanmanin nedeni kart sahipligi degil.  Kalan aday kredi: R169, tasima
# katmaninin tx_window/tx_sequence alanlarini her mutasyonda brcmf_sdio icindeki
# census tarzi atomiklere yayinlar ve okuma yolu latch aninda onlari SALT OKUR.
# Yeni kayit yazimi, yeni komut dizisi, reset/retry/CMD53 yinelemesi yok; makbuz
# WRITES=0 Kanitlar.
rpi5-wifi-credit-witness = []

# Source-only Layer-2 ownership/rate-graph contracts. This feature exposes no
# production callsite and performs no automatic MMIO.
rpi5-layer2-source = []
snippet sha256: a8dd2a5aa8a0file sha256: a8dd2a5aa8a0
02 · Kapı kimlik kaydı

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

tam Operations kaydıL35237–L35254
website/src/lib/operations.ts::workspace-test-harness
  {
    id: "workspace-test-harness",
    date: "2026-08-19",
    sequence: 3,
    status: "fixed",
    title: "Workspace test harness çakışması düzeltildi",
    summary:
      "Bare-metal kernel binary'sinin std test harness'e bağlanıp ikinci panic handler üretmesi engellendi.",
    evidence: [
      "kernel/Cargo.toml içindeki explicit bin hedefinde test=false ve bench=false tanımlandı.",
      "Önceki duplicate panic_impl bağlama hatası kalktı.",
      "cargo test --workspace exit 0 ile tamamlandı.",
    ],
    commands: ["cargo test --workspace"],
    limitations: [
      "Bu tarihsel koşuda simülasyon paketi 0 test bildirmişti; daha sonra eklenen dört davranışsal testin sonucu en üstteki tam doğrulama kaydında tutulur.",
    ],
  },
snippet sha256: c6b0a20a7cdbfile sha256: 9726dbf00f84
Kayıtlı yürütme/kanıt komutu
cargo test --workspace
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9