ASELSANMicrokernel
S347 · SOURCE-BOUND GATE EVIDENCE

S347 · Current-runtime-OOM binding-mismatch restore production writer guard integration

production acquire → S247 guard modülü → Operations-bound focused test Bu sayfa yalnız S347 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.

S347Production writer guardOperations id exactsource SHA exacttest target exact

operation: g8l-s347-current-runtime-oom-binding-mismatch-restore-writer-guard-integration-partial

production · S247 guard · focused test · Operations · 4 exact excerpt

sequence-bound=true · implementation-bound=true
01 · Test edilen uygulama/model kodu

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

tam Rust öğesiL5190–L5420
kernel/src/task/scheduler.rs::execute_armed_current_runtime_oom_if_target

/// If the armed S131 target is current, re-audit both authority boundaries,
/// close IPC, publish Dead, move the carrier back into static scheduler
/// storage, quiesce the address space and switch away. The active task and its
/// stack are deliberately never detached or reaped in this function.
pub unsafe fn execute_armed_current_runtime_oom_if_target(
) -> Result<(), RuntimeOomTaskExecutionError> {
    #[cfg(feature = "board-rpi5")]
    let s258_identity_scheduler_read_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s257_runtime_oom_preflight_read_access_guard_expansion::acquire_s258_production_scheduler_read_access()
        .unwrap_or_else(|error| {
            panic!(
                "S258 current OOM identity scheduler read access failed closed: {:?}",
                error
            )
        });
    let (armed_target, current_task_id) = {
        let sched = &*core::ptr::addr_of!(SCHEDULER);
        (
            sched
                .deferred_current_runtime_oom
                .as_ref()
                .map(|carrier| carrier.binding.task_id),
            sched.current_task.as_ref().map(|task| task.id),
        )
    };
    #[cfg(feature = "board-rpi5")]
    drop(s258_identity_scheduler_read_access);
    let Some(armed_target) = armed_target else {
        return Ok(());
    };
    if current_task_id != Some(armed_target) {
        return Ok(());
    }

    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s351_irq_guard = crate::arch::aarch64::IrqGuard::new();
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s351_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s351_current_runtime_oom_carrier_take_writer_guard_integration::acquire_s351_production_scheduler_writer_access()
        .unwrap_or_else(|error| {
            panic!(
                "S351 current-runtime-OOM carrier-take writer guard failed closed: {:?}",
                error
            )
        });
    let carrier_result = (&mut *core::ptr::addr_of_mut!(SCHEDULER))
        .deferred_current_runtime_oom
        .take();
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s351_writer_access);
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s351_irq_guard);
    let mut carrier = carrier_result.ok_or(RuntimeOomTaskExecutionError::DeferredTargetMismatch)?;
    let ticket_preflight = match crate::mm::with_boot_runtime_memory(|memory| {
        carrier
            .coordinator
            .preflight_teardown(&carrier.ticket, memory)
    }) {
        Ok(Ok(preflight)) => preflight,
        Ok(Err(error)) => {
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            let s350_irq_guard = crate::arch::aarch64::IrqGuard::new();
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            let s350_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s350_current_runtime_oom_coordinator_preflight_error_restore_writer_guard_integration::acquire_s350_production_scheduler_writer_access()
                .unwrap_or_else(|access_error| {
                    panic!(
                        "S350 current-runtime-OOM coordinator-preflight error carrier restore writer guard failed closed: {:?}",
                        access_error
                    )
                });
            (&mut *core::ptr::addr_of_mut!(SCHEDULER)).deferred_current_runtime_oom = Some(carrier);
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            drop(s350_writer_access);
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            drop(s350_irq_guard);
            return Err(RuntimeOomTaskExecutionError::CoordinatorPreflight(error));
        }
        Err(_) => {
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            let s349_irq_guard = crate::arch::aarch64::IrqGuard::new();
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            let s349_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s349_current_runtime_oom_boot_memory_error_restore_writer_guard_integration::acquire_s349_production_scheduler_writer_access()
                .unwrap_or_else(|error| {
                    panic!(
                        "S349 current-runtime-OOM boot-memory error carrier restore writer guard failed closed: {:?}",
                        error
                    )
                });
            (&mut *core::ptr::addr_of_mut!(SCHEDULER)).deferred_current_runtime_oom = Some(carrier);
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            drop(s349_writer_access);
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            drop(s349_irq_guard);
            return Err(RuntimeOomTaskExecutionError::BootMemoryAuthority);
        }
    };
    #[cfg(feature = "board-rpi5")]
    let s258_binding_scheduler_read_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s257_runtime_oom_preflight_read_access_guard_expansion::acquire_s258_production_scheduler_read_access()
        .unwrap_or_else(|error| {
            panic!(
                "S258 current OOM binding scheduler read access failed closed: {:?}",
                error
            )
        });
    let binding_result =
        (&*core::ptr::addr_of!(SCHEDULER)).audit_runtime_oom_task_binding(ticket_preflight);
    #[cfg(feature = "board-rpi5")]
    drop(s258_binding_scheduler_read_access);
    let binding = match binding_result {
        Ok(binding) => binding,
        Err(error) => {
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            let s348_irq_guard = crate::arch::aarch64::IrqGuard::new();
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            let s348_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s348_current_runtime_oom_binding_audit_error_restore_writer_guard_integration::acquire_s348_production_scheduler_writer_access()
                .unwrap_or_else(|access_error| {
                    panic!(
                        "S348 current-runtime-OOM binding-audit error carrier restore writer guard failed closed: {:?}",
                        access_error
                    )
                });
            (&mut *core::ptr::addr_of_mut!(SCHEDULER)).deferred_current_runtime_oom = Some(carrier);
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            drop(s348_writer_access);
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            drop(s348_irq_guard);
            return Err(error);
        }
    };
    if binding.location != RuntimeOomTaskLocation::Current
        || binding.task_id != carrier.binding.task_id
        || binding.domain != carrier.binding.domain
        || binding.asid != carrier.binding.asid
        || binding.frame_count != carrier.binding.frame_count
    {
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        let s347_irq_guard = crate::arch::aarch64::IrqGuard::new();
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        let s347_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s347_current_runtime_oom_binding_mismatch_restore_writer_guard_integration::acquire_s347_production_scheduler_writer_access()
            .unwrap_or_else(|error| {
                panic!(
                    "S347 current-runtime-OOM binding-mismatch carrier restore writer guard failed closed: {:?}",
                    error
                )
            });
        (&mut *core::ptr::addr_of_mut!(SCHEDULER)).deferred_current_runtime_oom = Some(carrier);
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        drop(s347_writer_access);
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        drop(s347_irq_guard);
        return Err(RuntimeOomTaskExecutionError::DeferredTargetMismatch);
    }

    let ipc_teardown = match crate::ui::capability::teardown_task_ipc_lifecycle(binding.task_id) {
        Ok(lifecycle) => RuntimeOomIpcTeardown::from_lifecycle(lifecycle),
        Err(_) => {
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            let s346_irq_guard = crate::arch::aarch64::IrqGuard::new();
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            let s346_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s346_current_runtime_oom_ipc_lifecycle_restore_writer_guard_integration::acquire_s346_production_scheduler_writer_access()
                .unwrap_or_else(|error| {
                    panic!(
                        "S346 current-runtime-OOM IPC-lifecycle carrier restore writer guard failed closed: {:?}",
                        error
                    )
                });
            (&mut *core::ptr::addr_of_mut!(SCHEDULER)).deferred_current_runtime_oom = Some(carrier);
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            drop(s346_writer_access);
            #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
            drop(s346_irq_guard);
            return Err(RuntimeOomTaskExecutionError::IpcLifecycle);
        }
    };
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s345_irq_guard = crate::arch::aarch64::IrqGuard::new();
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s345_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s345_current_runtime_oom_commit_writer_guard_integration::acquire_s345_production_scheduler_writer_access()
        .unwrap_or_else(|error| {
            panic!(
                "S345 current-runtime-OOM final scheduler commit writer guard failed closed: {:?}",
                error
            )
        });
    let sched = &mut *core::ptr::addr_of_mut!(SCHEDULER);
    let Some(task) = sched.current_task.as_mut() else {
        sched.deferred_current_runtime_oom = Some(carrier);
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        drop(s345_writer_access);
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        drop(s345_irq_guard);
        return Err(RuntimeOomTaskExecutionError::SchedulerCommitMismatch);
    };
    if task.id != binding.task_id
        || task.runtime_allocation_domain() != Some(binding.domain)
        || task.asid != binding.asid
        || task
            .runtime_user_frames
            .as_ref()
            .map_or(0, |ledger| ledger.frame_count())
            != binding.frame_count
    {
        sched.deferred_current_runtime_oom = Some(carrier);
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        drop(s345_writer_access);
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        drop(s345_irq_guard);
        return Err(RuntimeOomTaskExecutionError::SchedulerCommitMismatch);
    }

    task.finished.store(true, Ordering::Release);
    task.state = TaskState::Dead;
    task.user_sp = 0;
    task.saved_user_elr = 0;
    task.saved_user_spsr = 0;
    task.saved_user_gprs = [0; 31];
    carrier.binding = binding;
    carrier.ipc_lifecycle_closed = true;
    carrier.ipc_teardown = Some(ipc_teardown);
    sched.deferred_current_runtime_oom = Some(carrier);
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s345_writer_access);
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s345_irq_guard);

    retire_current_asid_after_kernel_switch();
    yield_now();
    crate::arch::aarch64::disable_irqs();
    loop {
        core::arch::asm!("wfe", options(nomem, nostack));
    }
}
snippet sha256: ae9e4955a1e0file sha256: 838dd474448c
02 · Ortak exclusion üyeliği

S247 production writer guard

tam Rust öğesiL160–L172
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s347_current_runtime_oom_binding_mismatch_restore_writer_guard_integration.rs::acquire_s347_production_scheduler_writer_access

#[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
pub fn acquire_s347_production_scheduler_writer_access(
) -> Result<G8lS347ProductionSchedulerWriterAccess, G8lS247WholeSchedulerAccessError> {
    let caller_cpu =
        crate::percpu::try_current_cpu_id().ok_or(G8lS247WholeSchedulerAccessError::InvalidCpu)?;
    if caller_cpu != crate::g8l_runtime_contract::CPU0 {
        return Err(G8lS247WholeSchedulerAccessError::InvalidCpu);
    }
    let access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s246_whole_scheduler_read_access_guard::S247_PRODUCTION_WHOLE_SCHEDULER_ACCESS_GATE
        .try_acquire_exclusive_for_valid_cpu(caller_cpu)?;
    Ok(G8lS347ProductionSchedulerWriterAccess { _access: access })
}
snippet sha256: d4a0a137f1b0file sha256: aac9cb0a43e9
03 · Doğrulayan test kodu

Operations komutuna bağlı focused test

tam Rust öğesiL292–L301
simulation/tests/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s347_current_runtime_oom_binding_mismatch_restore_writer_guard_integration.rs::mismatch_branch_has_exactly_one_s347_acquire

#[test]
fn mismatch_branch_has_exactly_one_s347_acquire() {
    assert_eq!(
        binding_mismatch_boundary()
            .matches("acquire_s347_production_scheduler_writer_access")
            .count(),
        1
    );
}
snippet sha256: 3492eb7dea2afile sha256: 78cabb55ec1f
04 · Kapı kimlik kaydı

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

tam Operations kaydıL13318–L13406
website/src/lib/operations.ts::g8l-s347-current-runtime-oom-binding-mismatch-restore-writer-guard-integration-partial
  {
    id: "g8l-s347-current-runtime-oom-binding-mismatch-restore-writer-guard-integration-partial",
    date: "2026-08-28",
    sequence: 347,
    status: "passed",
    umbrella_status: "partial",
    title:
      "S347 · Current-runtime-OOM binding-mismatch restore production writer guard integration",
    summary:
      "S347, execute_armed_current_runtime_oom_if_target içindeki kaynak sırasına göre S346 IPC-lifecycle restore'dan hemen önce gelen audited-binding mismatch carrier-restore writer sınırını aynı statik S247 state word'e bağlar. İkinci S258 reader owned RuntimeOomTaskBinding sonucunu çıkardıktan ve membership'i explicit bıraktıktan sonra location=Current, task id, allocation domain, ASID ve frame-count beşlisinden biri carrier binding ile uyuşmazsa ayrı IrqGuard kurulur; gerçek per-CPU kimliğiyle CPU0-only S347 exclusive writer herhangi bir yeni mutable SCHEDULER aliasından önce alınır. Owned carrier exact deferred_current_runtime_oom slotuna geri yayınlanır; writer, ardından IRQ guard explicit bırakılır ve yalnız sonra tarihsel DeferredTargetMismatch döner. Guarded writer 20/69, açık writer 49 ve provider authority 0'dır. İki board-qemu source callsite vardır, fakat RPi5-only wrapper supported-profile runtime observation=0'dır. Binding-audit error, boot-memory error, coordinator-preflight error ve carrier-take aliasları S348–S351 için ayrı açık kalır; sıradaki kapı S348 binding-audit error restore entegrasyonudur.",
    evidence: [
      "Focused binding-mismatch restore writer-integration kapısı 36/36 PASS verdi. Önceki S346 36/36 ve S345 37/37; gerçek hedef adı S257 ile başlayan tarihsel S258 runtime-OOM preflight reader 11/11; current-deferred 5/5; effect 5/5; lifecycle recovery 7/7; live IPC teardown 5/5; scheduler executor 5/5; timer trigger 5/5; S341 31/31 ve S334 26/26 regresyonları ayrıca geçti.",
      "Aynı S247 state word üzerinde CPU0-only membership, non-CPU0 pre-restore rejection, reader→writer, writer→reader ve writer→writer exclusion, callback-error sonrası exact release ve S346→S347 token monotonluğu doğrulandı. Callback hiçbir fail-closed access reddinde çağrılmadı.",
      "Production mismatch sırası S258 binding reader acquire → audit sonucunu owned değere çıkarma → reader drop → location/task/domain/ASID/frame-count beşli karşılaştırması → S347 IrqGuard → S347 writer acquire → tek mutable SCHEDULER alias → exact carrier restore → writer drop → IRQ drop → DeferredTargetMismatch return olarak kaynak-kilitlidir.",
      "Mismatch kolunda exact bir S347 acquire, bir mutable alias ve bir explicit writer drop vardır. Exact-match kolu S347 membership almaz; daha sonraki S346 IPC-lifecycle restore ve S345 final commit ayrı transaction'lar olarak kalır, nested writer lease oluşmaz.",
      "S348 binding-audit error restore, S349 boot-memory error restore, S350 coordinator-preflight error restore ve S351 carrier-take aliasları S347 acquisition'dan önce kalır ve bu kapıda guarded sayılmaz. S352 arm-current-runtime-OOM writer sınırı da ayrı bir sonraki kaynak kapısıdır.",
      "S347 preflight önce S346'nın 44 guarded reader / 19 guarded writer / 50 open envanterini exact doğrular; yalnız sonra 20/69 guarded writer ve 49 open sonucu üretir. Inventory drift fail-closed reddedilir. S245 request yalnız pending_view ile non-consuming incelenir; request take edilmez ve S244 admission/provider authority oluşturulmaz.",
      "kernel/src/arch/aarch64/exceptions.rs içinde execute_armed_current_runtime_oom_if_target için iki direct board-qemu source callsite sayıldı. Bu çağrılar RPi5-only S347 wrapper'ın runtime invocation kanıtı değildir; supported-profile runtime observations=0'dır.",
      "Fresh ve birbirinden yalıtılmış AArch64 profilleri 4/4 exit 0 verdi: board-qemu build 111543 B / c4ff10a6…8b30 / 293 warning header; board-rpi4 build 150268 B / 48c0ff2f…5fe0 / 391; board-rpi5 build 546340 B / f4ae1abb…88c6 / 1220; board-rpi5+smp check 546282 B / 9a25a5aa…fb0 / 1220. Warning başlıkları sayılmıştır; zero-warning iddiası yoktur.",
      "İlk profil ölçüm harness'leri gerçek derlemeleri tamamladıktan sonra zsh'nin salt-okunur status değişkenine yazma tanısında durdu; ürün build failure sayılmadı. Ölçümler fresh ve birbirinden yalıtılmış dört hedef dizininde düzeltilmiş harness ile sıfırdan tekrar alındı; yukarıdaki dört exit-0 artifact yalnız bu authoritative koşulardandır.",
      "S238–S347 dependency matrisi exact sıra listesiyle iki bağımsız seri koşuda 111 ayrı grup / 1835/1835 PASS verdi. İki ham özet 25834 B olup 39512059…7552 ve 47017012…9998 SHA-256 değerleri yalnız beş ölçülen 0.00/0.01 s alanında ayrışır; raw byte equality iddia edilmez. 26389 B süre-normalize kanonik özetler 8f9b28b6…0f71 ile byte-eşittir.",
      "İlk regresyon komutu mevcut olmayan s258...preflight test-target adını kullandı ve Cargo exit 101 doğru s257...runtime_oom_preflight_read_access_guard_expansion hedefini önerdi. Bu komut-adı tanısı ürün failure olarak sayılmadı; doğru tarihsel hedef fresh koşuda 11/11 PASS verdi ve bağımlılık kabulü düzeltilmiş exact hedef listesiyle baştan alındı.",
      "Exact yedi tarihsel assertion adı dışlanıp --test-threads=1 kabulü kullanıldığında workspace 309 sonuç grubu / 3670 PASS / 0 fail / 7 filtered verdi; 67943 B log 059ab86e…eb9a SHA-256'dır.",
      "Filtresiz workspace exit 101 ile yalnız frozen S96 wiring_does_not_mutate_timer_gic_boot_or_expand_runtime_scope source-identity reddinde durdu; 262 sonuç grubunda 3415 PASS / 1 fail, 63165 B log f6b3a666…1f1f'dir ve global workspace GREEN iddia edilmez.",
      "make verify-qemu ortak regresyonu 116447 B / d46f9d00…a433 ile strict ELF W^X 31/31, S130–S154 Runtime-OOM/deadline zinciri, IPC reply 20/20, scheduler SEC5 ve kernel fault marker 0 PASS verdi. RPi5-only S347 writer bu board-qemu koşusunda runtime-observed değildir.",
      "Website S347 yüzeyi 542/542 test, lint, boş çıktılı TypeScript ve 23/23 static route build PASS verdi; çıktı 193 dosya ve Timeline 186 ayrı gate-policy kartıdır. İlk production/main içerik yayını 8cb503dd-f4a1-45af-8888-dc8a24527590 kimliğiyle 109 upload + 84 mevcut = 193 dosya olarak tamamlandı; 1558 B deploy logu 1f57d9ba…09e SHA-256'dır. Cache-busted custom-domain Operations HTTP 200 / 10764991 B / b8a41590…0ca7, Timeline HTTP 200 / 2924783 B / 4b9efe36…7f09 ve yol-haritasi HTTP 200 / 2924531 B / 74a771a7…c101 artifact'leri deployment build yerel out'u ile byte-exact PASS verdi. Immutable 8cb503dd hostname probe'u 10 saniyede curl exit 28 / HTTP 000 verdi; custom-domain PASS bu sınırı gizlemez.",
      "İlk yayın kanıtını taşıyan final production/main dağıtımı 400a93d4-edff-4718-bf51-fa3ae70bfb83 kimliğiyle 109 upload + 84 mevcut = 193 dosya olarak tamamlandı; 1558 B final deploy logu ef59b434…2108 SHA-256'dır. Cache-busted custom-domain Operations HTTP 200 / 10767850 B / dd2410ff…7f38, Timeline HTTP 200 / 2927234 B / c7af45cb…7752 ve yol-haritasi HTTP 200 / 2926982 B / 123f9136…a5f0 artifact'leri final deployment build yerel out'u ile byte-exact PASS verdi. Immutable 400a93d4 hostname probe'u 10 saniyede curl exit 28 / HTTP 000 verdi; immutable-host PASS iddia edilmez.",
      "S245 request yalnız non-consuming incelenir; S244 admission dokunulmadan kalır. Production provider authority=0, whole-scheduler exclusion=false ve toplam 49 production writer açık kalır.",
      "S347 için güç, SD kart, Mac kart erişimi, UART capture, raw validation, archive veya promotion işlemi yapılmadı: physical/device operations=0 ve RUNBOOK_EXECUTED_IN_S347=NO.",
    ],
    commands: [
      "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s347_current_runtime_oom_binding_mismatch_restore_writer_guard_integration -- --test-threads=1",
      "cargo build -p aselsan_kernel --target aarch64-unknown-none --no-default-features --features board-rpi5",
      "cargo check -p aselsan_kernel --target aarch64-unknown-none --no-default-features --features board-rpi5,smp",
      "make verify-qemu",
      "npm test && npm run lint && npx tsc --noEmit && npm run build && npm run deploy",
    ],
    terminalSessions: [
      {
        id: "g8l-s347-focused-binding-mismatch-restore-writer-guard",
        title: "S347 focused binding-mismatch restore writer membership",
        commandLines: [
          "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s347_current_runtime_oom_binding_mismatch_restore_writer_guard_integration -- --test-threads=1",
        ],
        outputLines: [
          "test result: ok; S347 focused 1 group / 36 passed; 0 failed",
          "shared S247 gate: 44 guarded readers + 20/69 guarded writers; 49 writers open",
          "S258 owned binding/drop < five-part mismatch < S347 IRQ/writer < one carrier restore < writer/IRQ drop < DeferredTargetMismatch",
          "production source callsites=2 board-qemu; supported-profile RPi5 runtime observations=0",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s347-operations-timeline-production-publication",
        title: "S347 Operations/Timeline production publication",
        commandLines: [
          "npm run deploy",
          "curl --cache-busted https://aselsan.kerege.net/{operations,timeline,yol-haritasi}/ and compare with local out",
        ],
        outputLines: [
          "website test 542/542; lint PASS; TypeScript PASS; static routes 23/23; files 193; Timeline cards 186",
          "initial production/main deployment 8cb503dd-f4a1-45af-8888-dc8a24527590; upload 109 + existing 84 = 193; deploy log 1558 B; 1f57d9ba37168cb64ec94ab257be52317ef02de619c2ea4f4e1ca136dd7c909e",
          "custom operations HTTP 200; 10764991 B; b8a41590f5f35f0c2dfb16f603586af2b3a96828e28833a1c823594b6fe50ca7; local cmp PASS",
          "custom timeline HTTP 200; 2924783 B; 4b9efe36700286a840fc09d36ae04e33419849a8193a1a0639e8ee6534357f09; local cmp PASS",
          "custom yol-haritasi HTTP 200; 2924531 B; 74a771a714bfb17d2d9ed7bbefbc8f50db2368fb93426c76483e175868ffc101; local cmp PASS",
          "immutable 8cb503dd probe curl exit 28; HTTP 000; no immutable-host PASS claimed",
          "final production/main deployment 400a93d4-edff-4718-bf51-fa3ae70bfb83; upload 109 + existing 84 = 193; deploy log 1558 B; ef59b4342afa5b4b45a1f25db5721a8a6f4307325805af81e28045e1e12e2108",
          "final custom operations HTTP 200; 10767850 B; dd2410ff826d433c06522ff65e131c2b079ac3ae39375b5c5f94872ee0437f38; local cmp PASS",
          "final custom timeline HTTP 200; 2927234 B; c7af45cbf0798432b0e5b9ee9317bffd03a2e24e0a1832e657ad68e3050a7752; local cmp PASS",
          "final custom yol-haritasi HTTP 200; 2926982 B; 123f91363fe8b7c04e466919dabc6e85452a7fea31eb4c9749ce1e0a8696a5f0; local cmp PASS",
          "final immutable 400a93d4 probe curl exit 28; HTTP 000; no immutable-host PASS claimed",
        ],
        exitCode: 0,
        outputMode: "selected",
        outputNote:
          "Bu oturum ilk içerik yayınının exact kimliğini, üç canlı artifact'in byte eşitliğini ve immutable-host erişim sınırını ayrı tutar; yayın kanıtını içeren final deployment ayrıca kaydedilecektir.",
      },
    ],
    terminalSessionsNote:
      "S347 yirminci production writer'ın dar kaynak entegrasyonudur. Yalnız audited binding tuple mismatch restore kolu guarded'dır; daha sonraki IPC restore S346'da, final commit S345'te, daha erken restore/take aliasları S348–S351'de ayrı kalır.",
    limitations: [
      "49 production writer aynı shared gate dışında kaldığı için whole-scheduler exclusion ve provider authority açık kalır.",
      "İki board-qemu source callsite wiring kanıtıdır; RPi5-only S347 wrapper için supported-profile invocation/observation kanıtı yoktur.",
      "Binding-audit error carrier restore writer entegrasyonu sıradaki ayrı S348 kapısıdır.",
      "Boot-memory, coordinator-preflight restore ve carrier-take aliasları S349–S351 için açık bırakılmıştır.",
      "Default-parallel PTY determinism, transient-contention liveness/soak, Generic SMP ve fiziksel RPi kabulü açık kalır.",
    ],
  },
snippet sha256: 9db4a1a03162file sha256: 9726dbf00f84
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s347_current_runtime_oom_binding_mismatch_restore_writer_guard_integration -- --test-threads=1
proof: docs/M8.1-RPi5-G8l-S347-Current-Runtime-OOM-Binding-Mismatch-Restore-Writer-Guard-Integration-Proof.md
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9