ASELSANMicrokernel
S361 · SOURCE-BOUND GATE EVIDENCE

S361 · Timed IPC CALL-cancel production writer guard integration

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

S361Production writer guardOperations id exactsource SHA exacttest target exact

operation: g8l-s361-timed-ipc-call-cancel-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 öğesiL2334–L2497
kernel/src/ui/capability.rs::cancel_timed_ipc_call_under_transaction

/// Cancel one exact, parked deadline-bearing CALL while the caller owns the
/// outer `IPC_TRANSACTION_LOCK` and deadline-registry lock. Every authority
/// edge and wake slot is checked before `cancel_call` becomes the model
/// linearization point; all following mutations are allocation-free and
/// invariant failures are fail-stop.
pub(crate) fn cancel_timed_ipc_call_under_transaction(
    expected: crate::ipc_wait::WaitRecord,
) -> Result<TimedIpcCallCancellation, TimedIpcCallCancelError> {
    use crate::ipc_rendezvous::{CancelOutcome, ReplyState};
    use crate::ipc_wait::WaitKindTag;

    if expected.kind().tag() != WaitKindTag::Call {
        return Err(TimedIpcCallCancelError::NotCallWait);
    }
    let caller_task = expected.key().task_id();
    let endpoint_id = expected.kind().object_id();
    let endpoint_generation = expected.kind().object_generation();
    let reply_cap_id = expected
        .kind()
        .reply_cap_id()
        .ok_or(TimedIpcCallCancelError::MissingReplyIdentity)?;
    let reply_generation = expected
        .kind()
        .reply_generation()
        .ok_or(TimedIpcCallCancelError::MissingReplyIdentity)?;

    let mut store = get_capability_store();
    let mut registry = ENDPOINT_REGISTRY.lock();
    if registry
        .iter()
        .filter(|object| object.id == endpoint_id)
        .count()
        != 1
        || registry
            .iter()
            .filter(|object| object.id == reply_cap_id)
            .count()
            != 1
        || store
            .entries
            .iter()
            .filter(|entry| entry.id == reply_cap_id && entry.kind == CapabilityKind::Endpoint)
            .count()
            != 1
    {
        return Err(TimedIpcCallCancelError::AuthorityGraphMismatch);
    }
    let target_index = registry
        .iter()
        .position(|endpoint| endpoint.id == endpoint_id && !endpoint.is_reply_cap)
        .ok_or(TimedIpcCallCancelError::AuthorityGraphMismatch)?;
    let reply_object = registry
        .iter()
        .find(|endpoint| {
            endpoint.id == reply_cap_id
                && endpoint.is_reply_cap
                && endpoint.owner == caller_task
                && endpoint.reply_target == Some(endpoint_id)
        })
        .ok_or(TimedIpcCallCancelError::AuthorityGraphMismatch)?;
    if reply_object.owner != caller_task {
        return Err(TimedIpcCallCancelError::AuthorityGraphMismatch);
    }

    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    let s361_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s361_timed_ipc_call_cancel_writer_guard_integration::acquire_s361_production_scheduler_writer_access()
        .unwrap_or_else(|error| {
            panic!(
                "S361 timed IPC CALL-cancel scheduler writer guard failed closed: {:?}",
                error
            )
        });
    let scheduler = unsafe { &mut *core::ptr::addr_of_mut!(crate::task::scheduler::SCHEDULER) };
    let commit_result = (|| {
        let reply_authority = scheduler.capability_for_task(caller_task, reply_cap_id);
        // The SEND grant was exact at admission and its generation remains in
        // the immutable wait record. Revoking that grant after publication
        // does not resurrect or redirect the CALL: the globally unique target
        // object and linked one-shot reply record below remain authoritative.
        // Requiring the grant here would turn a legitimate post-admission
        // revoke into a kernel-wide timer failure.
        let _admission_endpoint_generation = endpoint_generation;
        let reply_authority = reply_authority
            .filter(|capability| {
                capability.id == reply_cap_id
                    && capability.owner == caller_task
                    && capability.generation == reply_generation
                    && capability.kind == CapabilityKind::Endpoint
                    && capability.parent.is_none()
            })
            .ok_or(TimedIpcCallCancelError::AuthorityGraphMismatch)?;
        let reply_model_is_exact =
            (0..registry[target_index].rendezvous.reply_capacity()).any(|slot| {
                registry[target_index]
                    .rendezvous
                    .reply_snapshot_at(slot)
                    .is_some_and(|reply| {
                        reply.caller_task == caller_task
                            && reply.reply_token == reply_cap_id
                            && reply.parked
                            && matches!(reply.state, ReplyState::Waiting)
                    })
            });
        let parked_graph_revalidation = if !reply_model_is_exact
            || scheduler.ipc_blocked_count_on(reply_cap_id) != 1
            || scheduler.ipc_blocked_task_count_on(caller_task, reply_cap_id, true) != 1
        {
            Err(TimedIpcCallCancelError::CallerNotParked)
        } else {
            Ok(())
        };
        parked_graph_revalidation?;
        let capacity_revalidation = if scheduler.ipc_wake_capacity_available(1) {
            Ok(())
        } else {
            Err(TimedIpcCallCancelError::WakeCapacityUnavailable)
        };
        capacity_revalidation?;

        let rendezvous = &mut registry[target_index].rendezvous;
        match rendezvous.cancel_call(caller_task, reply_cap_id) {
            Ok(CancelOutcome::Wake {
                caller_task: model_caller,
                reply_token,
            }) if model_caller == caller_task && reply_token == reply_cap_id => {}
            Ok(CancelOutcome::StoredBeforePark) | Ok(CancelOutcome::Wake { .. }) | Err(_) => {
                panic!("preflighted timed CALL cancellation changed inside one IPC transaction")
            }
        }
        let retire_witness = rendezvous
            .retire(caller_task, reply_cap_id)
            .expect("timed CALL cancellation must retire exactly once");
        assert_eq!(retire_witness.caller_task(), caller_task);
        assert_eq!(retire_witness.reply_token(), reply_cap_id);

        scheduler.wake_timed_out_ipc_caller_exact(caller_task, reply_authority);
        let reply_position = registry
            .iter()
            .position(|endpoint| {
                endpoint.id == reply_cap_id
                    && endpoint.is_reply_cap
                    && endpoint.owner == caller_task
                    && endpoint.reply_target == Some(endpoint_id)
            })
            .expect("preflighted timed reply object disappeared");
        let removed_reply = registry.remove(reply_position);
        assert_eq!(removed_reply.id, reply_cap_id);
        assert_eq!(
            store.revoke_endpoint_provenance(reply_cap_id, Some(caller_task)),
            1,
            "timed reply must have exactly one provenance record"
        );

        Ok::<TimedIpcCallCancellation, TimedIpcCallCancelError>(TimedIpcCallCancellation {
            caller_task,
            endpoint_id,
            reply_cap_id,
        })
    })();
    #[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
    drop(s361_writer_access);
    commit_result
}
snippet sha256: 225988b27157file sha256: 304e1227daf9
02 · Ortak exclusion üyeliği

S247 production writer guard

tam Rust öğesiL180–L192
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s361_timed_ipc_call_cancel_writer_guard_integration.rs::acquire_s361_production_scheduler_writer_access

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

Operations komutuna bağlı focused test

tam Rust öğesiL392–L403
simulation/tests/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s361_timed_ipc_call_cancel_writer_guard_integration.rs::boundary_has_exactly_one_s361_acquire_and_one_shared_cleanup_release

#[test]
fn boundary_has_exactly_one_s361_acquire_and_one_shared_cleanup_release() {
    let boundary = call_cancel_boundary();
    assert_eq!(
        boundary
            .matches("acquire_s361_production_scheduler_writer_access")
            .count(),
        1
    );
    assert_eq!(boundary.matches("drop(s361_writer_access)").count(), 1);
}
snippet sha256: cbc6f4e94168file sha256: 07f3a7df2032
04 · Kapı kimlik kaydı

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

tam Operations kaydıL11810–L11967
website/src/lib/operations.ts::g8l-s361-timed-ipc-call-cancel-writer-guard-integration-partial
  {
    id: "g8l-s361-timed-ipc-call-cancel-writer-guard-integration-partial",
    date: "2026-08-28",
    sequence: 361,
    status: "passed",
    umbrella_status: "partial",
    title: "S361 · Timed IPC CALL-cancel production writer guard integration",
    summary:
      "S361, cancel_timed_ipc_call_under_transaction içindeki exact deadline-bearing CALL cancellation transaction'ını S360 ile 44 production reader'ın kullandığı aynı statik S247 state word'e bağlar. Caller outer IPC transaction ve deadline-registry lock'unu zaten taşır. CALL kind, immutable caller/target/reply identity+generation değerleri, unique ordinary target endpoint, linked reply object ve exact reply provenance shape'i writer'dan önce kapanır. Gerçek per-CPU kimliğinden yalnız CPU0 için S361 exclusive writer exact tek mutable scheduler aliasından önce alınır. Reply CNode authority, rendezvous Waiting/parked reply ve scheduler blocked-task graph'ı lease altında yeniden doğrulanır; wake kapasitesi destructive commit'ten önce kontrol edilir. Exact cancel_call, reply retirement, timed-out caller wake, reply-object removal ve exact provenance revoke aynı writer membership'indedir. Writer owned commit_result dönüşünden önce explicit bırakılır. Guarded writer 34/69, açık writer 35, provider authority 0 ve whole-scheduler exclusion false'dur. Bir direct production source path vardır; supported-profile runtime observation=0'dır. Timed IPC RECEIVE cancellation S362 için ayrı açık kalır.",
    evidence: [
      "Focused S361 timed IPC CALL-cancel writer-integration kapısının production değişikliğinden önceki ilk koşusu 33/48 PASS ve 15 RED verdi. RED'ler S361 modül/registrasyonu, production wrapper, CPU1 service, exact boundary acquire, reply CNode+rendezvous+blocked graph+capacity revalidation, cancel/retire/wake/reply cleanup transaction'ı ve S362-open ayrımı henüz bulunmadığı için beklenen gerçek kaynak eksikleriydi; entegrasyon ve exact doküman düzeltmesi sonrası final sonuç 48/48 PASS, 1 grup / 48 passed / 0 failed oldu.",
      "Production entegrasyonundan sonraki ilk adayda exact timed-out caller wake dokümantasyon ifadesi fiziksel satır sarımı nedeniyle bir kaynak assertion'ını reddetti. İfade tek satırda korundu; product behavior, coverage veya eşik zayıflatılmadı. Taze final focused koşu 1 grup / 48 passed / 0 failed verdi.",
      "Kaynak sınırı WaitKindTag::Call → immutable caller/endpoint/reply ids+generations → capability-store ve endpoint-registry exact identity count → ordinary target ve linked reply shape → S361 CPU0-only writer → exact tek mutable SCHEDULER aliası → reply CNode authority → rendezvous Waiting/parked reply → blocked task graph → wake capacity → cancel_call → retire → timed-out caller wake → reply object remove → provenance revoke → writer drop → owned Result olarak kilitlidir.",
      "Public helper outer IPC transaction ve deadline-registry lock'unun caller tarafından zaten tutulduğunu sözleşmesine yazar. S361 bu iki lock'u nested edinmez; bu nedenle kapı yalnız mevcut deadline service transaction'ındaki scheduler mutation membership'ini ekler ve başka IPC yollarını topluca kapsamaz.",
      "Wait kind exact Call değilse NotCallWait döner. reply_cap_id veya reply_generation immutable wait record'dan çıkarılamazsa MissingReplyIdentity döner. Bu iki hata capability store, endpoint registry, S247 writer ve mutable scheduler aliasından önce kapanır.",
      "Caller task, ordinary endpoint id/generation ve linked reply id/generation wait record'dan owned scalar olarak çıkarılır. Writer lease'i bir WaitRecord referansı veya deadline lock ownership'i taşımaz; source-order testi immutable kimlik çıkarımının acquire'dan önce olduğunu doğrular.",
      "Endpoint registry target id ve reply id için ayrı ayrı identity_count=1 ister. Capability store'da reply id/kind=Endpoint provenance count'u da exact bir olmalıdır. Duplicate, missing veya wrong-kind identity AuthorityGraphMismatch ile writer edinilmeden reddedilir.",
      "Target lookup yalnız id eşleşen ve !is_reply_cap ordinary object'i kabul eder. Reply lookup id, is_reply_cap, owner==caller_task ve reply_target==Some(endpoint_id) tuple'ını exact ister. Reply owner ayrıca tekrar kontrol edilir; linked shape eksikse exclusive membership denenmez.",
      "Production wrapper exact target_arch=aarch64, target_os=none ve feature=board-rpi5 cfg kesişimindedir. Literal CPU0 kabul etmez; try_current_cpu_id ile gerçek kimliği okur, CPU0 dışını mutable pointer ve callback öncesi InvalidCpu ile kapatır ve exact S247_PRODUCTION_WHOLE_SCHEDULER_ACCESS_GATE üzerinde try_acquire_exclusive_for_valid_cpu kullanır.",
      "cancel_timed_ipc_call_under_transaction boundary'sinde exact bir acquire_s361 occurrence'ı, exact bir addr_of_mut!(SCHEDULER) aliası ve ortak tail'de exact bir drop(s361_writer_access) vardır. S360 ve S362 acquire sembolleri bu boundary'de yoktur; nested exclusive membership kurulmaz.",
      "Writer altındaki reply authority scheduler.capability_for_task(caller_task, reply_cap_id) ile alınır ve id, owner, reply_generation, Endpoint kind ve parent=None tuple'ıyla yeniden doğrulanır. Stale veya remint edilmiş reply authority destructive mutation'dan önce AuthorityGraphMismatch verir.",
      "Admission endpoint generation immutable wait record'da korunur. Admission sonrası caller SEND grant'inin revoke edilmiş olması canlı linked one-shot reply ile ordinary target object'i resurrect veya redirect etmez. S361 bu nedenle grant'in hâlâ CNode'da bulunmasını yanlışlıkla zorunlu kılmaz; exact reply graph cancellation authority'sidir.",
      "Rendezvous revalidation bütün reply slotlarını bounded tarar ve caller_task, reply_token, parked=true ile ReplyState::Waiting değerlerini aynı entry'de ister. Yalnız token veya yalnız caller eşleşmesi yeterli değildir; stale/reused reply record CallerNotParked ile kapanır.",
      "Scheduler blocked graph aynı lease altında ipc_blocked_count_on(reply_cap_id)==1 ve ipc_blocked_task_count_on(caller_task, reply_cap_id, true)==1 ister. Reply model kaydı ile scheduler graph ancak üç koşul birlikte exact ise destructive commit'e geçer.",
      "Wake capacity ipc_wake_capacity_available(1) ile cancel_call öncesinde doğrulanır. Kapasite yokluğu WakeCapacityUnavailable olarak owned commit_result'a alınır; rendezvous reply, retirement state, caller scheduler state, reply registry object'i ve provenance destructive mutation görmez.",
      "Rendezvous cancellation cancel_call(caller_task, reply_cap_id) exact CancelOutcome::Wake ve exact caller/token döndürmelidir. StoredBeforePark, farklı wake tuple'ı veya error; preflighted graph aynı outer IPC transaction altında drift ettiği için sessiz kısmi başarı değil fail-stop panic'tir.",
      "Cancellation'dan sonra retire(caller_task, reply_cap_id) exact once yürür. Retirement witness caller_task ve reply_token değerleriyle assert edilir. Missing veya ikinci retirement başarı sayılmaz; linked reply lifecycle tek kullanımlı kalır.",
      "Timed-out caller wake_timed_out_ipc_caller_exact(caller_task, reply_authority) ile writer lease hâlâ canlıyken uyandırılır. Generic endpoint wake veya best-effort task scan kullanılmaz; exact reply authority wake mutation'ına by-value taşınır.",
      "Wake sonrasında registry exact linked reply object position'ını aynı id/is_reply/owner/reply_target tuple'ıyla yeniden bulur, object'i kaldırır ve removed id'yi assert eder. Ordinary target object bu kapıda kaldırılmaz; endpoint-object teardown kapsamı genişletilmez.",
      "Capability store reply provenance'ı revoke_endpoint_provenance(reply_cap_id, Some(caller_task)) ile kaldırılır ve sonuç exact 1 olmak zorundadır. Zero veya duplicate provenance sessiz cleanup kabul edilmez; preflighted graph drift'i fail-stop'tur.",
      "Writer sonrası recoverable authority, parked-graph ve capacity hataları let commit_result=(|| { ... })() içinde owned edilir. Guarded dilimde doğrudan return Err yoktur. Success ve error tek görünür drop(s361_writer_access) tail'inden geçer; output exclusive scheduler üyeliğini taşımaz.",
      "Host-testable execute_s361_guarded_timed_ipc_call_cancel_commit gerçek CPU0 sabitini şart koşar. Non-CPU0, active reader veya active writer callback'ten önce fail-closed olur; callback error membership'i exact bırakır; success receipt nonzero token ve owned output döndürür; release sonrasında gate yeniden alınabilir.",
      "S360→S361 token monotonluğu ve iki ayrı exclusive transaction doğrulandı. Endpoint-grant revoke lease'i timed CALL cancellation'a taşınmaz. S361 preflight S360'ın 44 reader / 33 guarded writer / 36 open snapshot'ını exact doğrular ve yalnız doğru zincir 34/69 guarded, 35 open üretir.",
      "Pending S245 request yalnız non-consuming pending_view ile incelenir. request id değişmez, request take edilmez, S244 admission yayınlanmaz ve provider authority üretilmez. CPU1 service S360 service'inden sonra ve tarihsel S242 consumer'dan önce yalnız coverage/preflight observation olarak bağlıdır; S247 writer edinmez.",
      "S361 module constants timed CALL cancel, reply-authority revalidation, call cancel, reply retire, timed-out wake, reply-object remove ve provenance revoke için ayrı ayrı exact bir site kaydeder. Direct production source path=1, runtime observation=0 ve provider authority=0 sabitleri aynı outcome'da görünür.",
      "Focused 48-test sözleşmesi 34/69 envanter ile 35-open aritmetiği, idle/pending/wrong-CPU preflight, S245 non-consumption, contention, callback-error release, S360→S361 token ayrılığı, production cfg/static gate/CPU identity, source order, CALL-only kapsam, exact graph/commit/release ve provider/admission yokluğunu ayrı ayrı doğrular.",
      "İlk seçili regresyonda tarihsel S360 focused grup, tüm capability.rs içinde S361 sembolü yokluğunu isteyen artık geçersiz global absence assertion'ı nedeniyle 42/43 oldu. Assertion zayıflatılmadı: S360 boundary'sinin S361 acquire içermediği ve distinct timed-CALL boundary'sinin exact bir S361 acquire içerdiği birlikte kilitlendi.",
      "Final seçili regresyon 7 grup / 158/158 PASS'tir: S361 48/48, S360 43/43, tarihsel S284 timed CALL cancel audit 15/15, S287 endpoint teardown audit 15/15, IPC CALL deadline runtime 10/10, deadline saturation runtime 9/9 ve IPC queue source 18/18.",
      "Fresh izole AArch64 profilleri 4/4 exit 0 verdi. Build logları board-qemu 110778 B / cb0907f7ca79efae3b10fca72ccdc4327059beef853037f528e6861977a580a7 / 292 warning header; board-rpi4 149519 B / 5654be7e70ed2712534169529aebe6eb712dbef23dd834a917b6731035b67b85 / 390; board-rpi5 582758 B / d48cbac60fec7355c09f2786c4ced5132ecef04e1ae475fbd6be2d34a0df3893 / 1317 ve board-rpi5+smp 582700 B / 44d9dd2e0ed77fae9c74a9c6c09841c97805b231b4e75c47b6d64a9ee03802ef / 1317'dir. Zero-warning iddiası yoktur.",
      "Build log ölçüsü ELF ölçüsü gibi sunulmaz. Fresh ELF artifact'leri board-qemu 12618400 B / bcc099c86ccb321d155941f20ec33d5d96a8f452dbe3fd87a5089bf2bec3edc4; board-rpi4 7728288 B / 03c05d8967620778304795f979d766bf6ec583efab2647405e0b2f5ced67fd22; board-rpi5 13606936 B / 39c4591bf4475d5914c9e6b58b830e0a9ae171aed0364282d5885294dd2099b0 ve board-rpi5+smp 13588208 B / 4e5ab01985fd869f9795d9200f48a73e2f2fae6e8118ca3f6b15fa2e50294d39 olarak ayrı ölçüldü.",
      "S238–S361 dependency matrisi 125 gruptur ve iki bağımsız seri koşunun her biri 2425/2425 PASS verdi. 29198 B ham özetler 10a25682c7a514b820793e312560e8a2b4e4bcb9e7dd0be38f283115a6709a09 / 6adfa5aee014ba5c252c30cbad2b20216af695e30bfdb145ea63eb3a658ce28d; 70 diff satırı timing alanıdır. 29448 B normalize özetler f63c81910cde11c163b7cc56022e323e6668d038efb94489289954b519e500cd ile byte-eşittir.",
      "Exact yedi tarihsel frozen assertion dışındaki seri workspace 324 sonuç grubu / 4277 PASS / 0 fail / 7 filtered verdi; 70273 B log SHA-256 0371aa7f161e04b049ed5ac6f92c09cc752d3b7f3be5512d4e39afad41d46327'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; 277 sonuç grubunda 4022 PASS / 1 fail, 65495 B log SHA-256 1343027af8917f79feab32fb56759672c226bfcb03fc76e02a7666b9251e5d14'tür ve global workspace GREEN iddia edilmez.",
      "make verify-qemu 116354 B / bc1f2bfa8fb60fcc8e12641af3d9633cba6c929960859baf30b1dbbfc6e15f1f ile strict ELF W^X 31/31, S130–S154, S271, RuntimePmm baseline, EL0x4096, IPC reply 20/20, scheduler SEC5 ve kernel fault/panic marker 0 PASS verdi. Ortak board-qemu regresyonu S361 RPi5 production writer invocation kanıtı değildir.",
      "Scoped S361 modül/test rustfmt check'i exit 0 ve boş çıktılı PASS'tir; empty SHA-256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'tir. Seçili changed-file diff check de boş çıktı verdi. Global cargo fmt 85917 B / 47d6e731b1a34145f6f83483c4b58fcca562ae97e5f439c8178bbd7da91216ba ile miras farklarda RED'dir; global format GREEN iddia edilmez.",
      "Source-order testi yalnız sembol occurrence saymaz. CALL kind'in store/registry'den; identity/shape'in writer'dan; writer'ın mutable alias ve reply CNode revalidation'dan; CNode'un rendezvous+blocked graph'tan; graph'ın capacity'den; capacity'nin cancel/retire/wake/remove/revoke zincirinden; zincirin writer drop'tan ve drop'ın public output'tan önce olduğunu ayrı index karşılaştırmalarıyla kilitler.",
      "Authority graph capability store, endpoint registry, rendezvous table ve scheduler blocked/CNode state'ini tek outer transaction'da bağlar. Store/registry shape writer öncesi sabitlenir; scheduler authority ve graph writer altında yeniden doğrulanır. Bu iki aşama stale reply capability'nin yanlış caller wake veya yanlış reply object teardown'a dönüşmesini engeller.",
      "CALL cancellation S284 tarihsel writer-authority audit'inin production tekrar adı değildir. S284 model-level exclusive lease olanağını ve source ordering'i saymıştı; production static wrapper ve gerçek cancel_timed_ipc_call_under_transaction acquire değildi. S361 aynı shared S247 state word'ü exact boundary'ye bağlar ve runtime observation uydurmaz.",
      "S360 endpoint-grant revoke ile S361 timed CALL cancellation semantik olarak ayrıdır. S360 ordinary endpoint derived grant/CNode/optional receiver cancel-wake transaction'ını 33. writer yapar; S361 linked reply CNode/rendezvous/blocked caller/timeout teardown transaction'ını 34. writer yapar. Token, boundary ve cleanup scope birbirine taşınmaz.",
      "S362 timed RECEIVE cancellation ayrı source boundary'dir. S361 boundary'si TimedIpcReceiveCancelError tanımından önce biter ve acquire_s362 sembolü taşımaz. Receiver wait, endpoint receive authority, timed receiver wake ve bunların cleanup'ı S361 PASS kapsamına sokulmaz.",
      "Reply object cleanup ordinary target endpoint'i yok etmez, başka endpoint holder'larını purge etmez ve notification graph'a dokunmaz. S361 yalnız preflighted linked one-shot reply object/provenance'ı exact caller timeout transaction'ında retire eder; endpoint-object teardown ve notification lifecycle kapıları tarihsel olarak ayrı kalır.",
      "Release topolojisi writer öncesi ve writer sonrası hata ailelerini ayırır. Kind/identity/shape hataları exclusive lease alınmadan normal return eder. Writer altındaki authority/graph/capacity hataları owned commit_result üzerinden ortak explicit release tail'ine girer. Preflight sonrası impossible cancellation/retire/object/provenance drift'i ise fail-stop invariant'tır.",
      "S361 modülü ProviderAuthority, request take veya S244 publisher sembolü taşımaz. CPU1 coverage service exact pending request view'ini yalnız okur. 34/69 coverage bütün scheduler exclusion, provider constructor, cross-CPU admission veya safe migration runtime ispatı değildir.",
      "Fresh build artifact root'u /tmp/aselsanos-s361-final-builds.zUyUvf; dependency, workspace, QEMU ve format artifact dizinleri sırasıyla /tmp/aselsanos-s361-final-dependency.Gm8le2, /tmp/aselsanos-s361-final-workspace.IOdgrS, /tmp/aselsanos-s361-final-qemu-verify.wOyvHC ve /tmp/aselsanos-s361-format.dlqyx8 olarak kaydedildi. Geçici path'ler kalıcı proof/status kaydının yerine geçmez.",
      "Status manifest S361'i ayrı g8l_s361_timed_ipc_call_cancel_writer_guard_integration nesnesi ve ayrı gate marker'ıyla kaydeder. JSON parse, generated status README write/check ve 244/244 project-status testi PASS'tir. Physical operations_not_performed_s361 listesi exact yedi girdidir; publication tamamlanmadan publication PASS yazılmaz.",
      "Source-bound Kod generator sequence=361 Operations identity'sini production cancel_timed_ipc_call_under_transaction acquire satırı, exact S361 S247 guard wrapper'ı ve focused test ile eşler. Dört excerpt satır aralığı, snippet SHA-256 ve tam dosya SHA-256 taşır; source/Operations drift'i generated registry check, site test, build ve deploy'u fail-closed durdurur.",
      "S361'in ilk production yayın snapshot'ında generator S1–S361 aralığındaki gerçek Operations sequence'lerini taradı ve o tarihte Operations kaydı bulunmayan S109'u missing gösterdi; sahte production/test kodu üretmedi. Sonraki S109 katalog düzeltmesi Timeline'daki mantıksal storage kimliğini S119 kapanışı ve exact Make hedefiyle yayımlar; bu tarihsel S361 deployment sayıları değiştirilmez.",
      "S361 çekirdek ve ilk yayın-öncesi web kabulü 601/601 website test, lint, boş çıktılı TypeScript ve 24/24 static route build PASS verdi. Export 200 dosyadır; Timeline ile yol-haritasi S361 dahil 200 ayrı data-gate-policy kartı, /code/ ise S109 boşluğunu uydurmadan 360 data-code-gate kartı taşır. Yayın kanıtı eklenmeden önce S361 core policy 20828 karakter / 21579 UTF-8 byte ölçüldü; S360'ın 19776 karakterlik yayın-öncesi yoğunluk tabanından kısa değildir.",
      "S361'i ve S1–S361 source-bound Kod kataloğunu taşıyan ilk Cloudflare Pages production/main yayını b5daf26f-9867-4c03-9358-55e2b32eb208 kimliğiyle 116 upload + 84 existing = 200 export dosyası olarak tamamlandı. İlk deployment registry'si 360 published gate / 1005 exact source excerpt / missing only S109 ve SHA-256 64964c443523082ba871ff7afc3ab8c067898f12e627366c276a13a7501c3456 değerindedir.",
      "b5daf26f-9867-4c03-9358-55e2b32eb208 yayınının ilk cache-busted custom-domain doğrulaması deployment build'in güncel yerel out dosyalarıyla dört rotada HTTP 200 ve byte-exact PASS verdi: /code/ 9148410 B / 147decc7043d728ef57bc7218a9e5d1db6235c4abd98998a36bbb4751744ca7a; /operations/ 11780845 B / 388dabeaacd29f455a2f88321c6ecd05e78641608803fe7a9557a47dfbc4c59e; /timeline/ 3877323 B / df28441221e7206ddf0a29ffb871e592758367bbc2762fdf4061ca97191a0a58 ve /yol-haritasi/ 3877071 B / 8ca46ab0f21f9207abb744996bd1faaea0c7c648769a626e34a87a5a3fa161af. Immutable b5daf26f hostname probe'u connection reset nedeniyle curl exit 35 / HTTP 000 verdi; custom-domain PASS bu erişim sınırını gizlemez.",
      "Direct production source path=1 sayısı public API sayısı değildir. Deadline service CALL kind'i seçtikten sonra exact bir cancel_timed_ipc_call_under_transaction çağrısına gelir; helper içindeki S361 acquisition tek production membership'tir. Test, modül wrapper'ı ve CPU1 coverage service bu sayıya invocation olarak eklenmez. Böylece static wiring envanteri runtime telemetry veya call-frequency metriği gibi sunulmaz.",
      "Deadline lock ile endpoint registry lock'un yaşamları scheduler writer'dan daha geniştir; bu durum bilinçli outer transaction sözleşmesidir. S361 writer yalnız mutable scheduler ile aynı logical CALL cancellation commit'ine katılan rendezvous/reply cleanup aralığını kapatır. Lock ordering'i yeniden düzenlemez, yeni allocation yapmaz ve timer IRQ başına servis bütçesini değiştirmez; bu nedenle deadlock/liveness ürün garantisi de çıkarılmaz.",
      "CALL timeout sonucu caller'a generic InvalidCapability veya endpoint-close wake olarak dönmez. Exact helper, preflighted reply authority ile wake_timed_out_ipc_caller_exact çağrısını kullanır; deadline runtime testleri timed-out continuation semantiğini korur. S361 yeni ABI, syscall numarası, userspace message layout veya deadline ordering policy'si eklemez.",
      "Reply CNode authority ile capability-store provenance farklı ledger'lardır. CNode entry scheduler içindeki task authority'sini, store provenance linked object yaşam döngüsünü temsil eder. CNode revalidation destructive commit'ten önce yapılır; provenance revoke ise reply object kaldırıldıktan sonra exact bir count ile kapanır. Birindeki başarı diğerindeki drift'i örtmez.",
      "Rendezvous cancel ve retire aynı target endpoint object içindeki linked reply slotuna uygulanır. cancel_call wake witness'i üretmeden retire çağrılmaz; retire witness'i doğrulanmadan scheduler wake başlamaz. Bu sıra, caller'ı uyandırıp reply'ı canlı bırakma veya reply'ı silip caller'ı BlockedOnIpc durumunda bırakma yarım commit'lerini fail-closed kılar.",
      "Focused source testi module/service registration'ını kernel main, simulation lib ve CPU1 exceptions chain'de ayrı ayrı arar. Service sırasının S360'tan sonra, S242 consumer'dan önce olduğunu; boundary'nin TimedIpcReceiveCancelError öncesinde bittiğini; acquisition wrapper'ın board-rpi5 cfg ve real CPU identity kullandığını; outcome'un exact site sayıları taşıdığını birbirinden bağımsız assertion'larla doğrular.",
      "Kronolojik dependency listesi yalnız dosya adını lexical sıralamaz. Tarihsel target-name drift'leri explicit manifest mapping'leriyle korunur, S361 focused target exact son elemana eklenir ve iki koşunun timing alanları normalize edildikten sonra byte-eşit olması istenir. Böylece 2425 PASS toplamı önceki 124 kapıyı sessizce atlayan seçme bir subset değildir.",
      "Filtered workspace kabulü yedi frozen assertion'ın adını exact sabitler; yeni S361 veya IPC testleri bu filtreye eklenmez. Filtresiz ilk failure'ın S96 source identity olması S361'i global GREEN yapmaz. Aynı dürüst ayrım global rustfmt için de geçerlidir: yeni modül/test mekanik formatı PASS iken repository genelindeki miras farklar açıkça RED tutulur.",
      "S361 için güç, SD kart, Mac kart erişimi, UART capture, raw validation, archive veya promotion işlemi yapılmadı: physical/device operations=0 ve RUNBOOK_EXECUTED_IN_S361=NO.",
      "S361 bazlı bağlayıcı olmayan planlama görünümü R1 S361–S391, R2 S416–S466, R3 S545+, kaba S521–S571 ve risk paylı merkez ≈S546'dır. Bu projeksiyon yeni sıra veya ürün taahhüdü oluşturmaz.",
    ],
    commands: [
      "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s361_timed_ipc_call_cancel_writer_guard_integration -- --test-threads=1",
      "run S361, S360, S284, S287, ipc-call-deadline-runtime, ipc-deadline-saturation-runtime and ipc-queue-source groups serially",
      "run four fresh AArch64 profile builds; run S238-S361 dependency list twice; run filtered and unfiltered serial workspace audits; make verify-qemu",
      "python3 scripts/render-project-status.py --write; python3 scripts/render-project-status.py --check; cargo test -p aselsan_microkernel_simulation --test project_status_manifest -- --test-threads=1",
      "npm run code:generate; npm test; npm run lint; npx tsc --noEmit; npm run build; npm run deploy; cache-busted curl + cmp for four custom-domain routes",
    ],
    terminalSessions: [
      {
        id: "g8l-s361-focused-source-contract",
        title: "S361 focused timed IPC CALL-cancel writer membership",
        commandLines: [
          "cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s361_timed_ipc_call_cancel_writer_guard_integration -- --test-threads=1",
        ],
        outputLines: [
          "initial test result: RED; S361 focused 33 passed; 15 failed; production module/boundary/service not yet wired",
          "first integrated result: 47 passed; 1 failed; exact timed-out caller wake documentation phrase wrapped",
          "final test result: ok; S361 focused 1 group / 48 passed; 0 failed",
          "shared S247 gate: 44 guarded readers + 34/69 guarded writers; 35 writers open",
          "CALL/identity/object shape < S361 writer < reply CNode/rendezvous/blocked graph/capacity < cancel/retire/wake/reply cleanup < writer/output release",
          "static source paths=1; supported-profile runtime observations=0; provider authority=0",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s361-selected-call-cancel-regression",
        title: "S361 selected timed CALL cancellation regression",
        commandLines: [
          "run S361, S360, S284, S287 and three IPC deadline/queue groups serially",
        ],
        outputLines: [
          "initial historical assertion: S360 42/43 RED on obsolete global S361 absence",
          "preserved S360 boundary absence and bound exact one S361 acquire to the separate timed CALL boundary",
          "final result: 7 groups / 158 passed / 0 failed",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s361-core-acceptance",
        title: "S361 four-profile, dependency, workspace and QEMU acceptance",
        commandLines: [
          "run four fresh AArch64 profile builds",
          "run S238-S361 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 125 groups / 2425/2425 twice; normalized 29448-byte summaries are SHA-256 identical",
          "filtered workspace 324 groups / 4277 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 S361 runtime observation",
          "status JSON + renderer write/check + project-status 244/244 PASS",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8l-s361-source-bound-code-and-first-production-publication",
        title: "S1–S361 Code registry and S361 first 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: [
          "code registry S1-S361: 360 published gates / 1005 exact source excerpts / missing only S109",
          "website 601/601 PASS; lint PASS; TypeScript exit 0 with empty output; static routes 24/24",
          "export files=200; Timeline/yol-haritasi gate cards=200; /code/ cards=360; pre-publication S361 core policy=20828 chars / 21579 bytes",
          "deployment b5daf26f-9867-4c03-9358-55e2b32eb208; 116 upload + 84 existing",
          "custom-domain four routes HTTP 200 and byte-exact=true; immutable hostname curl exit 35 / HTTP 000",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
    ],
    terminalSessionsNote:
      "Terminal kartları komut ile tam karar özetini ayrı gösterir; raw test/build günlüklerinin byte/hash kimlikleri kalıcı proof ve status manifestinde tutulur. Ortak QEMU sonucu S361 RPi5 runtime invocation veya fiziksel kabul olarak yükseltilmez. İlk production publication byte-exact kapanmıştır; final-evidence deployment kimliği status/proof amendment'ında ayrıca tutulur.",
    limitations: [
      "S361 otuz dördüncü production writer'ın dar kaynak entegrasyonudur. Yalnız exact timed IPC CALL reply/caller timeout teardown transaction'ı guarded'dır; S362 timed IPC RECEIVE cancellation ayrı kalır.",
      "Production provider authority ve whole-scheduler exclusion tamamlanmadı; S245 request tüketilmez ve S244 admission yayınlanmaz.",
      "Tek static source path wiring envanteridir; S361-specific supported-profile invocation/observation kanıtı yoktur.",
      "Kalan 35 production writer, global rustfmt, frozen-S96 filtresiz workspace, default-parallel PTY determinism, transient-contention liveness/soak, Generic SMP ve fiziksel kabul açıktır.",
      "physical/device operations=0 · RUNBOOK_EXECUTED_IN_S361=NO.",
    ],
  },
snippet sha256: e50150cde00efile sha256: 9726dbf00f84
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s361_timed_ipc_call_cancel_writer_guard_integration -- --test-threads=1
proof: docs/M8.1-RPi5-G8l-S361-Timed-IPC-Call-Cancel-Writer-Guard-Integration-Proof.md
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9