S63 · SOURCE-BOUND GATE EVIDENCE
G8e runtime host-green oldu; lost-wakeup, deadline ve overflow audit açıkları düzeltildi
Operations --test hedefi → simulation public mod g8d_uart bağı → kaynak kesiti Bu sayfa yalnız S63 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.
S63Focused kod testiOperations id exactsource SHA exacttest target exact
operation: rpi5-g8e-runtime-host-green-audit-fixed
uygulama/model · focused test · Operations · 3 exact excerpt
sequence-bound=true · implementation-bound=false
01 · Testin bağlı olduğu uygulama/model kodu
Kapının yürüttüğü gerçek kaynak
tam Rust öğesiL60–L476
simulation/src/g8d_uart.rs::verify_transcript
pub fn verify_transcript(input: &[u8]) -> Result<G8dEvidence, ValidationError> {
let mut errors = Vec::new();
let g8c = match verify_g8c(input) {
Ok(evidence) => Some(evidence),
Err(error) => {
errors.extend(
error
.messages()
.iter()
.map(|message| format!("G8c prerequisite: {message}")),
);
None
}
};
let leading_nuls = input.iter().take_while(|&&byte| byte == 0).count();
let transcript = match std::str::from_utf8(&input[leading_nuls..]) {
Ok(value) => value,
Err(error) => {
errors.push(format!("transcript is not UTF-8: {error}"));
return Err(ValidationError { messages: errors });
}
};
let mut positions: BTreeMap<&'static str, Vec<usize>> = MARKERS
.iter()
.copied()
.map(|marker| (marker, Vec::new()))
.collect();
let mut boot8c_line = None;
let mut start_ticks = None;
let mut irq_tick = None;
let mut task_tick = None;
let mut boot_base = None;
let mut boot_ticks = None;
let mut task_sp = None;
let mut ack_raw = None;
let mut eoi_raw = None;
let mut pmr = None;
let mut bpr = None;
let mut sec_samples = Vec::new();
for (index, raw_line) in transcript.lines().enumerate() {
let line_number = index + 1;
let line = raw_line.trim_end_matches('\r').trim();
if has_marker_tag(line, "ASELSAN/BOOT8C") {
boot8c_line = Some(line_number);
}
if line.starts_with("[SEC") {
if let Some(ticks) = parse_sec_ticks(line) {
sec_samples.push((line_number, ticks));
}
}
if line.contains("ASELSAN/G8DERR")
|| line.contains("panicked at")
|| line.contains("Kernel panic")
|| line.contains("Unknown IRQ")
|| line.contains("Bilinmeyen IRQ")
{
errors.push(format!(
"line {line_number}: failure evidence present: {line:?}"
));
}
let known = MARKERS
.iter()
.copied()
.find(|marker| has_marker_tag(line, marker));
if (line.starts_with("ASELSAN/G8D") || line.starts_with("ASELSAN/BOOT8D"))
&& known.is_none()
{
errors.push(format!(
"line {line_number}: unknown G8d marker present: {line:?}"
));
}
let Some(marker) = known else {
continue;
};
positions
.get_mut(marker)
.expect("known G8d marker")
.push(line_number);
let fields = match parse_fields(line, marker) {
Ok(fields) => fields,
Err(message) => {
errors.push(format!("line {line_number}: {message}"));
continue;
}
};
match marker {
"ASELSAN/G8D0" => {
require_exact_keys(
&fields,
&[
"CPU",
"SOURCE",
"TARGET",
"MPIDR",
"SGI",
"TARGET_LIST",
"SENDS",
"GICD",
"GICC",
"SGI_ENABLED",
"PMR",
"BPR",
"POLICY",
"MIGRATION",
"TLB_SHOOTDOWN",
"CPU2_3",
"START_TICKS",
],
line_number,
&mut errors,
);
for (key, expected) in [
("CPU", "0"),
("SOURCE", "CPU0"),
("TARGET", "CPU1"),
("MPIDR", "0x100"),
("SGI", "1"),
("TARGET_LIST", "0x02"),
("SENDS", "1"),
("GICD", "ON"),
("GICC", "ON"),
("SGI_ENABLED", "1"),
("POLICY", "RESCHED_ONLY"),
("MIGRATION", "OFF"),
("TLB_SHOOTDOWN", "OFF"),
("CPU2_3", "OFF"),
] {
require_field(&fields, key, expected, line_number, &mut errors);
}
pmr = parse_hex(&fields, "PMR", line_number, &mut errors);
bpr = parse_decimal(&fields, "BPR", line_number, &mut errors);
start_ticks = parse_decimal(&fields, "START_TICKS", line_number, &mut errors);
}
"ASELSAN/G8D1" => {
require_exact_keys(
&fields,
&[
"CPU",
"MPIDR",
"INTID",
"SOURCE_CPU",
"DELIVERIES",
"ACKS",
"EOIS",
"ACK_RAW",
"EOI_RAW",
"RESCHED",
"RETURN",
"IRQ",
"TIMER",
"TICK",
],
line_number,
&mut errors,
);
for (key, expected) in [
("CPU", "1"),
("MPIDR", "0x100"),
("INTID", "1"),
("SOURCE_CPU", "0"),
("DELIVERIES", "1"),
("ACKS", "1"),
("EOIS", "1"),
("RESCHED", "1"),
("RETURN", "EL1H"),
("IRQ", "MASKED"),
("TIMER", "OFF"),
] {
require_field(&fields, key, expected, line_number, &mut errors);
}
ack_raw = parse_hex(&fields, "ACK_RAW", line_number, &mut errors);
eoi_raw = parse_hex(&fields, "EOI_RAW", line_number, &mut errors);
irq_tick = parse_decimal(&fields, "TICK", line_number, &mut errors);
}
"ASELSAN/G8D2" => {
require_exact_keys(
&fields,
&[
"CPU",
"MPIDR",
"TASK",
"WAKEUPS",
"RUNS",
"PROGRESS",
"STACK",
"STACK_SP",
"CANARY",
"STACK_RESTORE",
"RETURN",
"IRQ",
"TIMER",
"EL",
"TPIDR",
"TICK",
],
line_number,
&mut errors,
);
for (key, expected) in [
("CPU", "1"),
("MPIDR", "0x100"),
("TASK", "PINNED0"),
("WAKEUPS", "1"),
("RUNS", "1"),
("PROGRESS", "3"),
("STACK", "REUSED_STATIC64K"),
("CANARY", "OK"),
("STACK_RESTORE", "OK"),
("RETURN", "LOCAL_IDLE"),
("IRQ", "MASKED"),
("TIMER", "OFF"),
("EL", "1"),
("TPIDR", "1"),
] {
require_field(&fields, key, expected, line_number, &mut errors);
}
task_sp = parse_hex(&fields, "STACK_SP", line_number, &mut errors);
task_tick = parse_decimal(&fields, "TICK", line_number, &mut errors);
}
"ASELSAN/BOOT8D" => {
require_exact_keys(
&fields,
&[
"IPI",
"CPU0_TO_CPU1",
"SENDS",
"DELIVERIES",
"ACKS",
"EOIS",
"RESCHED",
"TASK_WAKE",
"TASK_RUNS",
"TASK_PROGRESS",
"STACK",
"RETURN",
"IRQ",
"TIMER",
"MIGRATION",
"TLB_SHOOTDOWN",
"CPU2_3",
"SCOPE",
"BASE_TICKS",
"TICKS",
],
line_number,
&mut errors,
);
for (key, expected) in [
("IPI", "SGI1"),
("CPU0_TO_CPU1", "1"),
("SENDS", "1"),
("DELIVERIES", "1"),
("ACKS", "1"),
("EOIS", "1"),
("RESCHED", "1"),
("TASK_WAKE", "1"),
("TASK_RUNS", "1"),
("TASK_PROGRESS", "3"),
("STACK", "REUSED_STATIC64K"),
("RETURN", "IDLE"),
("IRQ", "MASKED"),
("TIMER", "OFF"),
("MIGRATION", "OFF"),
("TLB_SHOOTDOWN", "OFF"),
("CPU2_3", "OFF"),
("SCOPE", "CPU1_RESCHED_WAKE_ONLY"),
] {
require_field(&fields, key, expected, line_number, &mut errors);
}
boot_base = parse_decimal(&fields, "BASE_TICKS", line_number, &mut errors);
boot_ticks = parse_decimal(&fields, "TICKS", line_number, &mut errors);
}
_ => unreachable!(),
}
}
for marker in MARKERS {
let observed = positions.get(marker).expect("known marker").len();
if observed != 1 {
errors.push(format!(
"{marker} must occur exactly once, observed {observed}"
));
}
}
let ordered = MARKERS
.iter()
.filter_map(|marker| positions.get(marker)?.first().copied())
.collect::<Vec<_>>();
if ordered.len() == MARKERS.len() && !ordered.windows(2).all(|pair| pair[0] < pair[1]) {
errors.push(format!("G8d marker order mismatch: {ordered:?}"));
}
if let (Some(boot8c), Some(g8d0)) = (boot8c_line, ordered.first().copied()) {
if boot8c >= g8d0 {
errors.push(format!(
"BOOT8C must precede G8D0: BOOT8C@{boot8c}, G8D0@{g8d0}"
));
}
}
if let (Some(g8c), Some(start)) = (&g8c, start_ticks) {
if start < g8c.boot8c_ticks || start - g8c.boot8c_ticks > MAX_G8C_HANDOFF_TICKS {
errors.push(format!(
"G8D0 START_TICKS must be within {MAX_G8C_HANDOFF_TICKS} ticks of BOOT8C: boot8c={}, start={start}",
g8c.boot8c_ticks,
));
}
}
if boot_base != start_ticks {
errors.push(format!(
"BOOT8D BASE_TICKS must equal G8D0 START_TICKS: start={start_ticks:?}, base={boot_base:?}"
));
}
if let (Some(start), Some(irq)) = (start_ticks, irq_tick) {
if irq < start || irq - start > MAX_STAGE_WAIT_TICKS {
errors.push(format!(
"G8D1 TICK must be within the bounded stage window: start={start}, irq={irq}"
));
}
}
if let (Some(start), Some(irq), Some(task)) = (start_ticks, irq_tick, task_tick) {
if task < irq || task < start || task - start > MAX_STAGE_WAIT_TICKS {
errors.push(format!(
"G8D2 TICK must follow G8D1 within the bounded stage window: start={start}, irq={irq}, task={task}"
));
}
}
if let (Some(base), Some(end)) = (boot_base, boot_ticks) {
if end < base || end - base < MIN_PRIMARY_PROOF_TICKS {
errors.push(format!(
"BOOT8D timer delta must be at least {MIN_PRIMARY_PROOF_TICKS}: base={base}, end={end}"
));
}
if task_tick.is_some_and(|tick| end < tick) {
errors.push(format!(
"BOOT8D TICKS must not precede G8D2: G8D2={task_tick:?}, BOOT8D={end}"
));
}
}
if task_sp.is_some_and(|sp| sp == 0 || sp & 0xf != 0) {
errors.push(format!(
"G8D2 STACK_SP must be non-zero and 16-byte aligned: {task_sp:?}"
));
}
if ack_raw != eoi_raw {
errors.push(format!(
"G8D1 raw EOI must exactly equal raw acknowledge: ack={ack_raw:?}, eoi={eoi_raw:?}"
));
}
if let Some(raw) = ack_raw {
if raw & 0x3ff != SGI_INTID as u64 {
errors.push(format!(
"G8D1 ACK_RAW INTID mismatch: expected {SGI_INTID}, raw=0x{raw:x}"
));
}
if (raw >> 10) & 0x7 != SOURCE_CPU_INDEX {
errors.push(format!(
"G8D1 ACK_RAW source mismatch: expected {SOURCE_CPU_INDEX}, raw=0x{raw:x}"
));
}
}
if pmr.is_some_and(|value| value <= 0x80 || value > 0xff) {
errors.push(format!(
"G8D0 PMR must pass priority 0x80 and fit one byte: {pmr:?}"
));
}
if bpr.is_some_and(|value| value > 7) {
errors.push(format!("G8D0 BPR must be in 0..=7: {bpr:?}"));
}
if ordered.len() == MARKERS.len() {
let task_line = ordered[2];
let boot_line = ordered[3];
let correlated = sec_samples.iter().any(|(line, ticks)| {
*line > task_line
&& *line < boot_line
&& task_tick.is_some_and(|start| *ticks >= start)
&& boot_ticks.is_some_and(|end| *ticks <= end)
});
if !correlated {
errors.push("BOOT8D requires a CPU0 SEC timer sample after G8D2".to_string());
}
}
if TARGET_MPIDR != 0x100
|| TARGET_CPU_INDEX != 1
|| TARGET_LIST != 0x02
|| SGI_INTID != 1
|| EXPECTED_SENDS != 1
|| EXPECTED_DELIVERIES != 1
|| EXPECTED_ACKS != 1
|| EXPECTED_EOIS != 1
|| EXPECTED_RESCHEDULES != 1
|| EXPECTED_WAKEUPS != 1
|| EXPECTED_TASK_RUNS != 1
|| TASK_PROGRESS != 3
|| TASK_STACK_BYTES != 64 * 1024
{
errors.push("compiled G8d contract constants are inconsistent".to_string());
}
if errors.is_empty() {
Ok(G8dEvidence {
g8c: g8c.expect("validated G8c prerequisite"),
start_ticks: start_ticks.expect("validated G8d start ticks"),
irq_tick: irq_tick.expect("validated G8d IRQ tick"),
task_tick: task_tick.expect("validated G8d task tick"),
boot8d_ticks: boot_ticks.expect("validated BOOT8D ticks"),
task_sp: task_sp.expect("validated G8d task SP"),
ack_raw: ack_raw.expect("validated G8d acknowledge"),
})
} else {
Err(ValidationError { messages: errors })
}
}snippet sha256: 798d060c9dde…file sha256: 74c8b0ea3896…
02 · Doğrulayan test kodu
Operations komutuna bağlı focused test
tam Rust öğesiL164–L181
simulation/tests/rpi5_g8d_uart.rs::errors_unknown_markers_and_broken_g8c_prerequisite_are_rejected
#[test]
fn errors_unknown_markers_and_broken_g8c_prerequisite_are_rejected() {
let with_error = replace_suffix(
"ASELSAN/G8D1 CPU=1",
"ASELSAN/G8DERR CODE=IRQ_SOURCE EXPECTED=0x0 ACTUAL=0x1\nASELSAN/G8D1 CPU=1",
);
assert!(has(&failures(with_error), "failure evidence present"));
let unknown = replace_suffix(
"ASELSAN/G8D1 CPU=1",
"ASELSAN/G8DX CPU=1\nASELSAN/G8D1 CPU=1",
);
assert!(has(&failures(unknown), "unknown G8d marker"));
let broken = pass().replace("CPU1_TASK=1", "CPU1_TASK=2");
assert!(has(&failures(broken), "G8c prerequisite"));
}snippet sha256: 10e2e171f450…file sha256: 6f0c72e97c10…
03 · Kapı kimlik kaydı
Operations sıra, kimlik ve başlık bağı
tam Operations kaydıL31239–L31352
website/src/lib/operations.ts::rpi5-g8e-runtime-host-green-audit-fixed
{
id: "rpi5-g8e-runtime-host-green-audit-fixed",
date: "2026-08-21",
sequence: 63,
status: "fixed",
title:
"G8e runtime host-green oldu; lost-wakeup, deadline ve overflow audit açıkları düzeltildi",
summary:
"Sıra 62'de kasıtlı RED bırakılan G8e runtime artık G8d'nin immutable round-1 prerequisite'inden CPU0 ve CPU1 handoff'larıyla başlıyor; read-only GIC pending/active/EOImode snapshot'ını ve G8e→G8d→G8b interceptor sırasını koruyarak aynı SGI1 kanalına yalnız bir yeni gönderim ekliyor. Hedefli güncel source/UART zinciri G8d 11+7 ve G8e 10+9 olmak üzere 37/37 PASS, board-rpi5 cargo check PASS verdi. Audit üç fail-closed kusuru bulup düzeltti: stage-load→WFI lost-wakeup penceresi WFE+SEV'e çevrildi, beklenen stage kabulünden önce tick örneklenerek late publication reddedildi ve bütün zaman farkları checked_sub ile taşma/panic üretmeyecek hale geldi. Rebuilt ELF üzerinde sınırlı audit panic edge olmadığını, primary'de tek sender BL, secondary'de WFE-only bekleme ve CPU1'de FP/SIMD yokluğunu gözledi. Bu kayıt henüz nihai makine-kodu layout/image kabulü değildir.",
evidence: [
"kernel/src/rpi5_g8e.rs runtime'ı main.rs içinde yalnız RPi5 yoluna bağlandı; G8d CPU0 final yolu rpi5_g8e_primary_run'a, CPU1 parked yolu release sonrası rpi5_g8e_secondary_run'a exact handoff verir.",
"G8d fiziksel round-1 sayaçları ve BOOT8D prerequisite'i immutable kalır; G8e primary canonical rpi5_g8d_send_sgi(SGI1, TARGET_LIST=0x02) yolunu yalnız bir kez çağırır ve aggregate toplamları exact 2'ye çıkarır.",
"rpi5_g8e_read_secondary_sgi_state yalnız pending, active ve Non-secure EOImodeNS durumunu okur; clear, DIR veya GIC re-init yapmaz. IRQ dispatcher sırası G8e→G8d→G8b olarak source testinde donduruldu.",
"Güncel hedefli matris rpi5_g8d_source 11/11, rpi5_g8e_source 10/10, rpi5_g8d_uart 7/7 ve rpi5_g8e_uart 9/9 olmak üzere 37/37 PASS verdi.",
"cargo check -p aselsan_kernel --target aarch64-unknown-none --no-default-features --features board-rpi5 exit 0 verdi; warning'ler fail'e yükseltilmedi.",
"Lost-wakeup audit'i stage-load ile WFI arasındaki event kaçırma penceresini buldu. G8d/G8e bounded CPU1 stage wait'leri WFE kullanıyor; handler/state yayınları SEV veriyor ve source testleri bu bounded secondary dilimlerinde WFI'yi yasaklıyor.",
"Deadline kabul sırası düzeltildi: current tick beklenen stage görüldükten sonra değil, stage kabulünden önce örnekleniyor ve ticks<=deadline koşulu sağlanmadan başarı verilmiyor.",
"Timing subtraction panic kenarları checked_sub ile fail-closed hale getirildi; G8e source testi boot handoff, inter-wake ve send/IRQ/task delta hesaplarının panic üretmemesini doğruluyor.",
"Rebuilt production RPi5 ELF'in sınırlı objdump audit'inde primary/secondary/task/handler gövdelerinde panic edge=0, primary canonical sender direct BL=1, bounded secondary wait WFE-only ve CPU1 FP/SIMD=0 gözlendi.",
"G8e UART parser'ı exact marker field order ve canonical `[SEC 11] ticks=1100 drift=+0 µs (+6 count)` şemasını zorunlu kılıyor; malformed order/us/drift/tick/count varyantlarının adversarial testiyle UART toplamı 9/9 oldu.",
"Staged proof durumu `RUNTIME IMPLEMENTED — source/host PASS; layout, paket ve fiziksel BOOT8E henüz yok` olarak düzeltildi; kullanılmayan ayrı SGIR state slotu kaldırıldı.",
],
terminalSessionsNote:
"Bu oturumlar runtime kaynak entegrasyonu, host testleri, board cargo check ve sınırlı ELF audit'idir. Objdump bulguları sonraki nihai layout gate'in yerine geçmez; image/paket/fiziksel iddiası yoktur.",
terminalSessions: [
{
id: "g8e-runtime-targeted-host-matrix",
title: "G8d prerequisite ve G8e runtime güncel source/UART matrisi",
commandLines: [
"cargo test -p aselsan_microkernel_simulation --test rpi5_g8d_source --test rpi5_g8e_source --test rpi5_g8d_uart --test rpi5_g8e_uart",
],
outputLines: [
"rpi5_g8d_source=11/11 PASS",
"rpi5_g8e_source=10/10 PASS",
"rpi5_g8d_uart=7/7 PASS",
"rpi5_g8e_uart=9/9 PASS",
"targeted total=37/37 PASS · fail=0",
],
exitCode: 0,
outputMode: "complete",
},
{
id: "g8e-runtime-board-rpi5-check",
title: "Production non-SMP board-rpi5 compile sınırı",
commandLines: [
"cargo check -p aselsan_kernel --target aarch64-unknown-none --no-default-features --features board-rpi5",
],
outputLines: [
"aselsan_kernel board-rpi5 cargo_check_exit=0",
"G8e runtime module resolved and compiled",
"warnings emitted=166 · warnings not promoted to errors",
],
exitCode: 0,
outputMode: "selected",
},
{
id: "g8e-runtime-race-deadline-overflow-audit",
title: "Lost-wakeup, late-stage ve panic-edge düzeltme audit'i",
commandLines: [
"bounded G8d/G8e stage-wait and publication source audit",
"targeted source tests for WFE/SEV, pre-accept tick and checked_sub",
],
outputLines: [
"stage-load -> WFI lost-wakeup window found and removed",
"bounded secondary waits=WFE · publications=SEV · bounded WFI forbidden",
"tick sampled before expected-stage acceptance · ticks<=deadline required",
"timing subtraction=checked_sub · overflow/panic edge rejected",
"source regression tests=PASS",
],
exitCode: 0,
outputMode: "selected",
},
{
id: "g8e-runtime-bounded-elf-audit",
title: "Rebuilt ELF üzerinde sınırlı panic/send/wait/FP audit'i",
commandLines: [
"llvm-objdump bounded G8e primary/secondary/task/handler bodies",
"direct-call, wait instruction and FP/SIMD audit",
],
outputLines: [
"panic edges primary/secondary/task/handler=0/0/0/0",
"G8e primary canonical sender direct BL=1",
"bounded secondary wait=WFE-only",
"CPU1 FP/SIMD instructions=0",
"result=host audit PASS · final layout gate not claimed",
],
exitCode: 0,
outputMode: "selected",
},
{
id: "g8e-runtime-parser-schema-audit",
title: "Exact field order ve canonical SEC parser sertleştirmesi",
commandLines: [
"cargo test -p aselsan_microkernel_simulation --test rpi5_g8e_uart",
"adversarial field-order and SEC schema mutations",
],
outputLines: [
"G8e UART=9/9 PASS",
"exact marker field order required",
"canonical SEC schema: [SEC 11] ticks=1100 drift=+0 µs (+6 count)",
"malformed us/drift/tick/count/order variants rejected",
],
exitCode: 0,
outputMode: "complete",
},
],
limitations: [
"Bu kayıt runtime source/host-green ve sınırlı audit kanıtıdır; nihai G8e makine-kodu layout gate'i ve image kabulü henüz tamamlanmadı.",
"Tam workspace/üç-board/QEMU matrisi, reproducibility, kaynak/toolchain manifesti ve staged package kapıları bekliyor.",
"microSD yazımı, UART capture ve fiziksel BOOT8E yapılmadı; sentetik UART testi fiziksel kanıt değildir.",
"Generic SMP, migration, TLB shootdown, CPU2/CPU3, hotplug ve EL0-on-CPU1 kapsam dışıdır.",
"Pi kapalıdır; doğrulanmış G8d kartı güçsüz Pi içinde kalır ve rollback evidence değiştirilmemiştir.",
],
},snippet sha256: ba7164209fc8…file sha256: 9726dbf00f84…
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test rpi5_g8d_source --test rpi5_g8e_source --test rpi5_g8d_uart --test rpi5_g8e_uartRegistry schema v5 · generator
website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9