ASELSANMicrokernel
S384 · SOURCE-BOUND GATE EVIDENCE

S384 · QEMU S147 post-lifecycle stale-signal production writer guard integration

tam production Rust öğesi + exact acquire→release odağı → S247 guard modülü → Operations-bound focused test Bu sayfa yalnız S384 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.

S384Production writer guardOperations id exactsource SHA exacttest target exact

operation: g8l-s384-qemu-s147-post-lifecycle-stale-signal-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 öğesiL11963–L12303kapı odağı L12198–L12213
kernel/src/main.rs::run_qemu_s147_notification_lifecycle
Tam kapsayıcı Rust öğesi gösterilir; vurgulu blok yalnız S384 exact production writer üyeliği sınırıdır. Komşu kod, guard kapsamı iddiası değildir.

/// S147 runtime acceptance: two strict EL0 tasks park on two independently
/// owned notification objects. The first admitted WAIT grant is revoked and
/// its deadline completes as Cancelled. The second object is removed through
/// the controller's ordinary task IPC lifecycle and completes as PeerClosed.
/// Both tasks wake exactly once with InvalidCapability, reject a stale retry,
/// and return their RuntimePmm address spaces to the inherited baseline.
#[cfg(feature = "board-qemu")]
unsafe fn run_qemu_s147_notification_lifecycle(
    baseline_free_frames: u64,
    baseline_active_allocations: usize,
) {
    use crate::elf::load_and_spawn_user_elf_from_boot_runtime_with_arg;
    use crate::elf_plan::{AddressRange, ElfLoadPolicy};
    use crate::ipc_notification::NotificationSignalOutcome;
    use crate::ui::capability::{CapabilityRights, NotificationAuthorityError};
    use crate::userspace_binaries::NOTIFICATION_REVOKED_WAITER_BINARY;

    let controller_task = crate::task::current_task_id().expect("S147 controller task");
    let before_deadlines = crate::ipc::ipc_call_deadline_snapshot();
    assert_eq!(before_deadlines.active, 0);

    let revoke_domain = crate::mm::with_boot_runtime_memory(|memory| {
        memory.register_domain(QEMU_NOTIFICATION_REVOKE_WAITER_RUNTIME_DOMAIN_ID)
    })
    .expect("S147 revoke-waiter RuntimeMemory authority")
    .expect("S147 revoke-waiter domain registration");
    let owner_close_domain = crate::mm::with_boot_runtime_memory(|memory| {
        memory.register_domain(QEMU_NOTIFICATION_OWNER_CLOSE_WAITER_RUNTIME_DOMAIN_ID)
    })
    .expect("S147 owner-close waiter RuntimeMemory authority")
    .expect("S147 owner-close waiter domain registration");
    let revoke_notification = crate::ui::capability::mint_notification(controller_task)
        .expect("S147 revoke notification root");
    let owner_close_notification = crate::ui::capability::mint_notification(controller_task)
        .expect("S147 owner-close notification root");
    let no_forbidden_ranges: [AddressRange; 0] = [];

    let revoke_guard = crate::arch::aarch64::IrqGuard::new();
    let revoke_waiter = load_and_spawn_user_elf_from_boot_runtime_with_arg(
        "notification-revoke-strict-el0-waiter-elf",
        NOTIFICATION_REVOKED_WAITER_BINARY,
        ElfLoadPolicy::new(
            AddressRange::new(0x0430_0000, 0x0431_0000),
            &no_forbidden_ranges,
            16,
        ),
        0x80ce_0000,
        4,
        0,
        8,
        revoke_domain,
        revoke_notification.id,
    )
    .expect("S147 strict grant-revoke waiter spawn");
    let revoke_grant = crate::ui::capability::grant_task_notification_to_task(
        revoke_notification,
        controller_task,
        revoke_waiter.task_id,
        CapabilityRights::NOTIFICATION_WAIT,
    )
    .expect("S147 exact WAIT grant for revoke scenario");
    drop(revoke_guard);
    kprintln!(
        "[K2-S147] grant-revoke waiter strict spawn PASS id={} pages={} domain={} notification={} INITIAL_X0=YES W^X=YES",
        revoke_waiter.task_id,
        revoke_waiter.page_count,
        revoke_domain.id(),
        revoke_notification.id,
    );

    let mut first_parked = false;
    for _ in 0..4096 {
        let deadline = crate::ipc::ipc_call_deadline_snapshot();
        let object_matches = crate::ui::capability::NOTIFICATION_REGISTRY
            .lock()
            .iter()
            .find(|object| object.id() == revoke_notification.id)
            .and_then(|object| object.waiter_snapshot())
            == Some(
                crate::ipc_notification::NotificationWaiter::try_new(
                    revoke_waiter.task_id,
                    revoke_grant.generation,
                    0x3,
                )
                .expect("S147 exact first waiter identity"),
            );
        let blocked = {
            #[cfg(feature = "board-rpi5")]
            let s261_scheduler_read_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s260_qemu_acceptance_poll_read_access_guard_expansion::acquire_s261_production_scheduler_read_access()
                .unwrap_or_else(|error| panic!("S261 S147 first-waiter poll scheduler read guard failed closed: {:?}", error));
            let blocked = (&*core::ptr::addr_of!(crate::task::scheduler::SCHEDULER))
                .notification_blocked_task_count_on(revoke_waiter.task_id, revoke_notification.id);
            #[cfg(feature = "board-rpi5")]
            drop(s261_scheduler_read_access);
            blocked
        };
        if deadline.active == 1
            && deadline.registered == before_deadlines.registered + 1
            && object_matches
            && blocked == 1
        {
            first_parked = true;
            break;
        }
        crate::task::yield_now();
    }
    assert!(
        first_parked,
        "S147 grant-revoke waiter did not park exactly"
    );

    let owner_close_guard = crate::arch::aarch64::IrqGuard::new();
    let owner_close_waiter = load_and_spawn_user_elf_from_boot_runtime_with_arg(
        "notification-owner-close-strict-el0-waiter-elf",
        NOTIFICATION_REVOKED_WAITER_BINARY,
        ElfLoadPolicy::new(
            AddressRange::new(0x0430_0000, 0x0431_0000),
            &no_forbidden_ranges,
            16,
        ),
        0x80cf_0000,
        4,
        0,
        8,
        owner_close_domain,
        owner_close_notification.id,
    )
    .expect("S147 strict owner-close waiter spawn");
    let owner_close_grant = crate::ui::capability::grant_task_notification_to_task(
        owner_close_notification,
        controller_task,
        owner_close_waiter.task_id,
        CapabilityRights::NOTIFICATION_WAIT,
    )
    .expect("S147 exact WAIT grant for owner-close scenario");
    let spawned = crate::mm::with_boot_runtime_memory(|memory| memory.audited_snapshot())
        .expect("S147 spawned RuntimeMemory authority")
        .expect("S147 spawned RuntimeMemory audit");
    assert_eq!(spawned.pmm.free_frames, baseline_free_frames - 10);
    assert_eq!(spawned.active_allocations, baseline_active_allocations + 10);
    drop(owner_close_guard);
    kprintln!(
        "[K2-S147] owner-close waiter strict spawn PASS id={} pages={} domain={} notification={} INITIAL_X0=YES W^X=YES",
        owner_close_waiter.task_id,
        owner_close_waiter.page_count,
        owner_close_domain.id(),
        owner_close_notification.id,
    );

    let mut both_parked = false;
    for _ in 0..4096 {
        let deadline = crate::ipc::ipc_call_deadline_snapshot();
        let second_matches = crate::ui::capability::NOTIFICATION_REGISTRY
            .lock()
            .iter()
            .find(|object| object.id() == owner_close_notification.id)
            .and_then(|object| object.waiter_snapshot())
            == Some(
                crate::ipc_notification::NotificationWaiter::try_new(
                    owner_close_waiter.task_id,
                    owner_close_grant.generation,
                    0x3,
                )
                .expect("S147 exact second waiter identity"),
            );
        let blocked = {
            #[cfg(feature = "board-rpi5")]
            let s261_scheduler_read_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s260_qemu_acceptance_poll_read_access_guard_expansion::acquire_s261_production_scheduler_read_access()
                .unwrap_or_else(|error| panic!("S261 S147 second-waiter poll scheduler read guard failed closed: {:?}", error));
            let blocked = (&*core::ptr::addr_of!(crate::task::scheduler::SCHEDULER))
                .notification_blocked_task_count_on(
                    owner_close_waiter.task_id,
                    owner_close_notification.id,
                );
            #[cfg(feature = "board-rpi5")]
            drop(s261_scheduler_read_access);
            blocked
        };
        if deadline.active == 2
            && deadline.registered == before_deadlines.registered + 2
            && second_matches
            && blocked == 1
        {
            both_parked = true;
            break;
        }
        crate::task::yield_now();
    }
    assert!(both_parked, "S147 two notification waits were not admitted");

    assert_eq!(
        crate::ui::capability::revoke_notification_grant(revoke_grant, revoke_waiter.task_id,),
        Ok(true)
    );
    assert_eq!(
        crate::ui::capability::revoke_notification_grant(revoke_grant, revoke_waiter.task_id,),
        Err(NotificationAuthorityError::StaleAuthority)
    );
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s385_irq_guard = crate::arch::aarch64::IrqGuard::new();
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s385_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s385_qemu_s147_post_revoke_coalesced_signal_writer_guard_integration::acquire_s385_production_scheduler_writer_access()
        .unwrap_or_else(|error| {
            panic!(
                "S385 QEMU S147 post-revoke coalesced-signal scheduler writer guard failed closed: {:?}",
                error
            )
        });
    let s385_coalesced_signal_result =
        (&mut *core::ptr::addr_of_mut!(crate::task::scheduler::SCHEDULER)).notification_signal(
            revoke_notification.id,
            revoke_notification.generation,
            0x8, // exact nonmatching signal bits; keeps the historical alias shape visible
        );
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s385_writer_access);
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s385_irq_guard);
    assert_eq!(
        s385_coalesced_signal_result,
        Ok(NotificationSignalOutcome::Coalesced { pending: 0x8 })
    );

    let lifecycle = crate::ui::capability::teardown_task_ipc_lifecycle(controller_task)
        .expect("S147 notification owner lifecycle teardown");
    assert_eq!(lifecycle.owned_endpoints, 0);
    assert_eq!(lifecycle.cancelled_responder_calls, 0);
    assert_eq!(lifecycle.drained_calls, 0);
    assert_eq!(lifecycle.owned_notifications, 2);
    assert_eq!(lifecycle.revoked_notification_grants, 1);
    assert_eq!(lifecycle.cancelled_notification_waiters, 1);
    assert_eq!(lifecycle.woken_notification_waiters, 1);
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s384_irq_guard = crate::arch::aarch64::IrqGuard::new();
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s384_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s384_qemu_s147_post_lifecycle_stale_signal_writer_guard_integration::acquire_s384_production_scheduler_writer_access()
        .unwrap_or_else(|error| {
            panic!(
                "S384 QEMU S147 post-lifecycle stale-signal scheduler writer guard failed closed: {:?}",
                error
            )
        });
    let s384_stale_signal_result =
        (&mut *core::ptr::addr_of_mut!(crate::task::scheduler::SCHEDULER)).notification_signal(
            owner_close_notification.id,
            owner_close_notification.generation,
            0x2,
        );
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s384_writer_access);
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s384_irq_guard);
    assert_eq!(
        s384_stale_signal_result,
        Err(crate::ipc::IpcError::InvalidCapability)
    );
    assert_eq!(
        crate::ui::capability::destroy_notification_object(
            owner_close_notification,
            controller_task,
        ),
        Err(NotificationAuthorityError::StaleAuthority)
    );

    let mut peers_reclaimed = false;
    for _ in 0..4096 {
        let revoke_quota = crate::mm::with_boot_runtime_memory(|memory| {
            memory.audited_domain_quota(revoke_domain)
        })
        .expect("S147 revoke-domain quota authority")
        .expect("S147 revoke-domain quota audit");
        let owner_close_quota = crate::mm::with_boot_runtime_memory(|memory| {
            memory.audited_domain_quota(owner_close_domain)
        })
        .expect("S147 owner-close quota authority")
        .expect("S147 owner-close quota audit");
        let deadline = crate::ipc::ipc_call_deadline_snapshot();
        if revoke_quota.allocated_frames == 0
            && owner_close_quota.allocated_frames == 0
            && deadline.active == 0
            && deadline.registered == before_deadlines.registered + 2
            && deadline.cancelled == before_deadlines.cancelled + 1
            && deadline.peer_closed == before_deadlines.peer_closed + 1
        {
            peers_reclaimed = true;
            break;
        }
        crate::task::yield_now();
    }
    assert!(
        peers_reclaimed,
        "S147 strict waiters did not reclaim exactly"
    );

    let deadline = crate::ipc::ipc_call_deadline_snapshot();
    assert_eq!(deadline.active, 0);
    assert_eq!(deadline.registered - before_deadlines.registered, 2);
    assert_eq!(deadline.cancelled - before_deadlines.cancelled, 1);
    assert_eq!(deadline.peer_closed - before_deadlines.peer_closed, 1);
    assert_eq!(deadline.timed_out, before_deadlines.timed_out);
    assert_eq!(deadline.delivered, before_deadlines.delivered);
    assert_eq!(deadline.replied, before_deadlines.replied);
    assert!(!crate::ui::capability::NOTIFICATION_REGISTRY
        .lock()
        .iter()
        .any(|object| {
            object.id() == revoke_notification.id || object.id() == owner_close_notification.id
        }));
    assert!(crate::ui::capability::get_live_capability(revoke_notification.id).is_none());
    assert!(crate::ui::capability::get_live_capability(owner_close_notification.id).is_none());

    let final_snapshot = crate::mm::with_boot_runtime_memory(|memory| memory.audited_snapshot())
        .expect("S147 final RuntimeMemory authority")
        .expect("S147 final RuntimeMemory audit");
    assert_eq!(final_snapshot.pmm.free_frames, baseline_free_frames);
    assert_eq!(
        final_snapshot.active_allocations,
        baseline_active_allocations
    );

    kprintln!(
        "[K2-S147] revoke_notification={} owner_close_notification={} revoke_waiter={} owner_close_waiter={} revoke_domain={} owner_close_domain={} ABI=UNCHANGED_V1_3 GRANT_REVOKE=EXACT OWNER_LIFECYCLE=EXACT REGISTERED=2 CANCELLED=1 PEER_CLOSED=1 TIMED_OUT=0 DELIVERED=0 REPLIED=0 REVOKED_WAKE=INVALID_CAPABILITY OWNER_CLOSE_WAKE=INVALID_CAPABILITY STALE_WAIT=REJECTED STALE_SIGNAL=REJECTED NONMATCHING_AFTER_REVOKE=COALESCED EXACT_ONCE=YES BOTH_STRICT=YES RECLAIM=10 OWNED_NOTIFICATION_CLEANUP=2 DERIVED_GRANT_CLEANUP=1 free={}->{}->{} active={}->{}->{} KERNEL_FAULTS=0 EXECUTOR=PASS",
        revoke_notification.id,
        owner_close_notification.id,
        revoke_waiter.task_id,
        owner_close_waiter.task_id,
        revoke_domain.id(),
        owner_close_domain.id(),
        baseline_free_frames,
        spawned.pmm.free_frames,
        final_snapshot.pmm.free_frames,
        baseline_active_allocations,
        spawned.active_allocations,
        final_snapshot.active_allocations,
    );
    run_qemu_s148_notification_race_arbitration(
        final_snapshot.pmm.free_frames,
        final_snapshot.active_allocations,
    );
}
snippet sha256: 87149c0dd235file sha256: cc118c00d93cfocus sha256: e53d720f1a31
02 · Ortak exclusion üyeliği

S247 production writer guard

tam Rust öğesiL211–L223
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s384_qemu_s147_post_lifecycle_stale_signal_writer_guard_integration.rs::acquire_s384_production_scheduler_writer_access

#[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
pub fn acquire_s384_production_scheduler_writer_access(
) -> Result<G8lS384ProductionSchedulerWriterAccess, 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(G8lS384ProductionSchedulerWriterAccess { _access: access })
}
snippet sha256: 581c48bb3ef0file sha256: 55a76a9c085e
03 · Doğrulayan test kodu

Operations komutuna bağlı focused test

tam Rust öğesiL528–L540
simulation/tests/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s384_qemu_s147_post_lifecycle_stale_signal_writer_guard_integration.rs::boundary_has_exactly_one_s384_acquire_and_release_pair

#[test]
fn boundary_has_exactly_one_s384_acquire_and_release_pair() {
    let boundary = stale_signal_boundary();
    assert_eq!(
        boundary
            .matches("acquire_s384_production_scheduler_writer_access")
            .count(),
        1
    );
    assert_eq!(boundary.matches("drop(s384_writer_access)").count(), 1);
    assert_eq!(boundary.matches("drop(s384_irq_guard)").count(), 1);
}
snippet sha256: 85b2a48ddd22file sha256: ff2b80944779
04 · Kapı kimlik kaydı

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

tam Operations kaydıL8042–L8198
website/src/lib/operations.ts::g8l-s384-qemu-s147-post-lifecycle-stale-signal-writer-guard-integration-partial
  {
    id: "g8l-s384-qemu-s147-post-lifecycle-stale-signal-writer-guard-integration-partial",
    date: "2026-08-29",
    sequence: 384,
    status: "passed",
    umbrella_status: "partial",
    title:
      "S384 · QEMU S147 post-lifecycle stale-signal production writer guard integration",
    summary:
      "S384, run_qemu_s147_notification_lifecycle içindeki source-order sonraki mutable scheduler sınırını tek başına kapatır: controller lifecycle teardown ve exact lifecycle summary tamamlandıktan sonra retired owner_close_notification id/generation ile yapılan notification_signal(..., 0x2) stale probe'u. Nonzero controller identity, controller-owned iki notification root'u, iki strict EL0 WAIT grant'i, iki admitted waiter, iki deadline record'u, önceki revoke/nonmatching Coalesced signal transaction'ı, controller IPC lifecycle teardown'u ve exact cleanup summary writer'dan önce tamamlanır. Dedicated IRQ guard ardından gerçek per-CPU kimliğiyle CPU0-only S384 exclusive writer S383 ve 44 production reader'ın kullandığı aynı statik S247 state word üzerinde alınır. Exact tek mutable SCHEDULER aliası yalnız retired owner-close root id/generation ve immutable 0x2 signal helper çağrısını kapsar. Owned result önce writer, sonra IRQ release sınırını geçer ve ancak bundan sonra exact Err(IpcError::InvalidCapability) olarak doğrulanır; stale destroy retry ile final object/capability accounting downstream'da kalır. Tarihsel S314 model-level authority audit'i production authority olarak yeniden kullanılmaz; S315 post-revoke Coalesced audit'i S385 için ayrıdır. Guarded writer 57/69, açık writer 12, provider authority 0 ve whole-scheduler exclusion false'dur. S147 fixture board-qemu, production wrapper RPi5-only olduğundan supported-profile direct caller/runtime observation=0 açıkça korunur.",
    evidence: [
      "İlk canonical focused komut ayrı S384 module/source registration, CPU1 coverage service ve production post-lifecycle stale-signal boundary yokken compile RED verdi; S384 tarihsel S314 kartına veya S383'e topluca eklenmedi.",
      "İlk RED exit 101 verdi; /tmp/aselsanos-s384-initial-red.log 1366 B / 29e836b09c6815d6408fae1d8484eb7164ab36efcc0f53176ff403a0e8469c1d SHA-256'dır.",
      "İlk production focused koşusu 45/45 PASS verdi; /tmp/aselsanos-s384-focused-first.log 3699 B / 4b983eb4515ab6e17758bcad62a0ebd50bb77aaf61da2a8ec5564c1b3704cf08 SHA-256'dır.",
      "S384 modülü S383 typed preflight outcome'unu yeniden doğrular; inherited 44 reader + 56 guarded writer + 13 open writer snapshot'ı saparsa InventoryDrift ile fail-closed kapanır.",
      "S384 başarı outcome'u FiftySeventhWriterGuardedAwaitingRemaining'dir ve exact 44 guarded reader + 57/69 guarded writer + 12 open writer envanterini sabitler.",
      "Production wrapper exact target_arch=aarch64, target_os=none, feature=board-rpi5 cfg kesişimindedir; host executor production runtime observation diye sunulmaz.",
      "acquire_s384_production_scheduler_writer_access gerçek try_current_cpu_id sonucunu kullanır; caller-supplied production CPU parametresi yoktur ve CPU0 dışı InvalidCpu verir.",
      "Writer lease S247_PRODUCTION_WHOLE_SCHEDULER_ACCESS_GATE üzerinde try_acquire_exclusive_for_valid_cpu ile alınır; yeni static veya ikinci exclusion domain yaratılmaz.",
      "Host executor callback'i exact bir kez çağırır; canlı reader veya writer callback'ten önce ExclusiveBusy üretir, invalid CPU fail-closed kapanır ve callback error RAII lease'i bırakır.",
      "S383 ve S384 token'ları aynı shared gate üzerinde monoton ve ayrıdır; iki kapı tek transaction, range dispatcher veya toplu membership değildir.",
      "Production source boundary içinde iki notification_signal aliası korunur; yalnız lifecycle summary'den sonraki owner-close stale aliası S384 membership'idir, önceki post-revoke Coalesced aliası S385 için açıktır.",
      "Controller identity, iki root, iki strict WAIT grant, iki exact waiter ve iki deadline record'u S384 IRQ/writer acquisition'dan önce source-order assertion'larıyla sabittir.",
      "Revoke transaction'ı ve exact Coalesced { pending: 0x2 } sonucu S384 writer'dan önce kapanır; S384 bunları geriye doğru membership kapsamına almaz.",
      "Controller lifecycle teardown ve exact endpoints/notifications/replies/deadlines/reclaimed summary değerleri S384 writer'dan önce doğrulanır.",
      "Dedicated IRQ guard writer acquire'dan önce kurulur; acquire_s384_production_scheduler_writer_access ve drop(s384_writer_access) exact birer kez, drop(s384_irq_guard) da exact bir kez görünür.",
      "Exact mutable alias owner_close_notification.id, owner_close_notification.generation ve immutable 0x2 argümanlarıyla notification_signal helper'ını bir kez çağırır.",
      "Owned s384_stale_signal_result writer ve IRQ release'ten sonra exact InvalidCapability olarak doğrulanır; sonucu reference veya mutable scheduler aliası release dışına taşımaz.",
      "Stale destroy retry, remaining notification-object accounting, live-capability absence ve final S147 telemetry S384 release/check sınırından sonradır.",
      "Notification helper live object/generation/authority graph'ini transaction altında yeniden doğrular; stale root capability olmadan waiter/deadline/CNode/wake commit'i yapmaz.",
      "Tarihsel S314 testi direct assert kaynak şeklini değil, exact owned-result çağrısı + release sonrası InvalidCapability assertion'ını doğrulayacak biçimde güçlendirildi; semantic expectation değiştirilmedi.",
      "Seçili regresyon S314, S315, S376, S382, S383, S384 ve üç notification runtime grubunda 9 grup / 236/236 PASS verdi; log 43309 B / 3bcfea6f85028580b46acb0b668f2ad9c6890169c6f239b3124d44c393002aa4'tür.",
      "S238–S384 dependency matrisi iki bağımsız seri koşuda 148 grup / 3577/3577 PASS verdi; süre-normalize 31858 B özetler 9091244ca44142ac5eb7749a7d953010c6421cbcf13a3f518efda75b2ec1d29b ile byte-exact eşittir.",
      "Exact yedi tarihsel frozen assertion dışındaki workspace 347 result group / 5452 PASS / 0 fail / 7 filtered verdi; filtresiz koşu yalnız frozen S96 source-identity reddinde 300 grup / 5197 PASS / 1 fail ile durdu ve global GREEN iddia edilmez.",
      "Dört fresh AArch64 profil 4/4 exit 0 verdi; qemu/rpi4/rpi5/rpi5+smp warning header sayıları 293/391/1466/1466'dır ve zero-warning iddiası yoktur.",
      "make verify-qemu 116354 B / 18703a9ae0244e3ab26afe55ea63289f98499d398114839b3ca9c0142ba97195 ile strict ELF W^X 31/31, S130–S154 + S271, RuntimePmm, EL0 return x4096, IPC 20/20 ve SEC5 PASS verdi; bu S384 runtime invocation değildir.",
      "cargo fmt --all -- --check exit 0 ve boş çıktı verdi; global format kabulü GREEN'dir.",
      "Focused 45 assertion yalnız sayaç smoke'u değildir: typed S383→S384 preflight, Idle ve exact request path'i, inventory drift, CPU0 success receipt, invalid CPU callback-before-reject, live reader→writer ve live writer→writer/read çatışması, callback error release, S383→S384 token monotonluğu, production cfg/static-gate şekli, kernel/simulation registrations, main.rs exact alias inventory, lifecycle sırası, helper revalidation, CPU1 service order ve no-provider/no-range-dispatch sınırlamalarını ayrı ayrı doğrular.",
      "İlk compile RED yalnız S384 test import'u eklendiğinde alındı; compiler eksik simulation export ve production module boundary'sini reddetti. Bu tarihçe sonradan oluşturulmuş bir fail değildir. Modül, main.rs registration, simulation path export, CPU1 service ve exact later alias wiring'i eklendikten sonra aynı focused target 45/45 oldu; initial RED ve first production GREEN artifact'leri ayrı tutulur.",
      "S314 regression ilk seçili koşuda 14/15 RED verdi çünkü tarihsel source assertion direct assert_eq!(mutable-call, Err) spelling'ini bekliyordu. Production S384 owned sonucu lease release dışına taşıdığı için test exact let s384_stale_signal_result = mutable-call; ardından release ve exact assert_eq!(owned-result, Err) sözleşmesini doğrulayacak şekilde güçlendirildi. S314 15/15 ve tüm selected 236/236 oldu; stale-authority davranışı değişmedi.",
      "Dependency artifact root /tmp/aselsanos-s384-dependency.cP2B3q'dir. İki 148-target seri koşu, S238'den S383'e kadar önceki exact kronolojik listeyi byte-for-byte aynı target sırasıyla korur ve yalnız S384 focused target'ını sona ekler. Ham timing alanları kabul kimliği yapılmaz; normalize edilen 31858-byte canonical summaries aynı 9091244ca44142ac5eb7749a7d953010c6421cbcf13a3f518efda75b2ec1d29b digest'iyle cmp PASS verir.",
      "Filtered workspace artifact root /tmp/aselsanos-s384-workspace.Vyx2ZY'dir. Exact yedi tarihsel assertion dışında raw log 538785 B / 8f92e2cee7e2a99ee37d9608a244d74d2e301122f16973f38d6f5a71fac0dc98 ve summary 26252 B / 1d72c0c3fc0f8cda0d62815021d928000cf0b1610c415d003efc7abc6bb752a3'tür; 347 result group içinde 5452 test PASS ve yeni failure 0'dır.",
      "Filtresiz workspace raw log 507107 B / bea8b691af03663d72f1c5ce4ef8ff90c13e1aca4d32ee38bf53cb45d2e3869b, summary 22726 B / 85230831f7b63e27672b9dde6fce7ea7200c26b5f11a746626c2cdf836057063'tür. Exit 101 yalnız frozen S96 exceptions.S identity karşılaştırmasındadır; 300 result group öncesinde 5197 PASS ve exact bir failure vardır. Bu red gizlenmez, yeniden sınıflandırılmaz ve global workspace GREEN sonucu üretilmez.",
      "Fresh board-qemu build logu 112143 B / d2eee7841845e9300f8e2ec229562f67d4ff4db78ab447c2d55282776017443a ve 293 warning header; ELF 16813408 B / 17b381579c9a6f2cc94705887db2b7da6e8cba26d6f0b82acadf61c5c70af40b'tır. Bu profil S147 fixture'ını compile eder fakat RPi5-only S384 wrapper'ını etkinleştirmez.",
      "Fresh board-rpi4 build logu 150994 B / 02498ee98007d1802441d3174ee5fd49ecb01a4347d3499de99c1e0852a7bd58 ve 391 warning header; ELF 11925464 B / edbc3cf3673e56355bbb52543a11060d22ec15b147d99b19893ffcd2198a8a65'tir. RPi4 neither board-qemu S147 fixture nor board-rpi5 production wrapper runtime intersection'ı üretir.",
      "Fresh board-rpi5 build logu 641884 B / 6ce756cfb0911fba950dcfa916f7e8eacb33a80a60052875871572a489bf2069 ve 1466 warning header; ELF 15224328 B / 9f1dedeee6cd84ad8e00949b0cd29b84b175096a61e8ef7cfae2c99db9aedfa6'tır. Bu profil production wrapper'ı compile eder fakat board-qemu-only run_qemu_s147_notification_lifecycle caller'ını içermediği için runtime invocation=0'dır.",
      "Fresh board-rpi5+smp build logu 642138 B / d2c07cca04f3cff7cbb6aac03b7cb443031e326bbe36598abad3960d13c6c019 ve 1466 warning header; ELF 15247520 B / 7609c41fe95cbc3648fbe6cdc927db640cd5ea93ebdfc5d0ee22d4a2f5519ab0'dır. Compile success Generic SMP arbitration, CPU1 writer authority, CPU2/CPU3 migration, hotplug veya cross-CPU liveness kanıtı değildir.",
      "Dört profil /tmp/aselsanos-s384-profiles.jLEyqv altında birbirinden bağımsız target dizinleriyle CARGO_INCREMENTAL=0 çalıştırıldı. Dört exit code 0'dır; build log byte/hash ile ELF byte/hash alanları birbirine karıştırılmaz, release artifact'i profil kanıtına alınmaz ve warning header'lar açıkça sayıldığı için zero-warning iddiası yapılmaz.",
      "QEMU common regression logu /tmp/aselsanos-s384-qemu.log altında 116354 B / 18703a9ae0244e3ab26afe55ea63289f98499d398114839b3ca9c0142ba97195'tir. Guest strict ELF W^X 31/31, S130–S154 ve S271, RuntimePmm baseline, EL0 return x4096, IPC reply 20/20 ve scheduler SEC5'i geçirir. S384 RPi5-only lease'in bu board-qemu guest içinde alındığı iddia edilmez.",
      "Production source order tam olarak controller/root/grant/wait/deadline admission → revoke + Coalesced result → teardown_task_ipc_lifecycle → yedi exact lifecycle field assertion → s384_irq_guard → s384_writer_access → s384_stale_signal_result → writer drop → IRQ drop → InvalidCapability assertion → destroy_notification_object stale retry → RuntimePmm/domain/deadline/accounting cleanup şeklindedir.",
      "S384 exact focus Code kartında yalnız acquire_s384_production_scheduler_writer_access ile drop(s384_writer_access) arasındaki membership yayımlanır; tam production excerpt ise complete run_qemu_s147_notification_lifecycle Rust öğesidir. Böylece kullanıcı hem test edilen kodun kendisini hem upstream/downstream context'i görür, fakat önceki S385 aliası yanlışlıkla S384 guarded focus olarak etiketlenmez.",
      "Status manifesti S384'ü S383'ten önce ayrı verification entry ve gate string'i olarak taşır. project_status_manifest 267/267 PASS ile 44 reader, 57/69 guarded writer, 12 open writer, 148/3577 dependency, 347/5452 workspace, dört profil, provider=0, exclusion=false, physical=0 ve target source registry S1–S384 / pre-S328 327/327 alanlarını exact doğrular.",
      "Code yayın hedefi S1–S384 384/384 unique source-bound gate, pre-S328 S1–S327 327/327, missing=none ve duplicate=0'dır; S1, S327, S328, S383 ve S384 ayrı kart sayılacaktır.",
      "İlk source-bound Code registry S1–S384 için 384/384 unique kapı, 1104 exact excerpt, pre-S328 S1–S327 327/327, missing=none ve duplicate=0 üretti. JSON 8477915 B / 7939fa1e7f781b7324f4a31c2f4e5eef31ffdbf3c835902c23e38256b758802f dosya SHA-256 ve 8ba2a2e762f956124c73998ba985b0d2644a3f3728d361bdda455de98881de3e registry SHA-256 taşır; S1, S327, S328, S383 ve S384 exact birer karttır.",
      "İlk website kabulü 688/688 test, lint, boş TypeScript çıktısı ve 24/24 static page PASS verdi; export 200 dosya, Timeline 223 gate-policy kartı ve S384 çekirdek policy 15838 karakter / 16307 UTF-8 byte'tır.",
      "İlk production/main deployment c66ce0d3 ile 115 uploaded + 84 existing = 199 asset yayımladı. Cache-busted custom-domain /code/, /operations/, /timeline/ ve /yol-haritasi/ HTTP 200 verdi ve dört içerik yerel out ile raw byte-exact eşleşti; /code/ cache-control no-transform'dur.",
      "İlk canlı /code/ sayımı 384 ayrı data-code-gate kartı verdi; S1=1, S327=1, S328=1, S383=1 ve S384=1'dir. Böylece kullanıcının pre-S328 isteği yalnız metin değil, canlı source-bound kart envanteri olarak doğrulandı.",
      "İlk yayın ölçülerinin karta işlendiği evidence-sync registry yine S1–S384 384/384 unique kapı, 1104 excerpt, pre-S328 327/327, missing=none ve duplicate=0 verdi. JSON 8479555 B / 4be0fc0c71194496d59f5cfe8da58cc8409b3e73711d84ee03425a8011edf21e dosya SHA-256 ve 1514b18ba0e1326fce3181578b6cdcd9c06b0e8cbc8e5ceee1044a5dfdac82d6 registry SHA-256'dır.",
      "Evidence-sync website kabulü 688/688 test, lint, boş TypeScript ve 24/24 static page PASS; export 200 dosya, Timeline 223 kart ve güncellenmiş S384 çekirdek policy 17338 karakter / 17851 UTF-8 byte'tır.",
      "Evidence-sync production/main deployment b30fff17 ile 115 uploaded + 84 existing = 199 asset yayımladı. Cache-busted dört custom-domain rota HTTP 200 ve yerel evidence-sync out ile raw byte-exact PASS verdi; canlı /code/ sayımı yine 384/384 ve pre-S328 327/327'dir.",
      "S245 request yalnız non-consuming preflight view ile incelenir; S244 whole-scheduler admission yayınlanmaz, provider authority oluşturulmaz ve whole-scheduler exclusion uydurulmaz.",
      "CPU1 service S383 coverage service'inden sonra ve tarihsel S242 consumer'dan önce source order'da bağlıdır; bu yalnız coverage/preflight observation'dır, writer/provider değildir.",
      "S384 sırasında fiziksel/device işlem yapılmadı: physical/device operations=0 ve RUNBOOK_EXECUTED_IN_S384=NO.",
      "Bağlayıcı olmayan S384 projeksiyonu R1 S384–S414, R2 S439–S489, R3 S568+, risk aralığı S544–S594 ve merkez yaklaşık S569'dur.",
    ],
    commands: [
      "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s384_qemu_s147_post_lifecycle_stale_signal_writer_guard_integration -- --test-threads=1",
      "run S314, S315, S376, S382, S383, S384 and three notification runtime groups serially",
      "run S238-S384 dependency list twice and normalize timing fields",
      "run filtered and unfiltered serial workspace audits",
      "run four fresh isolated dev AArch64 profile builds",
      "CARGO_INCREMENTAL=0 make verify-qemu",
      "cargo fmt --all -- --check",
      "npm run code:generate && npm test && npm run lint && npx tsc --noEmit && npm run build",
      "npm run deploy; cache-busted curl + cmp for /code/, /operations/, /timeline/ and /yol-haritasi/",
    ],
    terminalSessions: [
      {
        id: "g8l-s384-focused-source-contract",
        title: "S384 focused post-lifecycle stale-signal writer membership",
        commandLines: [
          "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s384_qemu_s147_post_lifecycle_stale_signal_writer_guard_integration -- --test-threads=1",
        ],
        outputLines: [
          "initial result: compile RED; S384 module/source/service and production post-lifecycle boundary missing",
          "first production result: ok; S384 focused 1 group / 45 passed / 0 failed",
          "shared S247 gate: 44 guarded readers + 57/69 guarded writers; 12 writers open",
          "controller/roots/grants/waiters/deadlines/revoke+lifecycle summary < IRQ < writer < stale signal < writer/IRQ release < InvalidCapability < stale destroy",
          "supported-profile direct caller/runtime observations=0; provider authority=0; whole exclusion=false",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s384-selected-notification-regression",
        title: "S384 selected lifecycle/notification regression",
        commandLines: [
          "run S314, S315, S376, S382, S383, S384 and three notification runtime groups serially",
        ],
        outputLines: [
          "historical S314 source-shape expectation updated to owned result + release-after exact InvalidCapability without weakening semantics",
          "final result: 9 groups / 236 passed / 0 failed",
          "S315 post-revoke Coalesced signal remains separate and open for S385",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s384-full-acceptance",
        title: "S384 four-profile, dependency, workspace and QEMU acceptance",
        commandLines: [
          "run four fresh isolated dev AArch64 profile builds",
          "run S238-S384 dependency list twice; run filtered and unfiltered serial workspace audits",
          "CARGO_INCREMENTAL=0 make verify-qemu; cargo fmt --all -- --check",
        ],
        outputLines: [
          "four profiles 4/4 exit 0; individual log and ELF byte/SHA-256 identities recorded",
          "dependency 148 groups / 3577/3577 twice; normalized 31858-byte summaries byte-exact",
          "filtered workspace 347 groups / 5452 PASS / 7 filtered; unfiltered frozen-S96 remains RED at 5197 PASS / 1 fail",
          "QEMU W^X 31/31 + S130-S154 + S271 + IPC 20/20 + SEC5 PASS; not an S384 runtime observation",
          "cargo fmt --all -- --check exit 0 with empty output",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s384-production-publication",
        title: "S384 Operations/Timeline/Code production publication",
        commandLines: [
          "npm run code:generate && npm test && npm run lint && npx tsc --noEmit && npm run build",
          "npm run deploy",
          "cache-busted curl + cmp for /code/, /operations/, /timeline/ and /yol-haritasi/",
        ],
        outputLines: [
          "initial source-bound registry S1-S384 384/384; exact excerpts 1104; pre-S328 S1-S327 327/327; missing none; duplicate 0",
          "registry JSON 8477915 B / 7939fa1e7f781b7324f4a31c2f4e5eef31ffdbf3c835902c23e38256b758802f; registry SHA-256 8ba2a2e762f956124c73998ba985b0d2644a3f3728d361bdda455de98881de3e",
          "website 688/688 PASS; lint PASS; TypeScript empty; 24/24 static pages; export 200 files; Timeline cards 223",
          "initial deployment c66ce0d3; 115 uploaded + 84 existing = 199 assets",
          "cache-busted /code/, /operations/, /timeline/ and /yol-haritasi/ HTTP 200 and raw byte-exact=true",
          "evidence-sync registry S1-S384 384/384; 1104 excerpts; pre-S328 327/327; JSON 8479555 B; registry 1514b18b...82d6",
          "evidence-sync website 688/688 PASS; deployment b30fff17; 115 uploaded + 84 existing; four routes HTTP 200 and raw byte-exact=true",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
    ],
    terminalSessionsNote:
      "TAM ÇIKTI: Her S384 oturumu ayrı command/output/exit kaydıdır. S384 bir toplu S335–S400 completion kartı değildir; post-lifecycle stale signal exact tek production writer membership'idir. Board-qemu common runtime PASS, RPi5-only S384 wrapper invocation kanıtı değildir.",
    limitations: [
      "S385 QEMU S147 post-revoke Coalesced notification signal production writer membership'i ayrı ve açıktır.",
      "12 production writer açık kalır; S384 whole-scheduler coverage, provider authority veya end-to-end exclusion admission değildir.",
      "Board-qemu S147 fixture ile RPi5-only wrapper aynı supported profile'da kesişmez; supported-profile direct caller/runtime observation=0'dır.",
      "Default-parallel PTY determinism, transient-contention liveness/soak, Generic SMP cross-CPU arbitration, CPU2/CPU3/hotplug ve fiziksel RPi kabulü açıktır.",
      "Power/SD/Mac/UART/raw/archive/promotion işlemleri yapılmadı; RUNBOOK_EXECUTED_IN_S384=NO.",
      "S-serisi tahminleri taahhüt değildir; S384 bazlı planlama merkezi yaklaşık S569'dur.",
    ],
  },
snippet sha256: 8fd059f74b64file sha256: 9726dbf00f84
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s384_qemu_s147_post_lifecycle_stale_signal_writer_guard_integration -- --test-threads=1
proof: docs/M8.1-RPi5-G8l-S384-QEMU-S147-Post-Lifecycle-Stale-Signal-Writer-Guard-Integration-Proof.md
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9