ASELSANMicrokernel
S370 · SOURCE-BOUND GATE EVIDENCE

S370 · Task IPC lifecycle notification-grant exact-revoke production writer guard integration

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

S370Production writer guardOperations id exactsource SHA exacttest target exact

operation: g8l-s370-task-ipc-lifecycle-notification-grant-revoke-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 öğesiL3376–L3614kapı odağı L3551–L3578
kernel/src/ui/capability.rs::teardown_task_ipc_lifecycle
Tam kapsayıcı Rust öğesi gösterilir; vurgulu blok yalnız S370 exact production writer üyeliği sınırıdır. Komşu kod, guard kapsamı iddiası değildir.

/// Atomically close all IPC authority affected by a task exit.
///
/// The preflight verifies every reply registry/CNode/provenance edge and
/// reserves the complete ready-queue growth before the first model or registry
/// mutation. Therefore an OOM or malformed graph returns with zero lifecycle
/// objects removed. Once commit begins, every step is allocation-free.
pub(crate) fn teardown_task_ipc_lifecycle(
    owner: u64,
) -> Result<TaskIpcTeardown, TaskIpcTeardownError> {
    if owner == 0 {
        return Err(TaskIpcTeardownError::InvalidTask);
    }

    let _irq_guard = crate::arch::aarch64::IrqGuard::new();
    let _transaction = crate::task::scheduler::IPC_TRANSACTION_LOCK.lock();
    let wake_capacity = preflight_task_ipc_lifecycle(owner)?;
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s368_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s368_task_ipc_lifecycle_wake_capacity_writer_guard_integration::acquire_s368_production_scheduler_writer_access()
        .unwrap_or_else(|error| {
            panic!(
                "S368 task-IPC lifecycle wake-capacity scheduler writer guard failed closed: {:?}",
                error
            )
        });
    let capacity_reserved = unsafe {
        (&mut *core::ptr::addr_of_mut!(crate::task::scheduler::SCHEDULER))
            .try_reserve_ipc_wake_capacity(wake_capacity)
    };
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s368_writer_access);
    if !capacity_reserved {
        return Err(TaskIpcTeardownError::WakeCapacityUnavailable);
    }

    let mut cancelled_responder_calls = 0usize;
    loop {
        let cancellation = {
            let mut registry = ENDPOINT_REGISTRY.lock();
            registry
                .iter_mut()
                .filter(|endpoint| !endpoint.is_reply_cap && endpoint.owner != owner)
                .find_map(|endpoint| {
                    let outcome = endpoint.rendezvous.cancel_next_for_responder(owner)?;
                    match outcome {
                        crate::ipc_rendezvous::ResponderExitOutcome::Wake {
                            caller_task,
                            reply_token,
                        } => {
                            let retire_witness = endpoint
                                .rendezvous
                                .retire(caller_task, reply_token)
                                .expect("responder-exit cancellation must retire exactly once");
                            Some((endpoint.id, caller_task, retire_witness))
                        }
                        crate::ipc_rendezvous::ResponderExitOutcome::StoredBeforePark {
                            ..
                        } => {
                            panic!("IPC preflight missed an unparked responder-bound CALL")
                        }
                    }
                })
        };
        let Some((target_endpoint, _caller_task, retire_witness)) = cancellation else {
            break;
        };
        let reply_cap_id = retire_witness.reply_token();
        assert!(
            discard_retired_reply_endpoint_under_ipc_transaction(
                target_endpoint,
                retire_witness,
                Some(owner),
            ),
            "responder-exit cancellation lost its linked reply object"
        );
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        let s369_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s369_task_ipc_lifecycle_responder_linked_reply_wake_writer_guard_integration::acquire_s369_production_scheduler_writer_access()
            .unwrap_or_else(|error| {
                panic!(
                    "S369 task-IPC lifecycle responder linked-reply wake scheduler writer guard failed closed: {:?}",
                    error
                )
            });
        unsafe {
            (&mut *core::ptr::addr_of_mut!(crate::task::scheduler::SCHEDULER))
                .wake_tasks_on_revoked_endpoint(reply_cap_id);
        }
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        drop(s369_writer_access);
        cancelled_responder_calls += 1;
    }

    let mut owned_endpoints = 0usize;
    let mut drained_calls = 0usize;
    loop {
        let next = ENDPOINT_REGISTRY
            .lock()
            .iter()
            .find(|endpoint| endpoint.owner == owner && !endpoint.is_reply_cap)
            .map(|endpoint| endpoint.id);
        let Some(endpoint_id) = next else {
            break;
        };
        let teardown =
            teardown_endpoint_object_under_ipc_transaction(endpoint_id, owner, Some(owner))
                .expect("preflighted owned endpoint disappeared inside one IPC transaction");
        owned_endpoints += 1;
        drained_calls += teardown.drained;
    }

    let mut owned_notifications = 0usize;
    let mut revoked_notification_grants = 0usize;
    let mut cancelled_notification_waiters = 0usize;
    let mut woken_notification_waiters = 0usize;
    loop {
        let next = NOTIFICATION_REGISTRY
            .lock()
            .iter()
            .find(|object| object.owner() == owner)
            .map(|object| object.id());
        let Some(notification_id) = next else {
            break;
        };
        let preflight =
            preflight_notification_object_teardown_under_ipc_transaction(notification_id, owner)
                .expect("lifecycle-preflighted notification object changed before commit");
        let wake_waiter = preflight
            .wait
            .is_some_and(|graph| graph.waiter.task_id() != owner);
        let teardown = teardown_notification_object_under_ipc_transaction(
            notification_id,
            owner,
            Some(owner),
            preflight,
            wake_waiter,
        );
        owned_notifications += 1;
        revoked_notification_grants += teardown.revoked_grants;
        cancelled_notification_waiters += teardown.cancelled_waiters;
        woken_notification_waiters += teardown.woken_waiters;
    }

    // Remove derived notification grants held by the exiting task. If its
    // own blocked incarnation is the object waiter, retire that wait and its
    // deadline but do not requeue the task that is being destroyed.
    loop {
        let next = {
            let registry = NOTIFICATION_REGISTRY.lock();
            #[cfg(feature = "board-rpi5")]
            let s260_notification_grant_scheduler_read_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s259_task_lifecycle_notification_grant_read_access_guard_expansion::acquire_s260_production_scheduler_read_access()
                .unwrap_or_else(|error| panic!("S260 task-lifecycle notification-grant scan scheduler read guard failed closed: {:?}", error));
            let scheduler = unsafe { &*core::ptr::addr_of!(crate::task::scheduler::SCHEDULER) };
            let next = registry.iter().find_map(|object| {
                scheduler
                    .capability_for_task(owner, object.id())
                    .filter(|capability| {
                        capability.kind == CapabilityKind::Notification
                            && capability.parent == Some(object.id())
                    })
                    .map(|capability| (object.id(), capability))
            });
            #[cfg(feature = "board-rpi5")]
            drop(s260_notification_grant_scheduler_read_access);
            next
        };
        let Some((notification_id, grant)) = next else {
            break;
        };

        let mut deadlines = crate::ipc::IPC_CALL_DEADLINES.lock();
        let mut registry = NOTIFICATION_REGISTRY.lock();
        let object_index = registry
            .iter()
            .position(|object| object.id() == notification_id)
            .expect("lifecycle-preflighted notification grant lost its object");
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        let s370_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s370_task_ipc_lifecycle_notification_grant_revoke_writer_guard_integration::acquire_s370_production_scheduler_writer_access()
            .unwrap_or_else(|error| {
                panic!(
                    "S370 task-IPC lifecycle notification-grant exact-revoke scheduler writer guard failed closed: {:?}",
                    error
                )
            });
        let scheduler = unsafe { &mut *core::ptr::addr_of_mut!(crate::task::scheduler::SCHEDULER) };
        let wait =
            preflight_notification_wait_graph(&registry[object_index], &deadlines, scheduler)
                .expect("lifecycle-preflighted notification wait graph changed");
        let matching_wait = wait.filter(|graph| graph.waiter.task_id() == owner);
        if let Some(wait) = matching_wait {
            registry[object_index]
                .cancel_waiter_exact(wait.waiter)
                .expect("exiting notification waiter changed before lifecycle commit");
            deadlines
                .cancel_exact(wait.deadline)
                .expect("exiting notification waiter lost exact deadline retirement");
            cancelled_notification_waiters += 1;
        }
        assert!(
            scheduler.revoke_cap_for_task_exact(&grant),
            "lifecycle-preflighted notification grant exact revoke failed"
        );
        #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
        drop(s370_writer_access);
        revoked_notification_grants += 1;
    }

    let registry = ENDPOINT_REGISTRY.lock();
    assert!(!registry
        .iter()
        .any(|endpoint| endpoint.owner == owner && !endpoint.is_reply_cap));
    assert!(!registry
        .iter()
        .filter(|endpoint| !endpoint.is_reply_cap)
        .any(|endpoint| endpoint.rendezvous.responder_exit_preflight(owner).active != 0));
    drop(registry);
    let notifications = NOTIFICATION_REGISTRY.lock();
    assert!(!notifications.iter().any(|object| object.owner() == owner));
    {
        #[cfg(feature = "board-rpi5")]
        let _s252_scheduler_read_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s251_notification_teardown_read_access_guard_expansion::acquire_s252_production_scheduler_read_access()
            .unwrap_or_else(|error| panic!("S252 task-lifecycle notification absence audit scheduler read guard failed closed: {:?}", error));
        let scheduler = unsafe { &*core::ptr::addr_of!(crate::task::scheduler::SCHEDULER) };
        assert!(!notifications.iter().any(|object| {
            scheduler
                .capability_for_task(owner, object.id())
                .is_some_and(|capability| capability.kind == CapabilityKind::Notification)
        }));
    }

    Ok(TaskIpcTeardown {
        owned_endpoints,
        cancelled_responder_calls,
        drained_calls,
        owned_notifications,
        revoked_notification_grants,
        cancelled_notification_waiters,
        woken_notification_waiters,
    })
}
snippet sha256: 596ebbe0499bfile sha256: 304e1227daf9focus sha256: f547a1a4284b
02 · Ortak exclusion üyeliği

S247 production writer guard

tam Rust öğesiL205–L217
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s370_task_ipc_lifecycle_notification_grant_revoke_writer_guard_integration.rs::acquire_s370_production_scheduler_writer_access

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

Operations komutuna bağlı focused test

tam Rust öğesiL432–L443
simulation/tests/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s370_task_ipc_lifecycle_notification_grant_revoke_writer_guard_integration.rs::lifecycle_grant_boundary_has_exactly_one_s370_acquire_and_release

#[test]
fn lifecycle_grant_boundary_has_exactly_one_s370_acquire_and_release() {
    let boundary = derived_notification_grant_boundary();
    assert_eq!(
        boundary
            .matches("acquire_s370_production_scheduler_writer_access")
            .count(),
        1
    );
    assert_eq!(boundary.matches("drop(s370_writer_access)").count(), 1);
}
snippet sha256: c5afb5ba53a7file sha256: 9238c8e649f3
04 · Kapı kimlik kaydı

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

tam Operations kaydıL10435–L10593
website/src/lib/operations.ts::g8l-s370-task-ipc-lifecycle-notification-grant-revoke-writer-guard-integration-partial
  {
    id: "g8l-s370-task-ipc-lifecycle-notification-grant-revoke-writer-guard-integration-partial",
    date: "2026-08-28",
    sequence: 370,
    status: "passed",
    umbrella_status: "partial",
    title:
      "S370 · Task IPC lifecycle notification-grant exact-revoke production writer guard integration",
    summary:
      "S370, teardown_task_ipc_lifecycle içindeki derived notification grant için exact scheduler.revoke_cap_for_task_exact(&grant) mutation'ını S369 ve 44 production reader'ın kullandığı aynı statik S247 state word'e bağlar. Read-guarded exact grant seçimi, deadline/notification registry lock'ları ve exact object index writer'dan önce kapanır. Gerçek per-CPU kimliğinden yalnız CPU0 için S370 exclusive writer alınır; exact tek mutable SCHEDULER aliası wait-graph revalidation, matching exiting waiter filter, exact waiter cancellation, exact deadline retirement ve exact CNode grant revoke'un tamamını kapsar. Writer revoked_notification_grants counter artışından ve loop continuation'dan önce explicit bırakılır. Guarded writer 43/69, açık writer 26, provider authority 0 ve whole-scheduler exclusion false'dur. On bir main.rs ve dört scheduler.rs olmak üzere 15 direct production caller path vardır; supported-profile runtime observation=0'dır. Kaynak sırasındaki sonraki ayrı kapı S371 notification-object teardown commit writer'ıdır.",
    evidence: [
      "Focused S370 sözleşmesi yazılıp production membership, module registration ve CPU1 coverage service henüz bağlı değilken alınan ilk TDD sonucu 37/50 PASS ve 13 RED'dir. RED yüzeyi exact acquire/release, source order, guarded slice, module wiring, downstream separation ve service ordering assertion'larından oluştu.",
      "Exact S370 acquire/drop, kernel/simulation module registration ve S369 service sonrasına CPU1 coverage service eklendikten sonra aynı focused hedef 50/50 PASS; 1 grup / 50 passed / 0 failed verdi. cargo fmt sonrasındaki bağımsız son koşu da 50/50 PASS kaldı; ürün veya coverage assertion'ı gevşetilmedi.",
      "Final envanter module constants, pending-request outcome ve production source katmanlarında birlikte 44 guarded reader + 43/69 guarded writer + 26 open writer'dır.",
      "Exact kaynak sırası owner!=0 → IrqGuard → IPC_TRANSACTION_LOCK → complete preflight_task_ipc_lifecycle(owner) → prior endpoint/notification lifecycle işleri → S260 read-guarded exact (notification_id, grant) seçimi → reader drop → deadline lock → notification registry lock → exact object index → S370 CPU0-only shared-gate writer → tek mutable SCHEDULER aliası → wait-graph revalidation → owner-matching waiter filter → optional exact waiter cancel → optional exact deadline retirement → revoke_cap_for_task_exact(&grant) → writer drop → revoked-grant counter/loop'tur.",
      "Owner==0 InvalidTask yolu writer alınmadan döner. Outer IRQ ve global IPC transaction guard'ları complete lifecycle preflight, derived grant selection, wait/deadline retirement, exact grant revoke ve result publication boyunca canlıdır.",
      "preflight_task_ipc_lifecycle ordinary endpoint/reply registry identity ve generation değerlerini, owner CNode authority'lerini, holder özetlerini, rendezvous parked/unparked/terminal durumlarını, blocked task graph'ını ve notification waiter/deadline bağlarını destructive mutation başlamadan doğrular.",
      "Owned endpoint, linked-reply ve owned-notification object teardown işleri S370 derived-grant loop'undan önce kendi ayrı kapılarında tamamlanır. S370 önceki mutation'ları geriye doğru kendi exclusive membership'ine katmaz.",
      "Derived grant scan NOTIFICATION_REGISTRY lock'u ve S260 production immutable scheduler reader lease'i altında exact Notification kind + parent object identity'sini seçer. Selected Capability owned local `grant` değerine kopyalanır ve S260 reader S370 writer edinilmeden önce explicit bırakılır; read→write upgrade yapılmaz.",
      "Selected grant loop'a aynı exact Capability değeriyle taşınır. Guarded revoke bu değeri yeniden tahmin etmez, farklı task/object/grant kimliği kabul etmez ve revoke_cap_for_task_exact false dönerse lifecycle drift'ini fail-closed assert ile durdurur.",
      "IPC_CALL_DEADLINES ve NOTIFICATION_REGISTRY lock'ları S370 acquisition'dan önce alınır. Exact object index writer'dan önce bulunur; kayıp object lifecycle-preflight drift'i olarak fail-closed kapanır.",
      "Production wrapper exact target_arch=aarch64, target_os=none ve feature=board-rpi5 cfg kesişimindedir; try_current_cpu_id gerçek CPU kimliğini türetir ve yalnız CPU0 kabul edilir.",
      "Wrapper exact S247_PRODUCTION_WHOLE_SCHEDULER_ACCESS_GATE üzerinde try_acquire_exclusive_for_valid_cpu kullanır. Caller-supplied CPU kimliği, ayrı model state word veya provider authority production'a taşınmaz.",
      "teardown_task_ipc_lifecycle içinde exact bir acquire_s370 occurrence'ı, exact bir derived-grant mutable scheduler aliası ve exact bir drop(s370_writer_access) vardır.",
      "S370 guarded diliminde preflight_notification_wait_graph, matching owner filter, exact waiter/deadline retirement ve scheduler.revoke_cap_for_task_exact(&grant) bulunur. Upstream S260 scan, counter increment, loop continuation ve S371 object teardown helper commit'i dilim dışında kalır.",
      "preflight_notification_wait_graph notification object, deadline registry ve scheduler blocked-task durumunu tek guarded snapshot içinde yeniden doğrular. Stale waiter, wait epoch, task generation veya deadline identity drift'i destructive revoke'dan önce kapanır.",
      "matching_wait yalnız graph.waiter.task_id() == owner olduğunda oluşturulur. Foreign waiter S370 tarafından cancel edilmez veya uyandırılmaz; bu kapı exiting task'ın kendi blocked incarnation'ını retire eder.",
      "Matching waiter varsa cancel_waiter_exact(wait.waiter) ve deadlines.cancel_exact(wait.deadline) exact kimliklerle, aynı nested lock ve S370 writer üyeliği altında yapılır. cancelled_notification_waiters counter'ı lifecycle transaction içinde ilerler fakat scheduler exclusive kapsam iddiasını genişletmez.",
      "Exact waiter cancellation CNode grant revoke'dan önce gelir; exact deadline retirement waiter cancellation'dan sonra ve CNode revoke'dan önce gelir. Focused source assertions üç mutation'ın kaynak kronolojisini ayrı ayrı sabitler.",
      "revoke_cap_for_task_exact(&grant) exact task id, CapId, generation, kind, rights ve parent tuple'ını scheduler CNode state'inde doğrular. Reader lease tek başına bu mutable commit'i açmaz; exclusive token zorunludur.",
      "Exact tek mutable SCHEDULER aliası yalnız derived notification grant commit kesitini kapsar; alias veya S370 lease'i revoked_notification_grants counter'ına, next iteration'a ya da post-loop absence audit'ine sızmaz.",
      "S370 release revoked_notification_grants += 1 ve loop continuation'dan önce exact kaynak sırasındadır; long-lived whole-lifecycle exclusive membership oluşmaz.",
      "S369 responder linked-reply wake writer'ı S370 acquire sembolü içermez. S369 ve S370 farklı exclusive token'larla ve kaynak kronolojisinde ayrı membership'lerdir; S369 release tamamlanmadan S370 yolu başlayamaz.",
      "Notification-object teardown helper preflight/object removal/holder purge/provenance revoke/optional waiter wake transaction'ını kendi ayrı sınırında tutar ve acquire_s370 sembolü içermez. Kaynak envanterindeki sıradaki açık writer S371'dir.",
      "Tarihsel S293 task-lifecycle notification-grant revoke audit'i model-only authority/order kanıtı olarak ayrı kalır. S370 gerçek board-rpi5 static wrapper ve exact production acquire/drop sınırını ekler.",
      "Host-testable execute_s370_guarded_task_ipc_lifecycle_notification_grant_revoke_commit yalnız CPU0 callback'ini nonzero token ile exact-once çalıştırır. Non-CPU0, active reader veya active writer callback başlamadan fail-closed olur.",
      "Host callback success ve error yolları membership'i exact-once bırakır; success receipt owned output taşır, callback error sonrasında gate yeniden alınabilir ve active token kalmaz.",
      "Live reader exclusive commit'i callback'ten önce engeller; live writer ikinci commit'i ve yeni reader'ı aynı state word üzerinde engeller. Release sonrasında reader yeniden alınabilir.",
      "S369→S370 token monotonluğu ve iki membership arasında active exclusive token bulunmaması doğrulandı. Bu monotonicity ordering kanıtıdır; runtime fairness, starvation freedom veya soak garantisi değildir.",
      "S370 preflight S369'un 44 reader / 42 guarded writer / 27 open snapshot'ını exact doğrular; yalnız doğru zincir 43/69 guarded ve 26 open sonucu üretir. Drift ayrı InventoryDrift error'ıdır.",
      "Pending S245 request yalnız non-consuming view ile incelenir. Request id korunur, take edilmez, S244 admission yayınlanmaz ve provider authority oluşturulmaz.",
      "CPU1 coverage service S369 service'inden sonra ve tarihsel S242 consumer'dan önce bağlıdır. Service S247 writer edinmez, mutation yapmaz ve S370 production notification revoke runtime'ını çalıştırmaz.",
      "Direct production caller envanteri teardown_task_ipc_lifecycle için 15 path'tir: kernel/src/main.rs içinde 11 ve kernel/src/task/scheduler.rs içinde 4. Bu statik forwarding envanteridir; S370-specific supported-profile invocation/observation kanıtı değildir.",
      "S370 wiring sonrası S369 focused testindeki obsolete global S370-open assertion'ı, S369 guarded linked-reply wake kesitinin S370 içermediğini ve downstream grant loop'unda exact bir ayrı S370 membership bulunduğunu birlikte sabitleyecek biçimde taşındı; S369 49/49 PASS kaldı.",
      "Final seçili regresyon 16 grup / 383/383 PASS'tir: S370 50, S369 49, S368 52, S358 47, S359 49, S291–S293 toplam 45, notification runtime 10, dört runtime-OOM lifecycle/IPC teardown grubu toplam 22, S346 36, ipc_queue_source 18 ve task_lifecycle_source 5.",
      "Seçili regresyon logu 44947 B / e55839600f3b00b9f21543bab15062774be2b22c62d8b3281b52fe35d16cb53a olarak /tmp/aselsanos-s370-selected.UfaB6u altında ölçüldü.",
      "Focused artifact dizini /tmp/aselsanos-s370-focused.fQ8IMf'dir. İlk RED 10062 B / b3e32816f916fe498997d489aa26be4e67ef11ec74f538f41ec73455ee778f86, ilk GREEN 3977 B / ba13737b2592d931862d0897c32114bd615c5cea2a2a4a2f48321817dcc19d46 ve format-sonrası GREEN 3874 B / a956cf6ecb017de5ebe098e956513b7ef9c1e1d189eb546198e3cb6939dfddd9 olarak ölçüldü.",
      "Fresh izole AArch64 profilleri 4/4 exit 0 verdi. Build logları board-qemu 111450 B / 0f661f80d99c85527953a228eeffe980dad6d09dd56cf1bdf6115c504490e912 / 293 warning header; board-rpi4 150243 B / 93770691575f6c0bb4c02477bd387a95ae186195400c2dcdaf6937ccd9f8cda7 / 391; board-rpi5 605011 B / 962cf4b1ada5d4929d1762ba0fd3b9e86fd1d3b47983e03795322c7358f4ae80 / 1372 ve board-rpi5+smp 604901 B / 6954d3bae8e06623201b0e3d37a6c52fa03e5156c227a82ba43386669d748eea / 1372'dir. Zero-warning iddiası yoktur.",
      "Cargo final satırları qemu/rpi4/rpi5/rpi5+smp için sırasıyla 292/390/1371/1371 warning bildirir; önceki satırdaki değerler literal warning header sayısıdır ve ikisi birbirine karıştırılmaz.",
      "Fresh ELF'ler qemu 12623224 B / 3cc5f00e8dce5a27fcb8c9751a0550f25ba253cd413314073718470bdcd9324b; rpi4 7737032 B / a25b3a179a76282ff313c11fa1c08a3fc1306efa7b2ac52f07228651a0bd173; rpi5 14197584 B / cfb1634506d32f505770d8716212ad02f3be5afe22eeb171709d75f846c683b1 ve rpi5+smp 14209160 B / 12dcc62f9be56240f301011761c6301c6c52023f7e7d8283c6fa0177a3ace38b olarak loglardan ayrı ölçüldü.",
      "Fresh build artifact dizinleri /tmp/aselsanos-s370-board-qemu.HYUJrM, /tmp/aselsanos-s370-board-rpi4.yoOEnm, /tmp/aselsanos-s370-board-rpi5.M5ExTn ve /tmp/aselsanos-s370-board-rpi5-smp.qPsHz7'dir.",
      "S238–S370 dependency matrisi 134 gruptur ve iki bağımsız seri koşunun her biri 2863/2863 PASS verdi. 31909 B raw özetler c29c665285ceb6bd9a291ae465a86bc81e29c60d47e0b6e637e300ef8d3b96fd / 91010bfef3edd7fc4ce79c8f830e905d64af4e16e101707072d1e3e4f86523dd; fark yalnız timing alanlarındadır. 32043 B normalize özetler 03a27123bf37c607aee647a14c43f62d09af04d086fb6aff60f07c8015ac67b9 ile byte-eşittir.",
      "Dependency artifact'i /tmp/aselsanos-s370-dependency.9kahYH'dir; S238–S370 hedefleri registry-derived exact kronolojik sırada çalıştırıldı ve raw timing farklılığı normalize edildi.",
      "Exact yedi frozen G8h assertion dışındaki seri workspace 333 grup / 4724 PASS / 0 fail / 7 filtered verdi; 31517 B summary SHA-256 98f7a2b9ec17ce74c56b640b44a855e146bbca3bc96abc1190add34d17148238'dir.",
      "Filtresiz workspace exit 101 ile yalnız frozen S96 wiring_does_not_mutate_timer_gic_boot_or_expand_runtime_scope source-identity reddinde durdu; 286 grup / 4469 PASS / 1 fail, 27098 B / c40bc50b08bba7c7d00a8f3ac1553ded4986c9ceae82373efb7639b2e49a8b5d. Global workspace GREEN iddia edilmez.",
      "Workspace artifact dizini /tmp/aselsanos-s370-workspace.cbtIoX'tir.",
      "make verify-qemu 116354 B / edf83c84cbcbefd24a9837d0a9caa5e83f64bd8174b4d7e5aa8dde30844a6657 ile W^X 31/31, S130–S154+S271, RuntimePmm, EL0x4096, IPC 20/20 ve SEC5 PASS verdi. Bu board-qemu ortak regresyonudur; RPi5-only S370 runtime invocation kanıtı değildir.",
      "QEMU artifact dizini /tmp/aselsanos-s370-qemu.KwxxHV'dir.",
      "Project-status manifesti yeni S370 model/katalog sınırlarını ayrı assertion'larla iki seri koşuda 253/253 PASS doğruladı. JSON parse ve generated status README write/check PASS'tir; artifact /tmp/aselsanos-s370-status.irbh6d'dir.",
      "S1–S327 tarihsel Kod kataloğu 327/327 ayrı kimlik olarak korundu. İlk production snapshot registry'si S1–S370 370/370 ayrı kapı, 1043 exact excerpt, pre-S328 327/327, missing=none, duplicate=0 ve SHA-256 1e2a5db4c2fd98a00a6a036193f52ede936a95566d07891849c3733de2b598e3 üretti. S370 production excerpt'i exact acquire/revalidation/cancel/retire/revoke/drop aralığını taşır; S369 ve S371 occurrence'ı 0'dır.",
      "Tam-öğe katalog düzeltmesinde S370 production paneli artık tam teardown_task_ipc_lifecycle Rust fonksiyonunu gösterir; exact acquire/revalidation/cancel/retire/revoke/drop üyeliği ayrı satır aralığı ve focus SHA-256 ile korunur. Tam fonksiyondaki S368/S369 ve lifecycle bağlamı S370 guard kapsamı sayılmaz.",
      "Website ilk publication kabulü 641/641 PASS, lint PASS, boş çıktılı TypeScript exit 0 ve 24/24 static route build PASS verdi.",
      "İlk production deployment 6a6a95f2 ile 116 uploaded + 84 existing = 200 asset olarak tamamlandı. Cache-busted custom-domain `/code/`, `/operations/`, `/timeline/` ve `/yol-haritasi/` rotaları HTTP 200 ve deployment out'u ile raw byte-exact PASS verdi.",
      "İlk custom-domain ölçümleri `/code/` 20778221 B / 16c03eb30d5084ef48af577aea99f2907654d72cf219cd84a82b640cbeae25ce, `/operations/` 12694550 B / 3d392c533130dfbd7b58426164f9fcf8945d9754a688f0a952f842120b490f9e, `/timeline/` 4716813 B / 2c89db1121be62a1db92ee48b495a65361b5a17ab748122e0dfeb5f41c8c25b6 ve `/yol-haritasi/` 4716561 B / 55f09319770403a738ad65c6c9d75325234367be084fa161a9ef81ba5db885ca'dır.",
      "Canlı `/code/` yanıtı Cache-Control: public, max-age=0, must-revalidate, no-transform taşıdı; literal gate etiketleri S1–S370 370/370, pre-S328 327/327, S370=1, S371=0, missing=0, duplicate=0 ve gerçek Cloudflare rewrite=0'dır. Immutable 6a6a95f2 hostname probe'u curl exit 28 / HTTP 000 verdi; custom-domain PASS bunun yerine geçirilmez.",
      "İlk publication artifact dizini /tmp/aselsanos-s370-publication.csBfCf'dir. Evidence-sync registry/deployment kimliği self-reference oluşturmamak için bu ilk snapshot metnine geri yazılmaz; proof/status amendment'ında ayrıca tutulur.",
      "S370 sırasında güç, SD kart, Mac kart erişimi, UART capture, raw validation, archive veya promotion yapılmadı: physical/device operations=0 ve RUNBOOK_EXECUTED_IN_S370=NO.",
      "S370 bazlı bağlayıcı olmayan planlama görünümü R1 S370–S400, R2 S425–S475, R3 S554+, kaba S530–S580 ve risk paylı merkez yaklaşık S555'tir. Bu projeksiyon yeni sıra veya ürün taahhüdü değildir.",
    ],
    commands: [
      "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s370_task_ipc_lifecycle_notification_grant_revoke_writer_guard_integration -- --test-threads=1",
      "run S370, S369, S368, S358, S359, S291-S293, notification/runtime-OOM lifecycle and source regressions serially",
      "run four fresh AArch64 profile builds; run S238-S370 dependency list twice; run filtered and unfiltered serial workspace audits; make verify-qemu",
      "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-s370-focused-source-contract",
        title: "S370 focused notification-grant exact-revoke writer membership",
        commandLines: [
          "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s370_task_ipc_lifecycle_notification_grant_revoke_writer_guard_integration -- --test-threads=1",
        ],
        outputLines: [
          "initial test result: RED; S370 focused 37 passed; 13 failed; production membership/module/service not yet wired",
          "final test result: ok; S370 focused 1 group / 50 passed; 0 failed",
          "shared S247 gate: 44 guarded readers + 43/69 guarded writers; 26 writers open",
          "read-guarded grant selection + deadline/notification locks + object index < S370 writer",
          "S370 writer < wait-graph revalidation < exact waiter/deadline retirement < exact CNode revoke < writer release < counter/loop",
          "direct production caller paths=15; runtime observations=0; provider authority=0",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s370-selected-lifecycle-regression",
        title: "S370 selected lifecycle and historical-boundary regression",
        commandLines: [
          "run S370, S369, S368, S358, S359, S291-S293, notification runtime, four runtime-OOM teardown groups, S346, IPC queue and task lifecycle source groups serially",
        ],
        outputLines: [
          "historical S369 global S370-open assertion aligned to exact S369 slice plus one distinct downstream S370 membership",
          "S260 grant scan and S369 responder wake remain outside S370 membership",
          "S371 notification-object teardown commit remains a separate open writer",
          "final result: 16 groups / 383 passed / 0 failed",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s370-core-acceptance",
        title: "S370 four-profile, dependency, workspace and QEMU acceptance",
        commandLines: [
          "run four fresh AArch64 profile builds",
          "run S238-S370 dependency list twice and normalize timing fields",
          "run filtered and unfiltered serial workspace audits",
          "make verify-qemu",
        ],
        outputLines: [
          "four profiles 4/4 exit 0; log and ELF byte/hash measurements recorded separately; zero-warning not claimed",
          "dependency 134 groups / 2863/2863 twice; normalized 32043-byte summaries are SHA-256 identical",
          "filtered workspace 333 groups / 4724 PASS / 7 filtered; unfiltered frozen-S96 remains RED",
          "QEMU W^X 31/31 + S130-S154 + S271 + RuntimePmm + EL0x4096 + IPC 20/20 + SEC5 PASS; not an S370 runtime observation",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s370-production-publication",
        title: "S370 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: [
          "website 641/641 PASS; lint PASS; TypeScript empty-output exit 0; static routes 24/24",
          "initial registry S1-S370: 370/370 gates; 1043 exact excerpts; pre-S328 327/327; missing=0; duplicate=0",
          "initial deployment 6a6a95f2: 116 uploaded + 84 existing = 200 assets",
          "custom-domain four routes HTTP 200 + byte-exact; /code no-transform; S370=1; S371=0; edge rewrite=0",
          "immutable hostname curl exit 28 / HTTP 000; custom-domain evidence not substituted",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
    ],
    terminalSessionsNote:
      "Terminal kartları focused kaynak kabulünü, seçili lifecycle regresyonunu, dört-profil/dependency/workspace/QEMU kabulünü ve production publication'ı ayrı gösterir. S370 yalnız task-lifecycle derived notification-grant exact revoke writer'ıdır; upstream grant scan/S369 responder wake veya next S371 notification-object teardown commit kodunu kendi guard coverage'ına katmaz.",
    limitations: [
      "S370 kırk üçüncü production writer'ın dar kaynak entegrasyonudur; yalnız exact task-lifecycle derived notification grant revalidation/retirement/revoke transaction'ı guarded'dır.",
      "S371 notification-object teardown commit ayrı açık kapıdır; upstream S260 grant scan ve S369 responder wake S370 lease'i dışında kalır.",
      "26 production writer shared S247 gate dışında kalır; provider authority ve whole-scheduler exclusion tamamlanmadı.",
      "15 static caller path wiring envanteridir; S370-specific supported-profile invocation/observation kanıtı yoktur.",
      "Filtresiz workspace frozen-S96 nedeniyle RED'dir; global repository GREEN iddia edilmez.",
      "Default-parallel PTY determinism, transient-contention liveness/soak, Generic SMP ve fiziksel RPi kabulü açıktır.",
      "physical/device operations=0 · RUNBOOK_EXECUTED_IN_S370=NO.",
    ],
  },
snippet sha256: fecaa816c1b3file sha256: 9726dbf00f84
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s370_task_ipc_lifecycle_notification_grant_revoke_writer_guard_integration -- --test-threads=1
proof: docs/M8.1-RPi5-G8l-S370-Task-IPC-Lifecycle-Notification-Grant-Revoke-Writer-Guard-Integration-Proof.md
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 91d38c7b6222f0b4c117be786454853543da55a160e543d9b951057cc20dcc06