ASELSANMicrokernel
S369 · SOURCE-BOUND GATE EVIDENCE

S369 · Task IPC lifecycle responder linked-reply wake production writer guard integration

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

S369Production writer guardOperations id exactsource SHA exacttest target exact

operation: g8l-s369-task-ipc-lifecycle-responder-linked-reply-wake-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ğı L3451–L3464
kernel/src/ui/capability.rs::teardown_task_ipc_lifecycle
Tam kapsayıcı Rust öğesi gösterilir; vurgulu blok yalnız S369 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: c8a76ca7879b
02 · Ortak exclusion üyeliği

S247 production writer guard

tam Rust öğesiL192–L204
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s369_task_ipc_lifecycle_responder_linked_reply_wake_writer_guard_integration.rs::acquire_s369_production_scheduler_writer_access

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

Operations komutuna bağlı focused test

tam Rust öğesiL400–L411
simulation/tests/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s369_task_ipc_lifecycle_responder_linked_reply_wake_writer_guard_integration.rs::lifecycle_responder_boundary_has_exactly_one_s369_acquire_and_release

#[test]
fn lifecycle_responder_boundary_has_exactly_one_s369_acquire_and_release() {
    let boundary = responder_wake_boundary();
    assert_eq!(
        boundary
            .matches("acquire_s369_production_scheduler_writer_access")
            .count(),
        1
    );
    assert_eq!(boundary.matches("drop(s369_writer_access)").count(), 1);
}
snippet sha256: 18168c9d8becfile sha256: 26a05e03d945
04 · Kapı kimlik kaydı

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

tam Operations kaydıL10594–L10746
website/src/lib/operations.ts::g8l-s369-task-ipc-lifecycle-responder-linked-reply-wake-writer-guard-integration-partial
  {
    id: "g8l-s369-task-ipc-lifecycle-responder-linked-reply-wake-writer-guard-integration-partial",
    date: "2026-08-28",
    sequence: 369,
    status: "passed",
    umbrella_status: "partial",
    title:
      "S369 · Task IPC lifecycle responder linked-reply wake production writer guard integration",
    summary:
      "S369, teardown_task_ipc_lifecycle içindeki responder'a bağlı exact wake_tasks_on_revoked_endpoint(reply_cap_id) scheduler mutation'ını S368 ve 44 production reader'ın kullandığı aynı statik S247 state word'e bağlar. Outer IRQ/IPC transaction, complete lifecycle preflight, başarılı S368 wake-capacity reservation, exact responder cancellation, reply retirement ve linked reply-object discard writer'dan önce kapanır. Gerçek per-CPU kimliğinden yalnız CPU0 için S369 exclusive writer alınır; exact tek mutable SCHEDULER aliası bütün linked-reply wake çağrısını kapsar ve cancelled-responder counter artışından, owned-endpoint teardown loop'undan ve notification-grant revoke'dan önce explicit bırakılır. Guarded writer 42/69, açık writer 27, 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ı S370 task-lifecycle notification-grant exact revoke writer'ıdır.",
    evidence: [
      "Focused S369 sözleşmesinin module/test wiring'i hazır, fakat production responder-wake membership ile CPU1 coverage service henüz bağlı değilken alınan ilk TDD sonucu 35/49 PASS ve 14 RED'dir. RED yüzeyi contract comment, exact acquire/release, source order, guarded slice, downstream separation ve service ordering assertion'larından oluştu.",
      "Yalnız satır-kırılmasına duyarlı contract-comment eşleşmesi düzeltilip production boundary açık bırakıldığında ikinci ölçüm 36/49 PASS ve 13 RED verdi; bu ara ölçüm eksik production entegrasyonunun gerçekten RED kaldığını sabitler.",
      "Exact S369 acquire/drop ve S368 service sonrasına CPU1 coverage service eklendikten sonra aynı focused hedef 49/49 PASS; 1 grup / 49 passed / 0 failed verdi. Ürün veya coverage assertion'ı gevşetilmedi.",
      "Final envanter module constants, pending-request outcome ve production source katmanlarında birlikte 44 guarded reader + 42/69 guarded writer + 27 open writer'dır.",
      "Exact kaynak sırası owner!=0 → IrqGuard → IPC_TRANSACTION_LOCK → complete preflight_task_ipc_lifecycle(owner) → S368 capacity reserve/release → capacity success → cancel_next_for_responder(owner) → reply retire → linked reply-object discard → S369 CPU0-only shared-gate writer → tek mutable SCHEDULER aliası → wake_tasks_on_revoked_endpoint(reply_cap_id) → writer drop → cancelled-responder counter/loop'tur.",
      "Owner==0 InvalidTask yolu writer alınmadan döner. IRQ ve global IPC transaction guard'ları complete preflight, capacity reservation, responder registry mutation, linked reply wake ve sonraki allocation-free lifecycle commit boyunca canlıdır.",
      "preflight_task_ipc_lifecycle endpoint ve notification authority graph'ını immutable scheduler snapshot'ı altında doğrular; S250 reader membership mutable S368 veya S369 lease'i ile nested edilmez.",
      "Preflight ordinary endpoint/reply registry identity'lerini, CNode authority'lerini, holder summaries, rendezvous parked/unparked/terminal durumlarını, blocked task graph'ını ve notification waiter/deadline bağlarını mutation öncesinde doğrular.",
      "Unparked CALL InFlightCallTransition, terminal reply TerminalReplyTransition ve identity/generation drift AuthorityGraphMismatch üretir; hiçbirinde S369 writer callback'i başlamaz.",
      "S368 checked wake-capacity reservation başarılı olmadan responder loop başlamaz. WakeCapacityOverflow veya WakeCapacityUnavailable S369 writer edinilmeden fail-closed döner.",
      "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_s369 occurrence'ı, exact bir responder-wake mutable scheduler aliası ve exact bir drop(s369_writer_access) vardır.",
      "S369 guarded diliminde yalnız wake_tasks_on_revoked_endpoint(reply_cap_id) bulunur. Capacity reservation, responder cancellation, reply retirement/discard, counter increment, endpoint teardown ve notification grant revoke dilim dışında kalır.",
      "cancel_next_for_responder(owner) aynı transaction altında exact parked responder kaydını çıkarır; linked reply-cap kimliği writer'dan önce owned local değere taşınır.",
      "retire_reply(reply_cap_id, None) ve discard_linked_reply_object(reply_cap_id) S369 acquire'dan önce exact kaynak sırasındadır; scheduler wake retired/discarded reply identity'si üzerinden yapılır.",
      "Exact tek mutable SCHEDULER aliası yalnız responder reply-cap wake method çağrısını kapsar; alias veya guard counter artışına, loop continuation'a veya diğer lifecycle mutation'larına sızmaz.",
      "S369 release cancelled_responder_calls += 1 ve responder loop continuation'dan önce exact kaynak sırasındadır; long-lived exclusive membership oluşmaz.",
      "Owned endpoint teardown loop'u ve foreign notification cleanup daha sonradır. Task-lifecycle notification-grant exact revoke S370'e bırakılmış ayrı mutable scheduler sınırıdır.",
      "S368 capacity writer'ı acquire_s369 sembolü içermez. S367 endpoint helper'ı da S369'a katılmaz. S367, S368 ve S369 farklı exclusive token'larla ve source-order bakımından ayrı membership'lerdir.",
      "Host-testable execute_s369_guarded_responder_linked_reply_wake_commit yalnız CPU0 callback'ini ç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 nonzero token ve owned output taşır. S368→S369 token monotonluğu ve arada active token yokluğu doğrulandı.",
      "S369 preflight S368'in 44 reader / 41 guarded writer / 28 open snapshot'ını exact doğrular; yalnız doğru zincir 42/69 guarded ve 27 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 S368 service'inden sonra ve tarihsel S242 consumer'dan önce bağlıdır. Service S247 writer edinmez ve S369 production responder wake runtime'ını çalıştırmaz.",
      "Tarihsel S292 task-lifecycle responder wake audit'i model-only authority/order kanıtı olarak ayrı kalır. S369 gerçek board-rpi5 static wrapper ve exact production acquire/drop sınırını ekler.",
      "S369 wiring sonrası S368 focused testindeki obsolete global S369 absence assertion'ı, S368 guarded capacity kesitinin S369 içermediğini ve downstream responder loop'unda exact bir ayrı S369 membership bulunduğunu birlikte sabitleyecek biçimde taşındı; S368 52/52 PASS kaldı.",
      "Final seçili regresyon 13 grup / 250/250 PASS'tir: S369 49, S368 52, S367 51, S291–S293 toplam 45, ipc_notification_lifecycle_runtime 10, dört runtime-OOM lifecycle/IPC teardown grubu toplam 20, ipc_queue_source 18 ve task_lifecycle_source 5.",
      "Focused/selected artifact'i /tmp/aselsanos-s369-focused.65FW7l'dir. İlk RED 10830 B / 3ac22186dc61508e4bad3bb8a70d6278471386f0b1896734d0aa878ca750a058, production-boundary RED 10382 B / 7dba6a4848ebb26c09723032237079f07103fdfe77cf25e6dd0715f1db7861f9, final GREEN 3986 B / 4094ecef63451081fe1beb000e5789e33791b342015c0302238169c7bb67eb0a ve selected summary 2371 B / 60a420756f7942a35c105f53680cd4ee808b90023ef450edbb43bd50b685cfc1 olarak ölçüldü.",
      "Fresh izole AArch64 profilleri 4/4 exit 0 verdi. Build logları board-qemu 111987 B / 473391cb7c5cff1571ed7f2ba67c7b78a2133e850b929bcd90f5ab94e4e669a6 / 293 warning; board-rpi4 150832 B / 61a34669bcc66ca08c7f90a185245e74d756882f50a014ba0921a69be9384648 / 391; board-rpi5 603072 B / 9af2b35ff192d3c68455328b4457454c948f803d85f8169ba94269dec1cc3a5f / 1366 ve board-rpi5+smp 602806 B / ba0f376a13c5a80cda2db0972f07fab104aa39272ee3b90d2dd535f30011e1bf / 1366'tır. Zero-warning iddiası yoktur.",
      "Fresh ELF'ler qemu 17280952 B / b7ca3035461b124b9ec0639bb94e5c14a800fe42d7e304a2a2a001a10f0752; rpi4 12329952 B / 1a9321d42e1f5c8c026154899bc21302c3f07529c8959df3272002aad254e6d4; rpi5 18608912 B / 54d7ecbf0336f1e0bd0204e93f939c4f2148bfb5f663cdb7bc37cd08a3593279 ve rpi5+smp 18627904 B / 65f6de57d7c16f2a7527702bc7bc9a10d308fdc87812e37a5868afc49d96c09b olarak loglardan ayrı ölçüldü.",
      "Fresh build artifact dizinleri /tmp/aselsanos-s369-board-qemu.CZ6gRV, /tmp/aselsanos-s369-board-rpi4.JuoBTg, /tmp/aselsanos-s369-board-rpi5.YwRMjI ve /tmp/aselsanos-s369-board-rpi5-smp.LaRBNY'dir.",
      "S238–S369 dependency matrisi 133 gruptur ve iki bağımsız seri koşunun her biri 2813/2813 PASS verdi. 31649 B raw özetler 6a070f92a603938ef9446ac391f14fcf498bed8a924f51e9b5b225bbe4400d0e / 700327218f4dd209e5d67a39188d2a93a72480e26116adef28faed278aec5543; fark yalnız timing alanlarındadır. 31915 B normalize özetler f9cfc58de6349972924f740e11d8734136a1e327f0265252be734a37339d0967 ile byte-eşittir.",
      "Dependency artifact'i /tmp/aselsanos-s369-dependency.8d5kn3'tür; registry-derived S238–S368 hedefleri, ayrı S240 SGI delivery grubu ve S369 focused hedefi exact kronolojik sırada çalıştırıldı.",
      "Exact yedi frozen G8h assertion dışındaki seri workspace 332 grup / 4673 PASS / 0 fail / 7 filtered verdi; 31422 B summary SHA-256 4755614c795f13821378807e34c0cdc284d5b3b8e19abffa626c7f6543258684'tü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; 285 grup / 4410 PASS / 1 fail, 27003 B / 31aa9c6ff6c943a6d44dc5a4c36bc77dd1de72df9df1d299bd0b51c62959ff54. Global workspace GREEN iddia edilmez.",
      "Workspace artifact dizini /tmp/aselsanos-s369-workspace.U1H2ot'tur.",
      "make verify-qemu 116354 B / 2e272aa3b123c7510e012442c87c3fd9ea2abb21220fdb022c4ac685f5b5c546 ile W^X 31/31, S130–S154+S271, RuntimePmm, EL0x4096, IPC 20/20, SEC5 ve kernel fault/panic marker 0 PASS verdi. Bu S369 RPi5 runtime invocation kanıtı değildir.",
      "QEMU artifact dizini /tmp/aselsanos-s369-qemu.0eB5Tc'dir.",
      "S369 module/testi, güncellenen S368 testi ve production wiring scoped rustfmt check'te boş çıktılı PASS verdi. Global cargo fmt --all -- --check ve git diff --check de boş çıktılı PASS'tir; empty-output SHA-256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'tir.",
      "Format artifact dizini /tmp/aselsanos-s369-format.SIHcHn'dir.",
      "S1–S327 tarihsel Kod kataloğu 327/327 ayrı kimlik olarak korunur. Eksik sıra 0, duplicate 0'dır; güncel S369 production paneli tam teardown_task_ipc_lifecycle fonksiyonunu, exact S369 acquire-to-release üyeliğini ise ayrı focus olarak gösterir. Tam fonksiyonda görünen S368/S370 bağlamı S369 üyeliğine katılmaz.",
      "İlk S369 publication snapshot'ında source-bound Kod registry S1–S369 aralığında 369/369 ayrı kapı, 1039 exact excerpt, pre-S328 327/327, missing=none, duplicate=0 ve SHA-256 917c38f1c51d0a068cb9ab839a1fd63adc6d6206b83d4dc36a4e6380377595be üretti. S369 production excerpt'i exact acquire/wake/drop taşır; S368 acquire/capacity ve S370/revoke occurrence'ı 0'dır.",
      "Website ilk publication öncesi 637/637 PASS, lint PASS, TypeScript boş çıktılı exit 0 ve 24/24 static route build PASS verdi.",
      "S369 production/main deployment c55ff1d8 ile https://c55ff1d8.aselsan-microkernel.pages.dev adresine 116 upload + 84 existing = 200 asset olarak tamamlandı.",
      "Cache-busted custom-domain doğrulamasında /code/ 20693002 B / df502bb3520c32175f75d9beb631cdf68f215014385e9a7ef6f33c5f44d84e8a, /operations/ 12585733 B / 1c273ac706997ddee0eec6658ec88763b1765aea4c819e6329b5caa01f8cdee4, /timeline/ 4619823 B / 6d483e5be2af326f0c09fe889b3a197910a5376210508d85a9dae151f8646095 ve /yol-haritasi/ 4619571 B / b27aca39eff0086b25e55d441eb9726f47353a6e869e7a5cd611abe50cf69a02 ile HTTP 200 ve yerel out'a raw byte-exact PASS verdi.",
      "/code/ yanıtı Cache-Control: public, max-age=0, must-revalidate, no-transform taşıdı. Canlı Kod kartları 369/369, pre-S328 327/327, S369 exact 1, S370 0, missing=0 ve duplicate=0'dır. Immutable c55ff1d8 hostname probe'u curl exit 28 / HTTP 000 verdi; custom-domain PASS bunun yerine geçirilmez.",
      "İlk publication artifact dizini /tmp/aselsanos-s369-publication.9TDk7r'dir. Sonraki evidence-sync registry hash'i self-reference oluşturmamak için ilk snapshot hash'inden ayrı tutulur.",
      "S369 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_S369=NO.",
      "S369 bazlı bağlayıcı olmayan planlama görünümü R1 S369–S399, R2 S424–S474, R3 S553+, kaba S529–S579 ve risk paylı merkez yaklaşık S554'tür. 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_s369_task_ipc_lifecycle_responder_linked_reply_wake_writer_guard_integration -- --test-threads=1",
      "run S369, S368, S367, S291-S293 and seven lifecycle/runtime source groups serially",
      "run four fresh AArch64 profile builds; run S238-S369 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-s369-focused-source-contract",
        title: "S369 focused responder linked-reply wake writer membership",
        commandLines: [
          "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s369_task_ipc_lifecycle_responder_linked_reply_wake_writer_guard_integration -- --test-threads=1",
        ],
        outputLines: [
          "initial test result: RED; S369 focused 35 passed; 14 failed; production responder-wake membership and CPU1 service not yet wired",
          "boundary-only RED after contract-comment alignment: 36 passed; 13 failed",
          "final test result: ok; S369 focused 1 group / 49 passed; 0 failed",
          "shared S247 gate: 44 guarded readers + 42/69 guarded writers; 27 writers open",
          "capacity/responder cancel/reply retire+discard < S369 writer < exact linked-reply wake < writer release < counter/loop",
          "direct production caller paths=15; runtime observations=0; provider authority=0",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s369-selected-lifecycle-regression",
        title: "S369 selected lifecycle and historical-boundary regression",
        commandLines: [
          "run S369, S368, S367, S291-S293, notification lifecycle, four runtime-OOM teardown, IPC queue and task lifecycle groups serially",
        ],
        outputLines: [
          "historical S368 global S369-absence assertion aligned to its exact capacity slice plus one distinct downstream S369 membership",
          "S368 capacity membership and S367 endpoint helper remain separate from S369",
          "S370 notification-grant exact revoke remains a separate open writer",
          "final result: 13 groups / 250 passed / 0 failed",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s369-core-acceptance",
        title: "S369 four-profile, dependency, workspace and QEMU acceptance",
        commandLines: [
          "run four fresh AArch64 profile builds",
          "run S238-S369 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 133 groups / 2813/2813 twice; normalized 31915-byte summaries are SHA-256 identical",
          "filtered workspace 332 groups / 4673 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 S369 runtime observation",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s369-production-publication",
        title: "S369 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 tests 637/637 PASS; lint PASS; TypeScript exit 0 with empty output; static routes 24/24",
          "registry S1-S369: 369/369 gates; 1039 exact excerpts; pre-S328 327/327; missing=0; duplicate=0",
          "deployment c55ff1d8; 116 upload + 84 existing = 200 assets",
          "four cache-busted custom-domain routes HTTP 200 and local out raw byte-exact=true; /code/ no-transform",
          "live /code/: 369 gate cards; pre-S328 327; S369=1; S370=0",
          "immutable deployment hostname curl exit 28 / HTTP 000; custom-domain result 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. S369 yalnız task-lifecycle responder linked-reply wake writer'ıdır; prior capacity/cancel/retire/discard veya next S370 notification-grant revoke kodunu kendi guard coverage'ına katmaz.",
    limitations: [
      "S369 kırk ikinci production writer'ın dar kaynak entegrasyonudur; yalnız exact task-lifecycle responder linked-reply wake guarded'dır.",
      "S370 task-lifecycle notification-grant exact revoke ayrı açık kapıdır; prior capacity/cancel/retire/discard S369 lease'i dışında kalır.",
      "27 production writer shared S247 gate dışında kalır; provider authority ve whole-scheduler exclusion tamamlanmadı.",
      "15 static caller path wiring envanteridir; S369-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_S369=NO.",
    ],
  },
snippet sha256: 78c1cf235afafile sha256: 9726dbf00f84
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s369_task_ipc_lifecycle_responder_linked_reply_wake_writer_guard_integration -- --test-threads=1
proof: docs/M8.1-RPi5-G8l-S369-Task-IPC-Lifecycle-Responder-Linked-Reply-Wake-Writer-Guard-Integration-Proof.md
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 91d38c7b6222f0b4c117be786454853543da55a160e543d9b951057cc20dcc06