S73 · SOURCE-BOUND GATE EVIDENCE
G8f runtime yarış audit'iyle GO; layout ve BOOT8F image staged
Operations --test hedefi → simulation public mod g8e_uart bağı → kaynak kesiti Bu sayfa yalnız S73 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.
S73Focused kod testiOperations id exactsource SHA exacttest target exact
operation: rpi5-g8f-runtime-layout-image-staged
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 öğesiL65–L583
simulation/src/g8e_uart.rs::verify_transcript
pub fn verify_transcript(input: &[u8]) -> Result<G8eEvidence, ValidationError> {
let mut errors = Vec::new();
// Older validators deliberately reject unknown future milestone markers.
// Validate the immutable prerequisite only over the prefix that ends after
// BOOT8D, then validate the complete G8e suffix below.
let g8e_start = [b"ASELSAN/G8E".as_slice(), b"ASELSAN/BOOT8E".as_slice()]
.into_iter()
.filter_map(|needle| find_bytes(input, needle))
.min()
.unwrap_or(input.len());
let g8d = match verify_g8d(&input[..g8e_start]) {
Ok(evidence) => Some(evidence),
Err(error) => {
errors.extend(
error
.messages()
.iter()
.map(|message| format!("G8d 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 boot8d_line = None;
let mut start_ticks = None;
let mut send_tick = None;
let mut gap_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 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/BOOT8D") {
boot8d_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/G8EERR")
|| 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/G8E") || line.starts_with("ASELSAN/BOOT8E"))
&& known.is_none()
{
errors.push(format!(
"line {line_number}: unknown G8e marker present: {line:?}"
));
}
let Some(marker) = known else {
continue;
};
positions
.get_mut(marker)
.expect("known G8e marker")
.push(line_number);
let (fields, field_order) = match parse_fields(line, marker) {
Ok(parsed) => parsed,
Err(message) => {
errors.push(format!("line {line_number}: {message}"));
continue;
}
};
match marker {
"ASELSAN/G8E0" => {
require_exact_keys(
&fields,
&field_order,
&[
"CPU",
"ROUND1",
"ROUND2",
"SOURCE",
"TARGET",
"MPIDR",
"SGI",
"TARGET_LIST",
"SGIR",
"PRIOR_SENDS",
"NEW_SENDS",
"TOTAL_SENDS",
"REUSE",
"PRIOR_PENDING",
"PRIOR_ACTIVE",
"EOIMODE",
"GAP_TICKS",
"START_TICKS",
"SEND_TICK",
"MIGRATION",
"TLB_SHOOTDOWN",
"CPU2_3",
],
line_number,
&mut errors,
);
for (key, expected) in [
("CPU", "0"),
("ROUND1", "G8D"),
("ROUND2", "G8E"),
("SOURCE", "CPU0"),
("TARGET", "CPU1"),
("MPIDR", "0x100"),
("SGI", "1"),
("TARGET_LIST", "0x02"),
("SGIR", "0x00020001"),
("PRIOR_SENDS", "1"),
("NEW_SENDS", "1"),
("TOTAL_SENDS", "2"),
("REUSE", "WITHOUT_REINIT"),
("PRIOR_PENDING", "0"),
("PRIOR_ACTIVE", "0"),
("EOIMODE", "DROP_DEACTIVATE"),
("MIGRATION", "OFF"),
("TLB_SHOOTDOWN", "OFF"),
("CPU2_3", "OFF"),
] {
require_field(&fields, key, expected, line_number, &mut errors);
}
gap_ticks = parse_decimal(&fields, "GAP_TICKS", line_number, &mut errors);
start_ticks = parse_decimal(&fields, "START_TICKS", line_number, &mut errors);
send_tick = parse_decimal(&fields, "SEND_TICK", line_number, &mut errors);
}
"ASELSAN/G8E1" => {
require_exact_keys(
&fields,
&field_order,
&[
"ROUND",
"CPU",
"MPIDR",
"INTID",
"SOURCE_CPU",
"PRIOR_DELIVERIES",
"NEW_DELIVERIES",
"TOTAL_DELIVERIES",
"PRIOR_ACKS",
"NEW_ACKS",
"TOTAL_ACKS",
"PRIOR_EOIS",
"NEW_EOIS",
"TOTAL_EOIS",
"ACK_RAW",
"EOI_RAW",
"PRIOR_RESCHED",
"NEW_RESCHED",
"TOTAL_RESCHED",
"RETURN",
"IRQ",
"TIMER",
"TICK",
],
line_number,
&mut errors,
);
for (key, expected) in [
("ROUND", "2"),
("CPU", "1"),
("MPIDR", "0x100"),
("INTID", "1"),
("SOURCE_CPU", "0"),
("PRIOR_DELIVERIES", "1"),
("NEW_DELIVERIES", "1"),
("TOTAL_DELIVERIES", "2"),
("PRIOR_ACKS", "1"),
("NEW_ACKS", "1"),
("TOTAL_ACKS", "2"),
("PRIOR_EOIS", "1"),
("NEW_EOIS", "1"),
("TOTAL_EOIS", "2"),
("PRIOR_RESCHED", "1"),
("NEW_RESCHED", "1"),
("TOTAL_RESCHED", "2"),
("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/G8E2" => {
require_exact_keys(
&fields,
&field_order,
&[
"ROUND",
"CPU",
"MPIDR",
"TASK",
"PRIOR_WAKEUPS",
"NEW_WAKEUPS",
"TOTAL_WAKEUPS",
"PRIOR_RUNS",
"NEW_RUNS",
"TOTAL_RUNS",
"PROGRESS",
"STACK",
"STACK_SP",
"SAME_STACK_REGION",
"CANARY",
"STACK_RESTORE",
"FINAL_PENDING",
"FINAL_ACTIVE",
"RETURN",
"IRQ",
"TIMER",
"EL",
"TPIDR",
"TICK",
],
line_number,
&mut errors,
);
for (key, expected) in [
("ROUND", "2"),
("CPU", "1"),
("MPIDR", "0x100"),
("TASK", "PINNED0"),
("PRIOR_WAKEUPS", "1"),
("NEW_WAKEUPS", "1"),
("TOTAL_WAKEUPS", "2"),
("PRIOR_RUNS", "1"),
("NEW_RUNS", "1"),
("TOTAL_RUNS", "2"),
("PROGRESS", "3"),
("STACK", "REUSED_STATIC64K"),
("SAME_STACK_REGION", "YES"),
("CANARY", "OK"),
("STACK_RESTORE", "OK"),
("FINAL_PENDING", "0"),
("FINAL_ACTIVE", "0"),
("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/BOOT8E" => {
require_exact_keys(
&fields,
&field_order,
&[
"IPI",
"CPU0_TO_CPU1",
"ROUNDS",
"SAME_CHANNEL",
"SGIR",
"SENDS",
"DELIVERIES",
"ACKS",
"EOIS",
"RESCHED",
"TASK_WAKE",
"TASK_RUNS",
"PROGRESS_R1",
"PROGRESS_R2",
"STACK",
"SAME_STACK_REGION",
"QUIESCENT_BETWEEN",
"FINAL_PENDING",
"FINAL_ACTIVE",
"EOIMODE",
"GIC_REINIT",
"RETURN",
"IRQ",
"TIMER",
"GENERIC_SMP",
"MIGRATION",
"TLB_SHOOTDOWN",
"CPU2_3",
"SCOPE",
"BASE_TICKS",
"TICKS",
],
line_number,
&mut errors,
);
for (key, expected) in [
("IPI", "SGI1"),
("CPU0_TO_CPU1", "2"),
("ROUNDS", "2"),
("SAME_CHANNEL", "YES"),
("SGIR", "0x00020001"),
("SENDS", "2"),
("DELIVERIES", "2"),
("ACKS", "2"),
("EOIS", "2"),
("RESCHED", "2"),
("TASK_WAKE", "2"),
("TASK_RUNS", "2"),
("PROGRESS_R1", "3"),
("PROGRESS_R2", "3"),
("STACK", "REUSED_STATIC64K"),
("SAME_STACK_REGION", "YES"),
("QUIESCENT_BETWEEN", "YES"),
("FINAL_PENDING", "0"),
("FINAL_ACTIVE", "0"),
("EOIMODE", "DROP_DEACTIVATE"),
("GIC_REINIT", "OFF"),
("RETURN", "IDLE"),
("IRQ", "MASKED"),
("TIMER", "OFF"),
("GENERIC_SMP", "OFF"),
("MIGRATION", "OFF"),
("TLB_SHOOTDOWN", "OFF"),
("CPU2_3", "OFF"),
("SCOPE", "CPU1_TWO_REMOTE_WAKES_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!("G8e marker order mismatch: {ordered:?}"));
}
if let (Some(boot8d), Some(g8e0)) = (boot8d_line, ordered.first().copied()) {
if boot8d >= g8e0 {
errors.push(format!(
"BOOT8D must precede G8E0: BOOT8D@{boot8d}, G8E0@{g8e0}"
));
}
}
if let (Some(g8d), Some(start)) = (&g8d, start_ticks) {
if start < g8d.boot8d_ticks || start - g8d.boot8d_ticks > MAX_G8D_HANDOFF_TICKS {
errors.push(format!(
"G8E0 START_TICKS must be within {MAX_G8D_HANDOFF_TICKS} ticks of BOOT8D: boot8d={}, start={start}",
g8d.boot8d_ticks,
));
}
let observed_gap = start.saturating_sub(g8d.task_tick);
if gap_ticks != Some(observed_gap) {
errors.push(format!(
"G8E0 GAP_TICKS must equal START_TICKS minus G8d round-1 task tick: task={}, start={start}, gap={gap_ticks:?}",
g8d.task_tick,
));
}
if observed_gap < MIN_INTER_WAKE_TICKS || observed_gap > MAX_INTER_WAKE_TICKS {
errors.push(format!(
"G8E0 inter-wake gap must be in {MIN_INTER_WAKE_TICKS}..={MAX_INTER_WAKE_TICKS}: {observed_gap}"
));
}
}
if boot_base != start_ticks {
errors.push(format!(
"BOOT8E BASE_TICKS must equal G8E0 START_TICKS: start={start_ticks:?}, base={boot_base:?}"
));
}
if let (Some(start), Some(send)) = (start_ticks, send_tick) {
if send < start || send - start > MAX_STAGE_WAIT_TICKS {
errors.push(format!(
"G8E0 SEND_TICK must be within the bounded stage window: start={start}, send={send}"
));
}
}
if let (Some(send), Some(irq)) = (send_tick, irq_tick) {
if irq < send || irq - send > MAX_STAGE_WAIT_TICKS {
errors.push(format!(
"G8E1 TICK must follow SEND_TICK within the bounded stage window: send={send}, irq={irq}"
));
}
}
if let (Some(send), Some(irq), Some(task)) = (send_tick, irq_tick, task_tick) {
if task < irq || task < send || task - send > MAX_STAGE_WAIT_TICKS {
errors.push(format!(
"G8E2 TICK must follow G8E1 within the bounded stage window: send={send}, 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!(
"BOOT8E 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!(
"BOOT8E TICKS must not precede G8E2: G8E2={task_tick:?}, BOOT8E={end}"
));
}
}
if task_sp.is_some_and(|sp| sp == 0 || sp & 0xf != 0) {
errors.push(format!(
"G8E2 STACK_SP must be non-zero and 16-byte aligned: {task_sp:?}"
));
}
if ack_raw != eoi_raw {
errors.push(format!(
"G8E1 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!(
"G8E1 ACK_RAW INTID mismatch: expected {SGI_INTID}, raw=0x{raw:x}"
));
}
if (raw >> 10) & 0x7 != SOURCE_CPU_INDEX {
errors.push(format!(
"G8E1 ACK_RAW source mismatch: expected {SOURCE_CPU_INDEX}, raw=0x{raw:x}"
));
}
}
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("BOOT8E requires a CPU0 SEC timer sample after G8E2".to_string());
}
}
if TARGET_MPIDR != 0x100
|| TARGET_CPU_INDEX != 1
|| TARGET_LIST != 0x02
|| SGI_INTID != 1
|| SGIR_COMMAND != 0x0002_0001
|| PRIOR_ROUNDS != 1
|| NEW_ROUNDS != 1
|| TOTAL_ROUNDS != 2
|| EXPECTED_NEW_SENDS != 1
|| EXPECTED_NEW_DELIVERIES != 1
|| EXPECTED_NEW_ACKS != 1
|| EXPECTED_NEW_EOIS != 1
|| EXPECTED_NEW_RESCHEDULES != 1
|| EXPECTED_NEW_WAKEUPS != 1
|| EXPECTED_NEW_TASK_RUNS != 1
|| EXPECTED_TOTAL_SENDS != 2
|| EXPECTED_TOTAL_DELIVERIES != 2
|| EXPECTED_TOTAL_ACKS != 2
|| EXPECTED_TOTAL_EOIS != 2
|| EXPECTED_TOTAL_RESCHEDULES != 2
|| EXPECTED_TOTAL_WAKEUPS != 2
|| EXPECTED_TOTAL_TASK_RUNS != 2
|| TASK_PROGRESS != 3
|| TASK_STACK_BYTES != 64 * 1024
{
errors.push("compiled G8e contract constants are inconsistent".to_string());
}
if errors.is_empty() {
Ok(G8eEvidence {
g8d: g8d.expect("validated G8d prerequisite"),
start_ticks: start_ticks.expect("validated G8e start ticks"),
send_tick: send_tick.expect("validated G8e send tick"),
irq_tick: irq_tick.expect("validated G8e IRQ tick"),
task_tick: task_tick.expect("validated G8e task tick"),
boot8e_ticks: boot_ticks.expect("validated BOOT8E ticks"),
inter_wake_ticks: gap_ticks.expect("validated inter-wake gap"),
task_sp: task_sp.expect("validated G8e task SP"),
ack_raw: ack_raw.expect("validated G8e acknowledge"),
})
} else {
Err(ValidationError { messages: errors })
}
}snippet sha256: 1a786c82342b…file sha256: b74355a630bd…
02 · Doğrulayan test kodu
Operations komutuna bağlı focused test
tam Rust öğesiL245–L289
simulation/tests/rpi5_g8e_uart.rs::order_handoff_gap_and_cpu0_timer_correlation_are_bounded
#[test]
fn order_handoff_gap_and_cpu0_timer_correlation_are_bounded() {
let duplicate = format!("{}{}", pass(), G8E_SUFFIX);
assert!(has(&failures(duplicate), "must occur exactly once"));
let first = G8E_SUFFIX.lines().next().expect("G8E0");
let second = G8E_SUFFIX.lines().nth(1).expect("G8E1");
let reordered = replace_suffix(
&format!("{first}\n{second}\n"),
&format!("{second}\n{first}\n"),
);
assert!(has(&failures(reordered), "marker order mismatch"));
assert!(has(
&failures(replace_suffix("START_TICKS=1000", "START_TICKS=1006")),
"within 5 ticks of BOOT8D"
));
assert!(has(
&failures(replace_suffix("GAP_TICKS=99", "GAP_TICKS=98")),
"must equal START_TICKS minus"
));
assert!(has(
&failures(replace_suffix("SEND_TICK=1000", "SEND_TICK=1101")),
"bounded stage window"
));
assert!(has(
&failures(replace_suffix("TICK=1001", "TICK=1101")),
"bounded stage window"
));
assert!(has(
&failures(replace_suffix(
"BASE_TICKS=1000 TICKS=1100",
"BASE_TICKS=1000 TICKS=1009"
)),
"timer delta must be at least"
));
assert!(has(
&failures(replace_suffix(
"[SEC 11] ticks=1100 drift=+0 µs (+6 count)\n",
""
)),
"requires a CPU0 SEC timer sample"
));
}snippet sha256: f1592e0273e7…file sha256: 0c76cfeee14a…
03 · Kapı kimlik kaydı
Operations sıra, kimlik ve başlık bağı
tam Operations kaydıL30450–L30535
website/src/lib/operations.ts::rpi5-g8f-runtime-layout-image-staged
{
id: "rpi5-g8f-runtime-layout-image-staged",
date: "2026-08-21",
sequence: 73,
status: "verified",
title: "G8f runtime yarış audit'iyle GO; layout ve BOOT8F image staged",
summary:
"Sıra 72'nin intentional RED source sözleşmesi gerçek RPi5-only G8f runtime ve iki G8e→G8f handoff seam'iyle tamamlandı. Bağımsız audit ilk runtime taslağında exact deadline anındaki geçerli ACK'in eski stage örneği yüzünden yanlış timeout/rejection'a düşebildiği sınır yarışını kesin STOP olarak buldu; invalid ACK kabulü söz konusu değildi. ACK wait tick-first olacak, `ticks > deadline` kontrolü stage kabulünden önce çalışacak ve deadline anında son fresh Acquire fırsatı verilecek şekilde düzeltildi; ACK kabulünde yeniden örneklenen tick de deadline'a karşı doğrulandı ve audit GO verdi. G8f source 7/7, UART 9/9; immutable G8e source 10/10, UART 9/9 geçti. G8a–G8f unique host toplamı 100/100, image zincirindeki unique host toplamı 132/132 ve G8e regresyon tekrarı dahil gerçek test yürütümü 151/151 oldu. Pre-MMU, G7c, G7d ve production ELF üzerindeki G8–G8f altı layout gate'i PASS verdi. Exact 279.936 bayt BOOT8F image ve üç dosyalı manifest üretildi; bu host/layout/image staged doğrulamasıdır, microSD veya fiziksel BOOT8F PASS değildir.",
evidence: [
"G8f runtime `kernel/src/rpi5_g8f.rs` exact 22.747 B / 0630390806ec8b61449ebd9e43ce537995647b2ff2a5e610edb32bbea742a621; G8e primary BOOT8E sonrasında CPU0 handoff'u, parked CPU1 yolu release poll ve secondary handoff'u exact bounded seam olarak taşır.",
"Bağımsız machine/source audit ilk draftta exact-deadline valid-ACK false-timeout/rejection yarışını STOP buldu; düzeltme tick-first örnekleme, strict `ticks > deadline`, bundan sonra fresh `STAGE.load(Ordering::Acquire)` ve kabul anında yeniden örneklenen `ack_tick <= deadline` sırasını kurdu; final audit GO verdi.",
"Hardened G8f source TDD exact 14.618 B / da693d729214e72d9c608e467f1c0b65fc302573b9f325ab55cb102fa88b1ba5; inclusive deadline valid-ACK false-timeout/rejection adversarial source sırasını fail-closed dondurur.",
"Targeted host G8f source 7/7 + UART 9/9 ve G8e source 10/10 + UART 9/9 = 35/35 PASS verdi.",
"G8a–G8f unique host testleri 100/100; image prerequisite zincirindeki bütün unique G7c–G8f host testleri 132/132; G8f hedefindeki kasıtlı G8e regresyon tekrarı dahil gerçek yürütüm 151/151 PASS oldu.",
"Pre-MMU atomics, G7c trusted ELF, G7d frame ve production AArch64 G8/G8b/G8c/G8d/G8e/G8f layout kapıları PASS; G8–G8f layout toplamı 6/6'dır.",
"G8e layout gate exact 24.610 B / 242c91b3ab90e27bc8c984ba6773e5fb83bdfe62efdbe470d4ba616c2eaa58c5; G8f layout gate exact 28.547 B / fc5f6d49e7ff72128e631f6c70d20c4f92777f64c981ce9ae1eefb1f8bfd2133.",
"Production RPi5 ELF exact 7.505.752 B / 4cfd92a35dd38a40e5a14c9bc75b1db6e9e8fe09483cff92a60cc33c348f0291.",
"Raw RPi5 image exact 279.936 B / 316be86f1d11c3522b550abd90c04beb77f0d12f01625e8e6d3bc014672c0f21; G8F0/G8F1/BOOT8F package marker sayıları 1/1/1'dir.",
"Paket DTB exact 78.703 B / 40a2fbe9c29e8b9a4912cf726a943068defb779fc052ec38e457a79c58abca00 ve config exact 501 B / 1248275cdc6f6ce951ce0ff2183471d194c5b9bb58c3dc3f66efa9156f91d76b.",
"SHA256SUMS exact 248 B / 73874fad8eaebe46b4ac20fe25b579ef32545a1457358178be2bf0045fa8769c; image/DTB/config manifest doğrulaması 3/3 PASS verdi.",
"G8f staged proof exact 14.302 B / 93d327e8cdb73a09e22b907d259fe1943d885d7f14e7deb915e1d770d368c8a4; mevcut fiziksel G8e temelini immutable tutup G8f'i host/layout/image-staged olarak sınırlar.",
],
terminalSessionsNote:
"Oturumlar gerçek audit, hedefli test ve final image üretim çıktılarının seçilmiş satırlarını taşır. Başarılı build çıktısı fiziksel UART veya microSD kanıtı değildir.",
terminalSessions: [
{
id: "g8f-boundary-race-audit-go",
title:
"Exact deadline valid-ACK false-timeout STOP ve tick-first GO düzeltmesi",
commandLines: [
"inspect G8f ACK wait machine/source order at the exact deadline boundary",
"rg -n 'let ticks|ticks > deadline|STAGE.load\\(Ordering::Acquire\\)|ack_tick <= deadline' kernel/src/rpi5_g8f.rs simulation/tests/rpi5_g8f_source.rs",
"cargo test -p aselsan_microkernel_simulation --test rpi5_g8e_source --test rpi5_g8e_uart --test rpi5_g8f_source --test rpi5_g8f_uart",
],
outputLines: [
"first independent audit=STOP · exact-deadline valid-ACK false-timeout/rejection race",
"fix=tick-first · strict ticks > deadline · final fresh Acquire · ack_tick <= deadline",
"final independent audit=GO",
"G8e source/UART=10/10+9/9 · G8f source/UART=7/7+9/9 · total=35/35 PASS",
],
exitCode: 0,
outputMode: "selected",
},
{
id: "g8f-host-layout-image-final",
title: "Host toplamları, production layout ve final image zinciri",
commandLines: [
"make verify-rpi5-g8f-host",
"make verify-rpi5-g8-host verify-rpi5-g8b-host verify-rpi5-g8c-host verify-rpi5-g8d-host verify-rpi5-g8e-host",
"make image-rpi5",
],
outputLines: [
"G8f target=35/35 PASS · G8a–G8f unique=100/100 PASS",
"all unique image host=132/132 · actual executions with G8e regression repeat=151/151",
"pre-MMU/G7c/G7d=PASS · G8/G8b/G8c/G8d/G8e/G8f layout=6/6 PASS",
"make image-rpi5 exit=0 · package manifest=3/3 OK",
],
exitCode: 0,
outputMode: "complete",
},
{
id: "g8f-package-hash-freeze",
title: "ELF, BOOT8F image ve üçlü paket manifesti",
commandLines: [
"wc -c target/rpi5/aarch64-unknown-none/debug/aselsan_kernel build/rpi5/{aselsanos-rpi5.img,bcm2712-rpi-5-b.dtb,config.txt,SHA256SUMS}",
"shasum -a 256 target/rpi5/aarch64-unknown-none/debug/aselsan_kernel build/rpi5/{aselsanos-rpi5.img,bcm2712-rpi-5-b.dtb,config.txt,SHA256SUMS}",
"count G8F0/G8F1/BOOT8F strings in packaged raw image",
],
outputLines: [
"ELF=7505752 B · 4cfd92a35dd38a40e5a14c9bc75b1db6e9e8fe09483cff92a60cc33c348f0291",
"image=279936 B · 316be86f1d11c3522b550abd90c04beb77f0d12f01625e8e6d3bc014672c0f21",
"DTB=78703 B · 40a2fbe9…abca00 · config=501 B · 1248275c…1d76b",
"SHA256SUMS=248 B · 73874fad…69c · G8F0/G8F1/BOOT8F=1/1/1",
],
exitCode: 0,
outputMode: "complete",
},
],
limitations: [
"Bu kayıt host/source/parser, production machine-code layout ve image/package staged doğrulamasıdır; yeni microSD yazımı, UART10 capture veya fiziksel G8F0/G8F1/BOOT8F boot kanıtı yoktur.",
"Üç-board/QEMU tam matrisi, web birleşik matrisi ve temiz-workspace reproducibility Sıra 73 anında hâlâ ayrı ve devam eden kapılardır; bu kayıt onları PASS saymaz.",
"Generic SMP, per-CPU periodic timer, local preemption/runqueue, migration, ASID/TLBI shootdown, CPU2/CPU3, soak ve hotplug kapalıdır.",
"Website yayını yalnız canonical custom domain üzerinden doğrulanır; bu ortamda reset veren pages.dev direct smoke için başarı iddia edilmez.",
"Wrangler yayını dirty/untracked workspace'ten ve stale 47d22c9 source etiketiyle yapılır; canlı artifact hash'i doğrulansa da Git-provider provenance kurulmuş sayılmaz.",
],
},snippet sha256: e111536a2a45…file sha256: 9726dbf00f84…
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test rpi5_g8e_source --test rpi5_g8e_uart --test rpi5_g8f_source --test rpi5_g8f_uartRegistry schema v5 · generator
website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9