ASELSANMicrokernel
S328 · SOURCE-BOUND GATE EVIDENCE

S328 · Current-task production writer guard integration

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

S328Production writer guardOperations id exactsource SHA exacttest target exact

operation: g8l-s328-current-task-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 öğesiL170–L280
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_current_task.rs::commit_production_current_task_owner

/// Commit the exact CPU1 owner into the real scheduler current task and then
/// release the exact S198 token before restoring local IRQ state.
///
/// # Safety
///
/// This is a production global-scheduler access. The caller must enter only
/// through the complete S203 guard. S328 adds shared-gate membership for this
/// one writer only; 68 legacy scheduler accesses remain outside it, so this
/// adapter is still wired but not invoked and generic-SMP exclusion is not
/// claimed.
#[cfg(all(target_arch = "aarch64", target_os = "none"))]
pub unsafe fn commit_production_current_task_owner(
    runtime: &G8lRuntimeAuthority,
    authority: &G8lSchedulerOwnerAuthority,
    guarded: crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_guarded_ack::G8lProductionSchedulerMutationGuardedAck,
) -> Result<G8lProductionCurrentTaskOwnerCommit, G8lProductionCurrentTaskOwnerCommitError> {
    let (bridge, irq_guard) = guarded.into_bridge_and_irq_guard();
    if let Err(error) = bridge.revalidate(authority, runtime) {
        drop(bridge);
        drop(irq_guard);
        return Err(G8lProductionCurrentTaskOwnerCommitError::Bridge(error));
    }

    #[cfg(feature = "board-rpi5")]
    let s328_writer_access = match crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s328_current_task_writer_guard_integration::acquire_s328_production_scheduler_writer_access(
        bridge.caller_cpu(),
    ) {
        Ok(access) => access,
        Err(error) => {
            drop(bridge);
            drop(irq_guard);
            return Err(G8lProductionCurrentTaskOwnerCommitError::WriterAccess(error));
        }
    };

    let scheduler = &mut *core::ptr::addr_of_mut!(crate::task::scheduler::SCHEDULER);
    let scheduler_receipt =
        match scheduler.commit_g8l_current_task_owner(runtime, authority, &bridge) {
            Ok(receipt) => receipt,
            Err(error) => {
                drop(bridge);
                #[cfg(feature = "board-rpi5")]
                drop(s328_writer_access);
                drop(irq_guard);
                return Err(G8lProductionCurrentTaskOwnerCommitError::Scheduler(error));
            }
        };

    let release = match crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_guarded_ack_release::G8lProductionSchedulerMutationGuardedAckRelease::from_bridge(
        runtime,
        authority,
        bridge,
    ) {
        Ok(release) => release,
        Err(error) => {
            let rollback = scheduler.rollback_g8l_current_task_owner(scheduler_receipt);
            #[cfg(feature = "board-rpi5")]
            drop(s328_writer_access);
            drop(irq_guard);
            return match rollback {
                Ok(()) => Err(G8lProductionCurrentTaskOwnerCommitError::Release(error)),
                Err(rollback) => Err(G8lProductionCurrentTaskOwnerCommitError::Rollback(rollback)),
            };
        }
    };

    let release = match crate::g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_guarded_ack_release_receipt::G8lProductionSchedulerMutationGuardedAckReleaseReceipt::from_release(
        runtime,
        authority,
        release,
    ) {
        Ok(release) => release,
        Err(error) => {
            let rollback = scheduler.rollback_g8l_current_task_owner(scheduler_receipt);
            #[cfg(feature = "board-rpi5")]
            drop(s328_writer_access);
            drop(irq_guard);
            return match rollback {
                Ok(()) => Err(
                    G8lProductionCurrentTaskOwnerCommitError::ReleaseAcknowledgement(error),
                ),
                Err(rollback) => Err(G8lProductionCurrentTaskOwnerCommitError::Rollback(rollback)),
            };
        }
    };

    if release.token() != scheduler_receipt.exclusion_token
        || release.task_id() != scheduler_receipt.task_id
        || release.caller_cpu() != scheduler_receipt.owner_cpu
        || release.owner_epoch() != scheduler_receipt.owner_epoch
    {
        let rollback = scheduler.rollback_g8l_current_task_owner(scheduler_receipt);
        #[cfg(feature = "board-rpi5")]
        drop(s328_writer_access);
        drop(irq_guard);
        return match rollback {
            Ok(()) => Err(G8lProductionCurrentTaskOwnerCommitError::ReleaseIdentityMismatch),
            Err(rollback) => Err(G8lProductionCurrentTaskOwnerCommitError::Rollback(rollback)),
        };
    }

    let release = release.into_receipt();
    #[cfg(feature = "board-rpi5")]
    drop(s328_writer_access);
    drop(irq_guard);
    Ok(G8lProductionCurrentTaskOwnerCommit {
        scheduler: scheduler_receipt,
        release,
    })
}
snippet sha256: 2e2fce43c93cfile sha256: f1a4d31d7f75
02 · Ortak exclusion üyeliği

S247 production writer guard

tam Rust öğesiL135–L153
kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s328_current_task_writer_guard_integration.rs::acquire_s328_production_scheduler_writer_access

/// Acquire writer membership from the exact static gate used by production
/// readers. The caller must already hold the S203 local-IRQ guard; this
/// function validates the real CPU identity and does not manufacture it.
#[cfg(all(target_arch = "aarch64", target_os = "none", feature = "board-rpi5"))]
pub fn acquire_s328_production_scheduler_writer_access(
    caller_cpu: usize,
) -> Result<G8lS328ProductionSchedulerWriterAccess, G8lS247WholeSchedulerAccessError> {
    use crate::g8l_runtime_contract::CPU1;

    let current_cpu =
        crate::percpu::try_current_cpu_id().ok_or(G8lS247WholeSchedulerAccessError::InvalidCpu)?;
    if current_cpu != CPU1 || caller_cpu != current_cpu {
        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(caller_cpu)?;
    Ok(G8lS328ProductionSchedulerWriterAccess { _access: access })
}
snippet sha256: fecb85f66cdafile sha256: 5e0ef4b0c91e
03 · Doğrulayan test kodu

Operations komutuna bağlı focused test

tam Rust öğesiL186–L221
simulation/tests/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s328_current_task_writer_guard_integration.rs::production_current_task_order_is_revalidate_guard_mutate_release

#[test]
fn production_current_task_order_is_revalidate_guard_mutate_release() {
    let source = include_str!(
        "../../kernel/src/g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_current_task.rs"
    );
    let production = source
        .split("pub unsafe fn commit_production_current_task_owner")
        .nth(1)
        .unwrap();
    let revalidate = production.find("bridge.revalidate").unwrap();
    let acquire = production
        .find("acquire_s328_production_scheduler_writer_access")
        .unwrap();
    let writer = production
        .find("addr_of_mut!(crate::task::scheduler::SCHEDULER)")
        .unwrap();
    let commit = production.find("commit_g8l_current_task_owner").unwrap();
    let release = production.find("from_bridge").unwrap();
    let success = production
        .find("let release = release.into_receipt()")
        .unwrap();
    let drop_writer = production[success..]
        .find("drop(s328_writer_access)")
        .unwrap()
        + success;
    let restore_irq = production[drop_writer..].find("drop(irq_guard)").unwrap() + drop_writer;
    assert!(
        revalidate < acquire
            && acquire < writer
            && writer < commit
            && commit < release
            && release < drop_writer
            && drop_writer < restore_irq
    );
}
snippet sha256: 8227c1e91eaefile sha256: 8dfc26e75e70
04 · Kapı kimlik kaydı

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

tam Operations kaydıL14636–L14685
website/src/lib/operations.ts::g8l-s328-current-task-writer-guard-integration-partial
  {
    id: "g8l-s328-current-task-writer-guard-integration-partial",
    date: "2026-08-27",
    sequence: 328,
    status: "passed",
    umbrella_status: "partial",
    title: "S328 · Current-task production writer guard integration",
    summary:
      "S328 current-task production adapterındaki tek mutable SCHEDULER writer'ını, 44 production reader'ın kullandığı aynı statik S247 gate'e bağlar. Exact S203 revalidation → writer membership → real commit → rollback/S198 release/ACK → writer release → IRQ restore sırası kaynak-kilitlidir. Guarded writer 1/69, açık writer 68 ve provider authority 0'dır; S245 request tüketilmez.",
    evidence: [
      "Focused writer-integration kapısı iki bağımsız koşuda 19/19 PASS: 134 B / SHA-256 d123478fc3b1529e55bbd7cf001455847b321973c9b53098e11978a7dd59b95d.",
      "Aynı S247 state word üzerinde reader→writer ve writer→reader exclusion, nonzero monotonic token, wrong-CPU rejection ve commit-error exact release/no-retry yolları doğrulandı.",
      "Current-task adapterında acquire_s328_production_scheduler_writer_access gerçek addr_of_mut!(...SCHEDULER) öncesindedir; tüm post-acquisition çıkışlar writer membership'i local IRQ restore'dan önce bırakır.",
      "QEMU, RPi4, RPi5 ve RPi5+SMP AArch64 compile profilleri exit 0 verdi; warning header'ları 291/389/1091/1091, zero-warning iddiası yoktur.",
      "Operations komut haritasından türetilen S238–S328 matrisi iki bağımsız koşuda 92 grup / 1308/1308 PASS; süre-normalize çıktılar 12070 B / SHA-256 74aa344082512b0de09273903a3dbfc015c5e8cd2fb6f9e444bae2b5822ae485 ile byte-eşittir.",
      "Exact yedi tarihsel G8h assertion adı dışlandığında tam workspace iki koşuda 290 sonuç grubu / 3125 PASS / 0 fail / 7 filtered verdi; normalize sonuç özeti 32710 B / SHA-256 dc7370f34908ae32144581777440413d26358af0557c3c8da449c299c526b4d6 ile byte-eşittir. Filtresiz audit frozen S96 exceptions.S identity kapısında RED olduğu için global workspace GREEN iddia edilmez.",
      "make verify-qemu iki bağımsız PASS verdi: strict ELF W^X 31/31 ve aynı 1551 B / SHA-256 527ef12c2bc56140e14e13be445f78c8e38872febc9849afcfacd499238ff966 acceptance özeti korundu. Bu ortak regresyon S328 runtime invocation kanıtı değildir.",
      "Yerel website 502/502 test, lint, TypeScript ve 23/23 static route PASS; çıktı 193 dosyadır. S328 Operations/Timeline/Yol Haritası marker'ları yerel artifact'ta doğrulandı, deployment yapılmadı.",
      "Project-status JSON/renderer kapıları ve manifest testi iki bağımsız koşuda 211/211 PASS; 345 B ham çıktılar yalnız süre alanında ayrıştı, süre-normalize 347 B çıktı SHA-256 2ec7336b9d00b2e01b302b97b0d80b5d01d9bb294fe5a7dbd6c0cae711b5e171 ile birebirdir.",
      "S245 request ve S244 admission dokunulmadan kalır; production provider authority=0, whole-scheduler exclusion=false, runtime invocation=false.",
      "Fiziksel/device işlem yapılmadı: physical/device operations=0 ve RUNBOOK_EXECUTED_IN_S328=NO.",
    ],
    commands: [
      "cargo test --quiet -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s328_current_task_writer_guard_integration -- --test-threads=1",
      "cargo check -p aselsan_kernel --target aarch64-unknown-none --no-default-features --features board-rpi5",
      "cargo check -p aselsan_kernel --target aarch64-unknown-none --no-default-features --features board-rpi5,smp",
    ],
    terminalSessions: [
      {
        id: "g8l-s328-current-task-writer-guard-integration",
        title: "G8l S328 current-task writer guard integration",
        commandLines: [
          "cargo test --quiet -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s328_current_task_writer_guard_integration -- --test-threads=1",
        ],
        outputLines: [
          "test result: ok; S328 focused 1 group / 19 passed; 0 failed",
          "shared S247 gate: 44 guarded readers + 1/69 guarded writer; 68 writers open",
          "provider authority=0; S245 request not taken; S244 admission not published",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
    ],
    terminalSessionsNote:
      "S328 ilk production writer'ın kaynak entegrasyonudur; entrypoint runtime'da çağrılmadı ve global exclusion oluşmadı.",
    limitations: [
      "68 production writer aynı shared gate dışında kaldığı için whole-scheduler exclusion ve provider authority açık kalır.",
      "Supported-profile runtime invocation, Generic SMP ve fiziksel RPi kabulü açık kalır.",
    ],
  },
snippet sha256: 87a96cd1e939file sha256: 9726dbf00f84
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test g8l_target_dispatch_scheduler_owner_scheduler_mutation_production_migration_lifecycle_s328_current_task_writer_guard_integration -- --test-threads=1
proof: docs/M8.1-RPi5-G8l-S328-Current-Task-Writer-Guard-Integration-Proof.md
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9