ASELSANMicrokernel
S368 · SOURCE-BOUND GATE EVIDENCE

S368 · Task IPC lifecycle wake-capacity production writer guard integration

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

S368Production writer guardOperations id exactsource SHA exacttest target exact

operation: g8l-s368-task-ipc-lifecycle-wake-capacity-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ğı L3393–L3406
kernel/src/ui/capability.rs::teardown_task_ipc_lifecycle
Tam kapsayıcı Rust öğesi gösterilir; vurgulu blok yalnız S368 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: 2e1cba67241c
02 · Ortak exclusion üyeliği

S247 production writer guard

tam Rust öğesiL184–L196
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s368_task_ipc_lifecycle_wake_capacity_writer_guard_integration.rs::acquire_s368_production_scheduler_writer_access

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

Operations komutuna bağlı focused test

tam Rust öğesiL387–L398
simulation/tests/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s368_task_ipc_lifecycle_wake_capacity_writer_guard_integration.rs::lifecycle_has_exactly_one_s368_acquire_and_one_release

#[test]
fn lifecycle_has_exactly_one_s368_acquire_and_one_release() {
    let boundary = task_lifecycle_boundary();
    assert_eq!(
        boundary
            .matches("acquire_s368_production_scheduler_writer_access")
            .count(),
        1
    );
    assert_eq!(boundary.matches("drop(s368_writer_access)").count(), 1);
}
snippet sha256: 017ecc07c232file sha256: 78875cea5705
04 · Kapı kimlik kaydı

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

tam Operations kaydıL10747–L10898
website/src/lib/operations.ts::g8l-s368-task-ipc-lifecycle-wake-capacity-writer-guard-integration-partial
  {
    id: "g8l-s368-task-ipc-lifecycle-wake-capacity-writer-guard-integration-partial",
    date: "2026-08-28",
    sequence: 368,
    status: "passed",
    umbrella_status: "partial",
    title:
      "S368 · Task IPC lifecycle wake-capacity production writer guard integration",
    summary:
      "S368, teardown_task_ipc_lifecycle içindeki exact try_reserve_ipc_wake_capacity(wake_capacity) scheduler mutation'ını S367 ve 44 production reader'ın kullandığı aynı statik S247 state word'e bağlar. Nonzero owner doğrulaması, outer IrqGuard, IPC_TRANSACTION_LOCK ve complete preflight_task_ipc_lifecycle(owner) writer'dan önce kapanır. Gerçek per-CPU kimliğinden yalnız CPU0 için S368 exclusive writer alınır; exact tek mutable SCHEDULER aliası bütün boolean capacity reservation çağrısını kapsar ve hem WakeCapacityUnavailable fail-closed dalından hem responder/endpoint/notification commit'lerinden önce explicit bırakılır. Guarded writer 41/69, açık writer 28, 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ı S369 task-lifecycle responder linked-reply wake writer'ıdır.",
    evidence: [
      "Focused S368 sözleşmesinin module ve test wiring'i hazır, fakat production capacity membership ile CPU1 coverage service henüz bağlı değilken alınan ilk TDD sonucu 38/52 PASS ve 14 RED'dir. RED yüzeyi exact acquire/release, source order, guarded slice, downstream separation ve service ordering assertion'larından oluştu.",
      "Yalnız teardown_task_ipc_lifecycle capacity sınırına exact S368 acquire/drop ve S367 service sonrasına CPU1 coverage service eklendikten sonra aynı focused hedef 52/52 PASS; 1 grup / 52 passed / 0 failed verdi.",
      "Final envanter module constants, pending-request outcome ve production source katmanlarında birlikte 44 guarded reader + 41/69 guarded writer + 28 open writer'dır.",
      "Exact kaynak sırası owner!=0 → IrqGuard → IPC_TRANSACTION_LOCK → preflight_task_ipc_lifecycle(owner) → S368 CPU0-only shared-gate writer → tek mutable SCHEDULER aliası → try_reserve_ipc_wake_capacity(wake_capacity) → writer drop → capacity failure branch → responder commit loop'tur.",
      "Owner==0 InvalidTask yolu writer alınmadan döner. IRQ ve global IPC transaction guard'ları complete preflight, capacity reservation 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 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 S368 writer callback'i başlamaz.",
      "Wake toplamı checked_wake_add üzerinden checked_add kullanır. Overflow WakeCapacityOverflow ile reservation ve commit başlamadan fail-closed olur.",
      "Capacity üst sınırı parked responder calls, owned endpoint cancellation/waiter/legacy queue kapasitesi ve foreign notification waiter wake'lerini birlikte kapsar; bu sayı ürün workload bütçesi veya liveness garantisi değildir.",
      "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_s368 occurrence'ı, exact bir capacity mutable scheduler aliası ve exact bir drop(s368_writer_access) vardır.",
      "S368 guarded diliminde yalnız try_reserve_ipc_wake_capacity(wake_capacity) bulunur. Owner/IRQ/transaction/preflight, failure branch, responder wake ve notification grant revoke dilim dışında kalır.",
      "capacity_reserved boolean sonucu writer canlıyken owned local değere çıkarılır; writer explicit bırakıldıktan sonra if !capacity_reserved dalı WakeCapacityUnavailable döndürür.",
      "Scheduler::try_reserve_ipc_wake_capacity yalnız ready_queue.try_reserve(additional).is_ok() çağrısını yapar; task push/pop, context switch veya endpoint wake yapmaz.",
      "S368 release ilk cancel_next_for_responder(owner), reply retirement, reply-object discard ve wake_tasks_on_revoked_endpoint(reply_cap_id) çağrısından önce exact kaynak sırasındadır.",
      "Task lifecycle helper üç ayrı mutable scheduler aliasını korur: S368 capacity reservation, S369'a bırakılan responder reply wake ve daha sonraki notification-grant exact revoke sınırı.",
      "S367 endpoint teardown helper'ı acquire_s368 sembolü içermez. S367 ve S368 farklı fonksiyonlarda, farklı exclusive token'larla ve source-order bakımından ayrı membership'lerdir.",
      "Host-testable execute_s368_guarded_wake_capacity_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. S367→S368 token monotonluğu ve arada active token yokluğu doğrulandı.",
      "S368 preflight S367'nin 44 reader / 40 guarded writer / 29 open snapshot'ını exact doğrular; yalnız doğru zincir 41/69 guarded ve 28 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 S367 service'inden sonra ve tarihsel S242 consumer'dan önce bağlıdır. Service S247 writer edinmez ve S368 production reservation runtime'ını çalıştırmaz.",
      "Tarihsel S291 task-lifecycle wake-capacity audit'i model-only authority/order kanıtı olarak ayrı kalır. S368 gerçek board-rpi5 static wrapper ve exact production acquire/drop sınırını ekler.",
      "S368 wiring sonrası S367 focused testi obsolete global S368 absence assertion'ında 50/51 RED oldu. S367 helper diliminin S368 içermediği ve downstream lifecycle'ta exact bir ayrı S368 membership bulunduğu birlikte sabitlenerek 51/51 PASS oldu.",
      "Dependency koşusunda S358 focused testi satır-kırılmasına duyarlı eski let commit_result = (|| eşleşmesinde 46/47 RED verdi. Typed Result closure ile registry cleanup sırasını gevşetmeden biçimden bağımsız exact assertion'a çevrildi ve 47/47 PASS oldu.",
      "Final seçili regresyon 10 grup / 188/188 PASS'tir: S368 52, S367 51, S291–S293 authority audit'leri, IPC queue source, task lifecycle source ve üç runtime-OOM lifecycle/IPC teardown grubu.",
      "Seçili regresyon logu 1330 B / e7a684a37dac575a076a52efaf8042661da57d81b3f21ca3629d17ed228cfe50 olarak /tmp/aselsanos-s368-selected.DuqgAw altında ölçüldü.",
      "Fresh izole AArch64 profilleri 4/4 exit 0 verdi. Build logları board-qemu 111450 B / 9df2af21340c51a2cb65d98480d2fa2fd7a79deca72ddb58d54c3440439d9912 / 293 warning; board-rpi4 150191 B / 5b98c16eaea07066943bcbe81b7d895a47ae0efeb30b1870736a16d71489d1d6 / 391; board-rpi5 599824 B / 6d888981106ec6ec3f493ff1674d441c5fe81d9724ddd842a28abce07cc19c1b / 1360 ve board-rpi5+smp 599766 B / 1d69fee3c9f89518c5e1a6bfa1274cc4c6717749f905b23373015554279966b9 / 1360'tır. Zero-warning iddiası yoktur.",
      "Fresh ELF'ler qemu 12623192 B / 025bf19466c3b4cdd4fa070eeb263be97d19dd45f928f97c5404881e77abd597; rpi4 7737072 B / 5f180029b6142d8f50e1d5272d3ed336d0e3caf60a6975846ceb7f830c67c005; rpi5 14030400 B / 6a781a2bbff58e5d789084629351f2b26805aa2b2685710efd2a6cd414044cb6 ve rpi5+smp 14055752 B / acab46ae5cabcc74dae3e4a78f93c9e93f7c075ba3a7150b590115045c66b84b olarak loglardan ayrı ölçüldü.",
      "Fresh build artifact dizinleri /tmp/aselsanos-s368-board-qemu.BiCIe9, /tmp/aselsanos-s368-board-rpi4.r0pMKo, /tmp/aselsanos-s368-board-rpi5.kSoJcS ve /tmp/aselsanos-s368-board-rpi5-smp.yyFM7m'dir.",
      "S238–S368 dependency matrisi 132 gruptur ve iki bağımsız seri koşunun her biri 2764/2764 PASS verdi. 12539 B raw özetler 9285879fbeb4d477e3c8cd96981c3bd5706c26ab1e873c5f44216ba78f3b771a / 18e1560c87566abcd932bd7ae5d3a7f7d567f1b207c6458254265e29f18b166f; fark yalnız timing alanlarındadır. 13595 B normalize özetler b9dc85b9892efd69e512a44b3cea6c6716a5aeba8d6a5accc8f384b93c1c726e ile byte-eşittir.",
      "Dependency artifact'i /tmp/aselsanos-s368-dependency.Led6yM'dir. İlk deneme S358'in biçime duyarlı tarihsel assertion'ını exact ilk failure olarak yakaladı; düzeltme sonrası iki seri sıfırdan çalıştırıldı.",
      "Exact yedi frozen G8h assertion dışındaki seri workspace 331 grup / 4623 PASS / 0 fail / 7 filtered verdi; 31327 B summary SHA-256 77cda846b99e8f0be99f17fd7cee80a4a75d9f35c442633e429a56061a7101ac'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; 284 grup / 4368 PASS / 1 fail, 26908 B / 18b2c1e68e0f40ea6ba106e0a794d0ed8b05dabfe5d8f449e1d67e29fb8088bb. Global workspace GREEN iddia edilmez.",
      "Workspace artifact dizini /tmp/aselsanos-s368-workspace.Y18i8C'dir.",
      "make verify-qemu 116354 B / 6de7712696b446744fd48b2aee6001dd335a1359c10f1d6eaebe3ebfcff89427 ile W^X 31/31, S130–S154+S271, RuntimePmm, EL0x4096, IPC 20/20, SEC5 ve kernel fault/panic marker 0 PASS verdi. Bu S368 RPi5 runtime invocation kanıtı değildir.",
      "QEMU artifact dizini /tmp/aselsanos-s368-qemu.xKCWTV'dir.",
      "S368 module/testi, güncellenen S367/S358 testleri ve production wiring scoped rustfmt check'te boş çıktılı PASS verdi. Global cargo fmt --all -- --check de bu snapshot'ta boş çıktılı PASS, git diff --check PASS'tir.",
      "Format artifact dizini /tmp/aselsanos-s368-format.Ljzvxy'dir.",
      "S1–S327 tarihsel Kod kataloğu 327/327 ayrı kimlik olarak korunur. Eksik sıra 0, duplicate 0'dır; güncel S368 production paneli tam teardown_task_ipc_lifecycle fonksiyonunu, exact S368 acquire-to-release üyeliğini ise ayrı focus olarak gösterir. Tam fonksiyonda görünen S369/S370 bağlamı S368 üyeliğine katılmaz.",
      "İlk S368 publication snapshot'ında source-bound Kod registry S1–S368 aralığında 368/368 ayrı kapı, 1035 exact excerpt, pre-S328 327/327, missing=none, duplicate=0 ve SHA-256 28cc8256e5722c78607a5398d04d5f094c6b1bdf9621f41b68556a7471f7aa9d üretti. S368 production excerpt'i exact acquire/drop taşır; S369 acquire ve cancel_next_for_responder occurrence'ı 0'dır.",
      "Website ilk publication öncesi 633/633 PASS, lint PASS, TypeScript boş çıktılı exit 0 ve 24/24 static route build PASS verdi.",
      "S368 production/main deployment 3d1d6f33 ile https://3d1d6f33.aselsan-microkernel.pages.dev adresine 116 upload + 84 existing = 200 asset olarak tamamlandı.",
      "Cache-busted custom-domain doğrulamasında /code/ 20616492 B / e8b9b5fb8f68804eda762061e8184d72f01bd1279e507e6399d4383ad710ea61, /operations/ 12492722 B / bc5325c3d3286dd35c50333242917d8accedf54097da8261022cd8be2733f9ba, /timeline/ 4533339 B / dc1f416b43cb1c4984427b64a1c770d4707e9673b648c6a90461816824c4e5ed ve /yol-haritasi/ 4533087 B / af3f00f3976f1151c3208d91ec92e7cc387f2362867c49af11bec89e272281e7 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 registry etiketi 368/368, pre-S328 327/327, missing=0 ve duplicate=0'dır. Immutable 3d1d6f33 hostname probe'u curl exit 28 / HTTP 000 verdi; custom-domain PASS bunun yerine geçirilmez.",
      "İlk publication artifact dizini /tmp/aselsanos-s368-publication.hUIfVD'dir. Sonraki evidence-sync registry hash'i self-reference oluşturmamak için ilk snapshot hash'inden ayrı tutulur.",
      "S368 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_S368=NO.",
      "S368 bazlı bağlayıcı olmayan planlama görünümü R1 S368–S398, R2 S423–S473, R3 S552+, kaba S528–S578 ve risk paylı merkez yaklaşık S553'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_s368_task_ipc_lifecycle_wake_capacity_writer_guard_integration -- --test-threads=1",
      "run S368, S367, S291, S292, S293, ipc_queue_source, task_lifecycle_source and three runtime-OOM lifecycle/IPC teardown groups serially",
      "run four fresh AArch64 profile builds; run S238-S368 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-s368-focused-source-contract",
        title: "S368 focused task-lifecycle wake-capacity writer membership",
        commandLines: [
          "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s368_task_ipc_lifecycle_wake_capacity_writer_guard_integration -- --test-threads=1",
        ],
        outputLines: [
          "initial test result: RED; S368 focused 38 passed; 14 failed; production capacity membership and CPU1 service not yet wired",
          "final test result: ok; S368 focused 1 group / 52 passed; 0 failed",
          "shared S247 gate: 44 guarded readers + 41/69 guarded writers; 28 writers open",
          "owner/IRQ/IPC transaction/complete preflight < S368 writer < exact capacity reservation < writer release < failure/responder commit",
          "direct production caller paths=15; runtime observations=0; provider authority=0",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s368-selected-lifecycle-regression",
        title: "S368 selected lifecycle and historical-boundary regression",
        commandLines: [
          "run S368, S367, S291-S293, IPC queue/task lifecycle source and three runtime-OOM teardown groups serially",
        ],
        outputLines: [
          "historical S367 initially 50/51 RED on obsolete global S368 absence",
          "historical S358 dependency initially 46/47 RED on line-wrap-sensitive typed commit_result spelling",
          "preserved S367 guarded helper slice and S358 typed closure/registry cleanup semantics",
          "S369 responder linked-reply wake remains a separate open writer",
          "final result: 10 groups / 188 passed / 0 failed",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s368-core-acceptance",
        title: "S368 four-profile, dependency, workspace and QEMU acceptance",
        commandLines: [
          "run four fresh AArch64 profile builds",
          "run S238-S368 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 132 groups / 2764/2764 twice; normalized 13595-byte summaries are SHA-256 identical",
          "filtered workspace 331 groups / 4623 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 S368 runtime observation",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s368-production-publication",
        title: "S368 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 633/633 PASS; lint PASS; TypeScript exit 0 with empty output; static routes 24/24",
          "registry S1-S368: 368/368 gates; 1035 exact excerpts; pre-S328 327/327; missing=0; duplicate=0",
          "deployment 3d1d6f33; 116 upload + 84 existing = 200 assets",
          "four cache-busted custom-domain routes HTTP 200 and local out raw byte-exact=true; /code/ no-transform",
          "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. S368 yalnız task-lifecycle wake-capacity reservation writer'ıdır; prior complete preflight veya next S369 responder wake kodunu kendi guard coverage'ına katmaz.",
    limitations: [
      "S368 kırk birinci production writer'ın dar kaynak entegrasyonudur; yalnız exact task-lifecycle capacity reservation guarded'dır.",
      "S369 task-lifecycle responder linked-reply wake ayrı açık kapıdır; notification-grant exact revoke da S368 lease'i dışında kalır.",
      "28 production writer shared S247 gate dışında kalır; provider authority ve whole-scheduler exclusion tamamlanmadı.",
      "15 static caller path wiring envanteridir; S368-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_S368=NO.",
    ],
  },
snippet sha256: 4148b99046d5file sha256: 9726dbf00f84
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s368_task_ipc_lifecycle_wake_capacity_writer_guard_integration -- --test-threads=1
proof: docs/M8.1-RPi5-G8l-S368-Task-IPC-Lifecycle-Wake-Capacity-Writer-Guard-Integration-Proof.md
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9