S355 · SOURCE-BOUND GATE EVIDENCE
S355 · Kernel-task spawn production writer guard integration
production acquire → S247 guard modülü → Operations-bound focused test Bu sayfa yalnız S355 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.
S355Production writer guardOperations id exactsource SHA exacttest target exact
operation: g8l-s355-kernel-task-spawn-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 öğesiL4733–L4795
kernel/src/task/scheduler.rs::spawn_kernel_task
/// Yeni kernel task oluşturur ve JoinHandle döndürür.
///
/// IRQ maskelidir — spawn queue'ya push yaparken timer IRQ yarı-yazılmış
/// state üzerinde scheduler'a girmemeli.
pub unsafe fn spawn_kernel_task(
name: &str,
entry: extern "C" fn() -> !,
stack_size: usize,
priority: u8,
time_slice: u32,
) -> JoinHandle {
let s355_irq_guard = crate::arch::aarch64::IrqGuard::new();
// S255 returns an owned scalar and drops its reader before private task
// preparation. No mutable scheduler alias exists while task id, shared
// root, kernel stack, Task/context fields, or JoinHandle are constructed.
let initial_vruntime = Scheduler::min_vruntime().saturating_sub(20);
let (task, handle) = Scheduler::build_unpublished_task(
name,
entry,
stack_size,
priority,
time_slice,
false,
None,
0,
initial_vruntime,
)
.unwrap_or_else(|error| {
panic!(
"kernel task spawn preparation failed before publication: {:?}",
error
)
});
let task_id = task.id;
// Exact S355 publication boundary: private preparation has completed;
// this CPU0-only lease covers the sole mutable alias and queue push.
#[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
let s355_writer_access = crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s355_kernel_task_spawn_writer_guard_integration::acquire_s355_production_scheduler_writer_access()
.unwrap_or_else(|error| {
panic!(
"S355 kernel-task spawn writer guard failed closed: {:?}",
error
)
});
let sched = &mut *core::ptr::addr_of_mut!(SCHEDULER);
sched.ready_queue.push(PriorityTask::new(Box::new(task)));
#[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
drop(s355_writer_access);
drop(s355_irq_guard);
crate::kprintln!(
"[Scheduler] Task #{} '{}' (prio={}, slice={}, user={}) spawn edildi",
task_id,
name,
priority,
time_slice,
false
);
handle
}snippet sha256: 7b850fe2b413…file sha256: 838dd474448c…
02 · Ortak exclusion üyeliği
S247 production writer guard
tam Rust öğesiL157–L169
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s355_kernel_task_spawn_writer_guard_integration.rs::acquire_s355_production_scheduler_writer_access
#[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
pub fn acquire_s355_production_scheduler_writer_access(
) -> Result<G8lS355ProductionSchedulerWriterAccess, 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(G8lS355ProductionSchedulerWriterAccess { _access: access })
}snippet sha256: 489e78c2e2d7…file sha256: e01435a6ef02…
03 · Doğrulayan test kodu
Operations komutuna bağlı focused test
tam Rust öğesiL367–L376
simulation/tests/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s355_kernel_task_spawn_writer_guard_integration.rs::kernel_spawn_boundary_has_exactly_one_s355_acquire
#[test]
fn kernel_spawn_boundary_has_exactly_one_s355_acquire() {
assert_eq!(
kernel_spawn_boundary()
.matches("acquire_s355_production_scheduler_writer_access")
.count(),
1
);
}snippet sha256: 367828d8d1da…file sha256: 0a01b3143c46…
04 · Kapı kimlik kaydı
Operations sıra, kimlik ve başlık bağı
tam Operations kaydıL12627–L12722
website/src/lib/operations.ts::g8l-s355-kernel-task-spawn-writer-guard-integration-partial
{
id: "g8l-s355-kernel-task-spawn-writer-guard-integration-partial",
date: "2026-08-28",
sequence: 355,
status: "passed",
umbrella_status: "partial",
title: "S355 · Kernel-task spawn production writer guard integration",
summary:
"S355, spawn_kernel_task içindeki exact tek ready-queue publication mutation'ını S354 ve 44 production reader'ın kullandığı aynı statik S247 state word'e bağlar. S355 IrqGuard, S255 min_vruntime owned scalar snapshot'ı, task-id reservation, canlı shared kernel-root snapshot'ı, kernel stack allocation, complete Ready kernel Task/context ve JoinHandle ownership writer alınmadan private builder içinde tamamlanır. Yalnız ardından gerçek CPU0 kimliğiyle exclusive S355 writer alınır, exact tek mutable SCHEDULER aliası kurulur ve ready_queue.push bir kez yapılır. Writer, ardından IRQ guard tarihsel spawn diagnostic'i ve handle dönüşünden önce explicit bırakılır. Eski unguarded Scheduler::spawn publication yolu kaldırılmıştır. Guarded writer 28/69, açık writer 41, provider authority 0 ve whole-scheduler exclusion false'dur. main.rs içindeki 18 direct callsite tek wrapper publication'ında birleşir; RPi5-only wrapper supported-profile runtime observation=0'dır. QEMU initial-argument mutation sınırı S356 için ayrı açık kalır.",
evidence: [
"Focused S355 kernel-task spawn writer-integration kapısının ilk koşusu 28/47 oldu. On dokuz RED gerçek production sınırının henüz kaynakta bağlı olmamasını gösterdi: S355 acquire/alias/push/release sırası yoktu, eski Scheduler::spawn publication yolu duruyordu ve private kernel-task hazırlığı ayrı değildi. Refactor sonrası callback-error re-acquire testi yalnız CPU rolü yanlış model API'sinden aynı CPU0 S355 helper'ına taşındı; ürün kodu, coverage veya exclusion assertion'ı zayıflatılmadı. Taze koşu 47/47 PASS verdi.",
"İlk seçili regresyonda S354 tarihsel testi S355 publication'ının hâlâ açık olmasını istediği için 40/42 oldu. İki assertion tarihsel snapshot ile güncel distinct transaction'ı ayıracak biçimde güçlendirildi: S354 kapanışında 27/69 ve 42 open korunur; S355 eski Scheduler::spawn yolunu kaldırır ve wrapper içinde exact acquire→alias→push→release kurar. task_lifecycle_source ile task_spawn_asid_source da kaldırılan gövde yerine private builder ve S355 wrapper sınırını ayrı doğrular. Final seçili regresyon 9 grup / 197/197 PASS'tir: S355 47/47, S354 42/42, S353 40/40, S352 39/39, S255 11/11, ELF loader 7/7, task lifecycle 5/5, task publication 2/2 ve task spawn ASID 4/4.",
"Production kaynak sırası S355 IrqGuard → S255 min_vruntime owned scalar ve saturating_sub(20) → scheduler referansı almayan build_unpublished_task(false, None, 0, initial_vruntime) → task-id/root/kernel-stack allocation → complete shared-root/ASID0 kernel Task ve TaskContext → JoinHandle → owned task_id diagnostic snapshot → CPU0-only S355 writer → exact tek mutable scheduler aliası → exact tek ready_queue.push → writer drop → IRQ drop → tarihsel diagnostic → handle olarak kaynak-kilitlidir.",
"Scheduler::build_unpublished_task artık &self veya &mut self almayan associated builder'dır. Kernel yolunda permanent task-id reservation, canlı ROOT_PAGE_TABLE snapshot'ı, shared kernel root, ASID=0, owned kernel stack, no-user-stack alanları, Ready state, priority/time-slice, finished authority, empty CNode, address_space_quiesced=true ve TaskContext::new(kernel_entry, stack_top) private Task üzerinde tamamlanır; builder SCHEDULER referansı veya ready_queue publication içermez.",
"Writer scope'unda fallible `?;` veya `)?` yolu, early Err, allocation, task/context construction, diagnostics, context switch, queue pop ya da ikinci publication yoktur. Exact bir S355 acquire, bir addr_of_mut!(SCHEDULER), bir ready_queue.push ve bir explicit writer drop vardır. Task id diagnostic için writer'dan önce owned scalar'a alınır ve diagnostic yalnız writer→IRQ release sırasından sonra çalışır.",
"Aynı S247 state word üzerinde CPU0-only membership, bütün non-CPU0 kimliklerinin callback öncesi rejection'ı, reader→writer, writer→reader ve writer→writer exclusion, callback-error sonrası exact release/reacquire ve S354→S355 token monotonluğu doğrulandı. S354 ve S355 aynı lease'i paylaşmaz; iki distinct exclusive transaction'dır.",
"S355 preflight önce S354'ün 44 guarded reader / 27 guarded writer / 42 open envanterini exact doğrular; yalnız sonra 28/69 guarded writer ve 41 open sonucu üretir. Inventory drift fail-closed reddedilir. Pending S245 request yalnız pending_view ile non-consuming incelenir; take edilmez, request id değişmez, S244 admission veya provider authority üretilmez.",
"Eski public Scheduler::spawn publication gövdesi kaynakta kaldırıldı. main.rs içindeki exact 18 spawn_kernel_task direct callsite tek public wrapper'a ulaşır ve wrapper exact tek queue publication taşır. Production S355 wrapper exact AArch64 none + board-rpi5 cfg altındadır; source wiring supported-profile invocation, runtime telemetry veya fiziksel kabul değildir ve runtime observations=0'dır.",
"Fresh izole AArch64 profilleri 4/4 exit 0 verdi. Build logları: board-qemu 111883 B / e426ce5bdcdc95060bc1f919281d978187627ea108a8ddf709d5b2622ec1ab50 / 293 warning header; board-rpi4 150780 B / 35127acd460a0fa09187d907656005f97e2032b3f813bfda7a59b79dcf8da502 / 391; board-rpi5 568638 B / 4ad092cd3db4a49d6adace990883c9a71e005acbe0030a8f22573a53b5ce1c67 / 1278; board-rpi5+smp 568476 B / e5f9c64d4581f75dbc75ce4790f0c5f61ba8884704613fbf927bdc3287fc2616 / 1278. Zero-warning iddiası yoktur.",
"Build log ölçüsü ELF ölçüsü gibi sunulmaz. Fresh ELF artifact'leri ayrıca board-qemu 17312600 B / 79f5e9e4532983915252972ab12e5cfaa8b9791f3e9eeca5957ba46b0b7e0f09; board-rpi4 12324384 B / 8e12e733bdc7089494f84a99f33a6ee0b4e64da46fa2d901bbea63028f26edb7; board-rpi5 17768800 B / a51515e2d60e4b2566a1bb5dc81c1b4b07aba78df5fe2cea7c2e4d0008d500af ve board-rpi5+smp 17771560 B / 4c939cf1090152def0577f736d3cba795574d22f5cd786c7e0b77d1afa05dd9c olarak ölçüldü.",
"S238–S355 dependency matrisi S354'ün exact 118 hedeflik listesine yalnız S355 eklenerek iki bağımsız seri koşuda 119 grup / 2147/2147 PASS verdi. Ham özetler 27904 B ve 54bd5218c3f89750a585164c1fc2347a1d45ea8eb395b50f33122a162165c8b0 / 1c5f5834b4ffbd69eb4a9d58a71d5a322eb5a89c944e0fc2cbd2bd4501bf5ec6; timing alanları nedeniyle 62 diff satırı vardır. 28023 B normalize özetler b7413c60edf8ecddc0897db583cd341f1c4e71fc340ae1e26bf3ecd4e02bc583 ile byte-eşittir.",
"Exact yedi tarihsel frozen assertion dışındaki seri workspace 317 sonuç grubu / 3990 PASS / 0 fail / 7 filtered verdi; 68842 B log SHA-256 3aca9a095bd27ee5cb7a8c1f79f33867124a5821a9f51077ad811f5a4e0a6b1c'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; 270 sonuç grubunda 3735 PASS / 1 fail, 64064 B log SHA-256 38e1a01f82bf859f6aac0a2c869a2e2470439a1d660c5b6ad998c797f3c96f85'tir ve global workspace GREEN iddia edilmez.",
"make verify-qemu 114881 B / 938356915097a62ea5067c1a1963d8c21889a6459826c60d8a1bec3ba78cd25e ile strict ELF W^X 31/31, S130–S154 Runtime-OOM/deadline zinciri, IPC reply 20/20, scheduler SEC5 ve kernel fault/panic marker 0 PASS verdi. RPi5-only S355 writer bu board-qemu koşusunda runtime-observed değildir.",
"S355 scoped rustfmt --check boş çıktılı PASS'tir. Global cargo fmt 59837 B / b349b2d131288e4c6056f564e6b8b03defd369650a205c118ff24b72328d8a45 ile miras S345+ ve manifest farklarında RED'dir; global format GREEN iddia edilmez.",
"S355 web/publication kabulü ayrı transaction'da tamamlandı. Website 566/566 test, lint, boş çıktılı TypeScript ve 23/23 static route build PASS verdi. Export 194 dosyadır; Timeline ve yol-haritasi S355 dahil 194 ayrı data-gate-policy kartı taşır. S355 promotion policy 9558 karakterdir ve 1573 karakterlik S324 yoğunluk tabanının üstündedir.",
"İlk Cloudflare Pages production/main içerik yayını 42ed8a43-067a-4666-a7a8-8e511df34033 kimliğiyle 110 upload + 84 existing = 194 dosya olarak tamamlandı. Cache-busted custom-domain doğrulamasında Operations HTTP 200 / 11187515 B / d5ea416a0de6e8809744d43e36f6620efc1b5e082c8ddffc87c677adb9c766ac, Timeline HTTP 200 / 3293818 B / 1f66f3b6f2c2dfd765c24b031d8bab71d1dd84636a494839dd320f12b2b30f47 ve yol-haritasi HTTP 200 / 3293566 B / 2ebd1af86a52cfdd2e9d1f425ec1a29f5f7dbd0508aa796abf36986d7688a11b ile ilgili yerel out dosyasına byte-exact PASS verdi. Immutable 42ed8a43 deployment hostname probe'u 10 saniyede curl exit 28 / HTTP 000 verdi; custom-domain PASS bu erişim sınırını gizlemez.",
"S355 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_S355=NO.",
"S355 bazlı bağlayıcı olmayan planlama görünümü R1 S355–S385, R2 S410–S460, R3 S539+, kaba S515–S565 ve risk paylı merkez ≈S540'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_s355_kernel_task_spawn_writer_guard_integration -- --test-threads=1",
"cargo build -p aselsan_kernel --target aarch64-unknown-none --no-default-features --features board-rpi5",
"cargo build -p aselsan_kernel --target aarch64-unknown-none --no-default-features --features board-rpi5,smp",
"make verify-qemu",
"npm test && npm run lint && npx tsc --noEmit && npm run build && npm run deploy",
],
terminalSessions: [
{
id: "g8l-s355-focused-kernel-task-spawn-writer-guard",
title: "S355 focused kernel-task spawn writer membership",
commandLines: [
"cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s355_kernel_task_spawn_writer_guard_integration -- --test-threads=1",
],
outputLines: [
"initial test result: RED; S355 focused 28 passed; 19 failed; production boundary not yet wired",
"final test result: ok; S355 focused 1 group / 47 passed; 0 failed",
"shared S247 gate: 44 guarded readers + 28/69 guarded writers; 41 writers open",
"S355 IRQ < S255 snapshot < private Task/context/JoinHandle build < S355 writer < one alias < one ready_queue.push < writer/IRQ release",
"production direct callsites=18; RPi5 runtime observations=0; provider authority=0",
],
exitCode: 0,
outputMode: "complete",
},
{
id: "g8l-s355-selected-regression",
title: "S355 selected task-publication regression",
commandLines: [
"run S355, S354, S353, S352, S255, elf_loader_source, task_lifecycle_source, task_publication_source and task_spawn_asid_source serially",
],
outputLines: [
"initial historical assertions: S354 40/42 RED; obsolete open-boundary expectations",
"strengthened contracts: historical S354 snapshot + distinct S355 wrapper transaction; legacy Scheduler::spawn absent",
"final result: 9 groups / 197 passed / 0 failed",
],
exitCode: 0,
outputMode: "complete",
},
{
id: "g8l-s355-production-publication",
title: "S355 Operations/Timeline/phone production publication",
commandLines: [
"npm test && npm run lint && npx tsc --noEmit && npm run build",
"npm run deploy",
"cache-busted curl + cmp for /operations/, /timeline/ and /yol-haritasi/",
],
outputLines: [
"website tests 566/566 PASS; lint PASS; TypeScript exit 0 with empty output; static routes 23/23",
"export files=194; Timeline/yol-haritasi gate cards=194; S355 policy=9558 chars",
"initial deployment=42ed8a43-067a-4666-a7a8-8e511df34033; uploaded=110; existing=84",
"custom domain: three routes HTTP 200 and byte-exact=true",
"immutable deployment hostname: curl exit 28 / HTTP 000 after 10 seconds",
],
exitCode: 0,
outputMode: "complete",
},
],
terminalSessionsNote:
"S355 yirmi sekizinci production writer'ın dar kaynak entegrasyonudur. Yalnız tamamen hazırlanmış ordinary kernel Task değerinin tek ready-queue publication sınırı guarded'dır; private fallible preparation writer dışında kalır ve S356 QEMU initial-argument mutation bu kapıda tamamlanmış sayılmaz.",
limitations: [
"41 production writer aynı shared gate dışında kaldığı için whole-scheduler exclusion ve provider authority açık kalır.",
"On sekiz direct source callsite wiring kanıtıdır; RPi5-only S355 wrapper için supported-profile invocation/observation kanıtı yoktur.",
"qemu_set_ready_user_initial_arg writer sınırı sıradaki ayrı S356 kapısıdır.",
"Default-parallel PTY determinism, transient-contention liveness/soak, Generic SMP ve fiziksel RPi kabulü açık kalır.",
],
},snippet sha256: cecd0c0626c9…file sha256: 9726dbf00f84…
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s355_kernel_task_spawn_writer_guard_integration -- --test-threads=1proof: docs/M8.1-RPi5-G8l-S355-Kernel-Task-Spawn-Writer-Guard-Integration-Proof.md
Registry schema v5 · generator
website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9