127 defects annotated from the transcript by subagents, validated by tools/defects.py (every tool id exists, every evidence quote is verbatim in its chunk). Revealed by links to the oracle that found the defect. The last column links to the tool call that first showed the defect, the edits that fixed it and the run that confirmed the fix.
| id | type | component | defect | symptom / revealed by | first seen · fixed by · confirmed by |
|---|---|---|---|---|---|
| D-C01-01 | Product | kernel | ISR stub table in idt_stubs.S used the invalid NASM token-pasting syntax isr_stub_%[i] inside a %rep loop; it had to be rewritten as isr_stub_%+i.- dd isr_stub_%[i] + dd isr_stub_%+i | build-error | WNryNck7 · rihUr1i8 · X3ZM6ohd |
| D-C01-02 | Product | kernel | string.c and selftest.c used uint8_t/uintptr types without including <stdint.h>.+ #include "string.h" #include <stdint.h> void *memcpy | build-error | jm4eLMdu · 3xp9kX1r, CMwTK4Mr · X3ZM6ohd |
| D-C01-03 | Product | kernel | Allocator self-test referenced an undefined constant HEAP_SIZE_FOR_TEST for the post-free coalescing allocation; replaced with a literal 512KB.void *c = kmalloc(HEAP_SIZE_FOR_TEST - 1024); | build-error | Q2gzFNkv · w4wNnmtz · iC2nKrN4 |
| D-C01-04 | Product | fs | mkfs_tinyfs host tool called an undefined/ad-hoc strlen_local helper instead of including <string.h> and using strlen.tinyfs_write(name, contents, (uint32_t)strlen_local(contents)); | build-error | EXT8vJVh · JaEvocSb, ArvmHVm3 · 3u5NDp6N |
| D-C01-05 | Product | kernel | Kernel .bss was never zeroed because objcopy -O binary drops NOBITS sections, so the raw disk-loaded kernel had uninitialized globals; entry.S now zeroes _bss_start.._bss_end.; Zero .bss: the raw disk-loaded kernel image has no zero-fill
; guarantee (objcopy -O binary drops NOBITS sections entirely). | data-corruption | N9wDKqzy · Kb4pjThS, N9wDKqzy · rT2faZhz |
| D-C01-07 | Product | fs | A comment in mkfs_tinyfs.c contained 'tests/*.tsh', whose '/*' triggered a nested-comment compiler warning.Clean kernel build; fixing a minor comment-nesting warning in the host tool. | build-error | qEPJpXv5 · bp2gfJqS · XBbGsiFP (os run) |
| D-C01-09 | Product | boot | After raising the kernel budget to 512 sectors, stage2's single INT13h AH=0x42 read of the whole kernel silently failed (SeaBIOS per-call sector limit), so boot hung before SELFTEST; fixed by a 64-sector chunked read loop.run_tests: FAIL - timed out waiting for 'SELFTEST PASS' | hang | DSZXcFEE (os run) · rMTKZqD2 · H8wtZPfU (os run) |
| D-C01-08 | Product | lang-script | eval_binop handled TOK_PLUS only in the string-concat branch, so int+int fell through to return 0, making sums 0 and 'i = i + 1' an infinite loop.`eval_binop` never handles `TOK_PLUS` for two ints — only the string-concat path checks it, so int+int silently falls through to `default: return VAL_ZERO` | hang | oVDH3jU8 (os run) · H6v3XX8H · XBbGsiFP (os run) |
| D-C09-01 | Product | game | game.c rng_range() took a modulo of a full-range uint32_t RNG value, which CC compiles as signed idiv, so sign-bit-set values gave a negative index and an out-of-bounds moves[] read (garbage move name, absurd damage).Found a real bug: `rng_range`'s modulo on a full-range `uint32_t` hits CC's known "signed-`idiv`-only" limitation | wrong-output | 9Fatjr66 · yei5AAZk · PSbLJXMf |
| D-C09-05 | Product | vga | Switching to mode 13h and drawing clobbered the text-mode font in VGA plane 2, and vga_set_text_mode only restored registers, so the shell showed garbage glyphs after returning to text mode.drawing in mode 13h clobbers it - text mode "restores" registers-wise but shows garbage glyphs. I need to reload the font into plane 2. | visual | B2QRFQ16 · 8n172B9o · 1LTz9wXn |
| D-C09-06 | Product | vga | vga_select_font_plane used wrong register values for plane-2 access (SEQ[4] 0x07 with chain bit instead of 0x06, GC[6] 0x00/0x04/0x05 guesses), so the restored font did not land in plane 2.my font-access values had bits wrong (an extra bit set in SEQ[4], and GC[6] pointing at the wrong addressing mode) | visual | sYVvaEBF · SaNQHKta, WmXmB8DK, jcsGYmzK · 1LTz9wXn |
| D-C09-07 | Product | vga | vga_set_text_mode restored the font into plane 2 before loading text-mode CRTC/AC registers, but plane-2 writes only land correctly once the CRTC is in a text-like state, so after-restore plane contents were still wrong.vga_debug_dump_font showed that plane-2 reads/writes at 0xA0000 only land correctly when the CRTC is already in a text-mode-like state | visual | N1AaAb4K · N6pBjghX · 1LTz9wXn |
| D-C10-01 | Product | game | battle_gui.c and game.c used brace initializers on non-static local arrays (xs[3], label[4], pow_str[12], parts[4]), which the self-hosted tinyC compiler does not support; rewritten as static arrays or element-by-element assignments.Confirmed — brace initializers aren't supported for stack locals. Fixing both spots. | build-error | zzb9DU9s · woTsu2Vt, DtcvqEF4, eYpa5QZX, bHEnHqeT · VBFtHais |
| D-C10-02 | Product | game | Battle scene layout put the player's sprite/platform low on the ground band, so the message box drawn on top of it clipped the player sprite.The player sprite is getting clipped by the message box. Let me redesign the battlefield proportions so the ground band ends above the box | visual | TrMThBAN · bVgMM5mD, P6eGNUPX · XotdmPBc |
| D-C10-03 | Product | vga | The mode 13h CRTC table left the hardware text cursor enabled (cursor-start register 0x0A = 0x00), so a stray cursor dot showed through near the message-box border; set to 0x20 to disable it.That stray dot near the message-box border is likely the VGA hardware text cursor (still enabled per the reference CRTC table) bleeding through in graphics mode. Disabling it. | visual | k8pjAbDu · PSqD4D4d · — |
| D-C10-04 | Product | game | Each graphical battle message was overwritten by the next draw right away, too fast for a human to read; added a busy-wait gui_pause (about 1 s per message) because the kernel has no timer interrupt.messages currently flash by too fast for a human to read before the next state overwrites them | visual | tyHqzLeD · 7DQrJB73 · eQHmFTcb |
| D-C02-02 | Product | AS | AS parser evaluated `$` as ctx->org_valid_offset instead of the current section offset.return val_const((int64_t)(ps->ctx->org_valid_offset)); | wrong-output | p8A2mtrG · p8A2mtrG · YUdEw4pk |
| D-C02-03 | Product | AS | AS encoder checked operand b instead of a for the `rep stosb` form (wrong operand slot).the `rep stosb` check reads the wrong operand slot. | wrong-output | 82h6gJTf · 82h6gJTf · YUdEw4pk |
| D-C02-04 | Product | AS | AS eval_primary folded already-defined labels to their raw section offset at parse time, bypassing ORG adjustment and relocation emission.`eval_primary` was resolving backward-referenced labels straight to their raw section offset, bypassing the org-adjustment / relocation logic in `stmt_encode` entirely. | wrong-output | 3Bw47ojc · EGyj9a3j, NffCPQJp · YUdEw4pk |
| D-C02-05 | Product | AS | AS ELF output left REL relocation addends as 0 instead of baking them into the relocated bytes (abs32 and pc32 with -4 addend).for x86 ELF `REL` relocations (implicit addend), the addend must be baked into the actual bytes, not left as 0. | wrong-output | P8GLWfLk · PAmdKhbT, 8Sr9sLLL · LkFGk3zC |
| D-C02-06 | Product | AS | AS elf_writer had an unused-but-set variable shidx_rel causing a -Wextra warning; first fix left a remaining use.elf_writer.c:81:9: warning: variable ‘shidx_rel’ set but not used [-Wunused-but-set-variable] | build-error | Fv2sNjFE · KApbDdbW, LyRi8u55 · b7KMMaKt |
| D-C02-07 | Product | AS | AS did not handle a bare-constant jump target with no symbol (`jmp KERNEL_LOAD_ADDR`), failing stage2.S with an empty undefined symbol.as: undefined symbol '' | build-error | aKmwz56p · uLUQToPu · YUdEw4pk |
| D-C02-08 | Product | AS | AS resolve_pcrel's next_ip (address after the relative field) was not ORG-adjusted in -f bin mode while the target was, corrupting every relative jump/call.`resolve_pcrel`'s `next_ip` parameter wasn't org-adjusted for `-f bin` mode while the resolved target was, corrupting every relative jump/call offset in bin mode. | wrong-output | aKmwz56p · uLUQToPu · YUdEw4pk |
| D-C02-09 | Product | AS | AS resolved EQUs eagerly at parse time, so forward-referenced CODE_SEG in the far jmp became segment 0, triple-faulting stage2 on mode switch.`CODE_SEG` (an `EQU`) is used in `jmp CODE_SEG:protected_mode_entry` at the *top* of the file, but not defined until later ... the far-jump's segment silently became 0. | crash-or-exception | BDhPimTt · uT2hwg2w, RkY8oriS, 1W7PuLED, kk24GG4i · 9k6tdMKx |
| D-C02-10 | Product | AS | AS parser only accepted size keywords before a memory operand, so `push dword 0` (size hint on an immediate) in idt_stubs.S failed.`push dword 0` uses `dword` as an immediate-size hint, not before a memory operand — my parser only handled the `[...]` case. | build-error | aMbk9gm7 · wF71SRU6 · 78AiD2fK |
| D-C02-11 | Product | AS | AS used strncpy(..., MAX_NAME-1) without guaranteed termination, triggering -Wstringop-truncation warnings at -O2; replaced with safe_strcpy.warning: ‘__builtin_strncpy’ output may be truncated copying 63 bytes from a string of length 511 [-Wstringop-truncation] | build-error | vHpjfv1n · HnLf7dCK, aBEEMALB, SRE7TADn, QAxUjKtF, Jkg13HNZ · 3p58HE7M |
| D-C02-12 | Product | AS | AS qualify_local used snprintf into a fixed buffer, triggering a -Wformat-truncation warning at -O2; rewritten as a manual bounded copy.__glibc_objsize (__s), __fmt, ... __va_arg_pack ()); | build-error | 3p58HE7M · favhRSPn · roeFtHUf |
| D-C03-05 | Product | AS | AS parse_mem handled [reg+disp] but not [reg-disp], so 'mov dword [ebp-4], 6' failed to assemble.as: /tmp/as_ext_test.S:14: expected ] ... `parse_mem` in `AS` only handles `[reg+disp]`, not `[reg-disp]` | build-error | tRZhmTei · t9JYfT1n · kqEER37k |
| D-C03-06 | Product | AS | AS encode_rm32 had no case for a general-register base like [ebx]; it fell through to the bare-label disp32-direct encoding and silently corrupted the address.`encode_rm32` had no case for a general register base (like `[ebx]`); it fell through to the "bare label, disp32-direct" branch, silently corrupting the address | crash-or-exception | kqEER37k · g3Ut8LdM · — |
| D-C03-16 | Product | AS | AS ELF writer set a symbol's st_shndx to 1 + section_kind instead of the actual ELF section index, so .bss symbols pointed at the wrong section when .data was absent (segfault at run time).symbol `st_shndx` was computed as `1 + section_kind_enum` ... Since this file has no `.data` section, `.bss` actually lands at ELF section index 2, not 3 | crash-or-exception | efYRLJFH (toolchain run) · wGVX43uQ · ye6JvRgG (toolchain run) |
| D-C04-12 | Product | AS | AS parsed at most 2 operands, silently dropping the immediate of 3-operand 'imul reg, reg, imm' and encoding a self-multiply, which broke array indexing (argv[1] read garbage -> EFAULT/segfault).`imul ecx, ecx, 4` (3-operand immediate form) is being mis-encoded as the 2-operand `imul ecx, ecx`, silently dropping the multiply-by-4 scale | crash-or-exception | hpd19paT · B6WkB18Q, 4HM23snt, hujuHXFM, LoCW5XDF · qS3JQXL8 |
| D-C04-16 | Product | AS | AS had no encoding for register-indirect 'call r32' (FF /2), needed by CC's new indirect-call codegen.call r/m32 (FF /2) - indirect call through a register, e.g. a function-pointer variable's loaded value | build-error | XKtY6Y9u · B35GetAU · wcycFu2e |
| D-C05-07 | Product | AS | AS lacked the 32-bit register-indirect forms of lidt/lgdt (e.g. lidt [ecx] emitted by CC's builtins); lgdt only had the hardcoded 16-bit disp16 form.as: line 148: unsupported instruction form: lidt | build-error | SUxKa7Ek · xThuwuLC · cyuaX7rg (toolchain run) |
| D-C05-14 | Product | AS | AS's far-jump encoder always emitted a 16-bit offset, so in 32-bit code `jmp 0x08:label` in gdt_flush was 2 bytes short, which caused a GPF and then a triple fault at boot.the far-jump encoder always writes a 16-bit offset (`e16`), but in 32-bit mode the `EA` far-jump instruction needs a 32-bit offset — it's 2 bytes short | crash-or-exception | eFUksXH7 (os run) · d33rUByF · NMaAXq1d (os run) |
| D-C06-02 | Product | AS | AS had no 32-bit-mode mov r16, r/m16 / mov r/m16, r16 memory forms (e.g. mov ax,[eax] / mov [ecx],ax), which the new 16-bit codegen needed.Let me add the 32-bit-mode `mov r16, m16` / `mov m16, r16` forms right after the register-to-register 16-bit form | other | MdhwGod5 · 2QEipNrn · ji9Gk77E (toolchain run) |
| D-C06-03 | Product | AS | AS encoded movzx r32, r16 (register form) with a spurious 0x66 prefix, turning movzx eax,ax into movzx ax,ax so the upper 16 bits were never cleared.`movzx eax, ax` (register-to-register form) incorrectly emits a `0x66` operand-size prefix, turning it into `movzx ax, ax` (a no-op) | wrong-output | rA7uSdUp (toolchain run) · QEoAXVvs · ji9Gk77E (toolchain run) |
| D-C06-04 | Product | AS | AS encoded in ax,dx (and out dx,ax) without the 0x66 operand-size prefix, so each inw read 32 bits from the ATA data port, dropping every other word and making tinyfs mount fail (bad superblock magic).`in ax, dx` is missing its `0x66` operand-size prefix — it's encoding a 32-bit `in eax, dx` instead, which reads **two words** from the ATA data port per call | data-corruption | kyyRPtLk (os run) · L6G4SdRB · hczG9Hth (os run) |
| D-C06-12 | Product | AS | AS fixed limits (MAX_STMTS 4096, MAX_SYMS 512, MAX_RELOCS 256) were too small for the larger struct-copy codegen output of eval.c, aborting the build.as: too many statements make: *** [Makefile:108: build/lang/script/eval.o] Error 1 | build-error | gfxG5CmA (os run) · LnzXmCjP · WzSyK1xW |
| D-C07-02 | Product | AS | elf_format.h (AS and LD copies) defined ELF32_ST_INFO/R_SYM/R_TYPE/R_INFO as function-like macros, unsupported by CC's preprocessor; converted to static inline functions.cc: toolchain/ld/elf_format.h:106: undeclared identifier (near 'info') | build-error | pLyMQgGf · B1HU8fYM, rTbrn7Ua · 8RkVpfXY |
| D-C07-04 | Product | AS | Three compound literals in AS/LD source ((token_t){.kind=TK_EOF}, (Elf32_Sym){0} x2) that CC does not support; replaced by memset + field assignment.cc: toolchain/ld/link_flat.c:105: expected expression (near '?') | build-error | pLyMQgGf · DWtENFdM, jUSFGCcv, 1aC38EKv · c8uc94at |
| D-C07-07 | Product | AS | AS pass2 wrote real zero bytes for .bss into a fixed 64KB section buffer; CC-generated code with a ~20MB .bss (AS's own ctx) overflowed it and segfaulted.Segmentation fault (core dumped) ./build/toolchain/as -f elf32 -o /tmp/y.o build/stage2/toolchain_as_elf_writer.S | crash-or-exception | eqPCLh7z · Fz2vCF3A · U6UVcnMn |
| D-C08-03 | Product | AS | Agent reverted debug-instrumented encode.c and elf_writer.c with `git checkout --`, which also discarded earlier uncommitted fixes (the .bss NULL-dst fix, elf32_st_info/r_info inline-function calls, the Elf32_Sym compound-literal replacement) that then had to be re-applied.grep -n 'SEC_BSS.*NULL\|dst = (sec == SEC_BSS)' toolchain/as/encode.c [OUT] ...(Bash completed with no output) | other | ama1ncCf · Ufbn9QDY, z3TGm1za, z12KHmNY · eNCN4z9d |
| D-C08-08 | Product | AS | AS's .dq directive computed the high dword with `v >> 32`, a no-op under x86 shift-count masking once int64_t is CC's 32-bit alias, so self-hosted AS corrupted boot.S's DAP LBA field and the OS never got past the boot sector.run_tests: FAIL - timed out waiting for 'SELFTEST PASS' ... boot.bin: DIFFERS ... 77 0 1 ... dq 1 ; starting LBA | hang | PyPbF44A (os run) · QVyCvfPZ · ev988HNP (os run) |
| D-C03-01 | Product | CC | CC preprocessor's #define body loop read the first token of the next line to detect end-of-body and silently discarded it (no token pushback in the lexer).the `#define` body-reading loop consumes the *next* line's first token to detect the boundary, then silently discards it | wrong-output | takbHEij · T2FxLv15, KpiicaHp, dDA8DejY, m33scuj3 · 6EKnXYoR |
| D-C03-02 | Product | CC | CC parser read array bounds and enum values as a single literal token, but the codebase's macro constants expand to arithmetic expressions like (1 + 1).array bounds in this codebase include computed macro constants (e.g. `TINYFS_INODE_BLOCK` expands to `(1 + 1)`, not a single literal) | wrong-output | 4GttoGg6 · ujwSQUM8, ezAGHE2u · qz5hmb4N |
| D-C03-03 | Product | CC | A comment in CC's parser.c contained '/*' inside a comment, triggering a -Wcomment build warning.parser.c:176:14: warning: ‘/*’ within comment [-Wcomment] | build-error | 8SB2tp19 · sK7utKG8 · bUtMRGPi |
| D-C03-04 | Product | CC | CC preprocessor only accepted #include "file" and rejected angle-bracket header names like #include <stdint.h>.cc: tests/toolchain/t01_basic.c:1: expected "file" after #include | build-error | 1vV1o9vc · v8Qn3dgf, vo8vAZYB, RqYyWnRP · 6EKnXYoR |
| D-C03-07 | Product | CC | CC codegen's compound assignment kept &a in a register that was clobbered (idiv/cdq) while computing the new value (ordering bug).ordering bug in compound-assign ... a register copy of it wouldn't survive an idiv/cdq | wrong-output | T8TABwEQ · 82uypMSp · SFJy1KXB |
| D-C03-08 | Product | CC | CC codegen emitted an xchg instruction that AS does not support.unnecessary `xchg` that AS doesn't support | build-error | T8TABwEQ · GVo4XuDb · SFJy1KXB |
| D-C03-09 | Product | CC | CC codegen_emit's loop declaring externs for called-but-undefined functions was broken, and string literals were never emitted.broken extern-declaration loop, missing string-literal emission | wrong-output | T8TABwEQ · 2jTkmScu · SFJy1KXB |
| D-C03-10 | Product | CC | CC's walk_collect emitted string-literal bytes immediately during the extern-collection pass, before any section directive, corrupting the assembly output.`walk_collect` emits string-literal bytes immediately during the extern-collection pass, before any `section` directive exists, corrupting the output | wrong-output | 2jTkmScu · kaWF2SDs · SFJy1KXB |
| D-C03-11 | Product | CC | CC codegen's local ND_VAR_DECL handling used a goto into another branch and the for-init handling did not walk multiple declarators.fragile `for`-init handling ... Now the `ND_VAR_DECL` goto mess and `ND_FOR` init handling | wrong-output | T8TABwEQ · 1rxihEBP, 2eGM4jdm · efYRLJFH (toolchain run) |
| D-C03-12 | Product | CC | CC host-target _start code was emitted after the .rodata section switch, so it would land in .rodata instead of .text.the `_start` code for host target got placed after the `.rodata` section switch, so it would land in `.rodata` instead of `.text` | wrong-output | kaWF2SDs · tyn8ZWv2 · SFJy1KXB |
| D-C03-13 | Product | CC | CC's __builtin_outb codegen contained dead scratch code.That `__builtin_outb`/`__builtin_gdt_flush` code is genuinely broken (dead scratch code, and a hardcoded label that would collide on repeated calls) | wrong-output | nUmfh4du · VgJKJNwC · dxwr9ay6 |
| D-C03-14 | Product | CC | CC's __builtin_gdt_flush emitted a hardcoded label that would collide if the builtin was used more than once.a hardcoded label that would collide on repeated calls | build-error | nUmfh4du · VgJKJNwC · — |
| D-C03-15 | Product | CC | CC codegen.c used va_start/va_end without including <stdarg.h>, so it failed to compile.codegen.c:28:5: error: implicit declaration of function ‘va_start’ | build-error | ygZcwDe3 · WCK75Kr9 · cJje3M9j |
| D-C03-17 | Product | CC | CC computed struct member offsets lazily in type_size(), which nothing called at definition time, so ./-> accesses used offset 0 for every member.FAIL t05_structs: expected 17, got 15 ... struct member offsets are computed lazily inside `type_size()`, but nothing calls `type_size()` at struct-definition time | wrong-output | ye6JvRgG (toolchain run) · 9YcxzF8U · rtdqfrR1 (toolchain run) |
| D-C03-19 | Product | CC | CC ignored the static storage class on functions and emitted every function as global.fix one known gap (static functions incorrectly emitted as `global`) ... (void)is_static; | wrong-output | o7YHjhgH · muF7VVFB, UCUJpceg · Bbtpvnpt (toolchain run) |
| D-C03-20 | Product | CC | CC preprocessor's resolve_include used snprintf into a fixed buffer, causing a format-truncation warning in the -O2 build.Let me fix this warning the same way I handled the similar one in `AS` — manual bounded concatenation instead of `snprintf`. | build-error | 9P7RL9bG (toolchain run) · 5xSDg7Ug · rwFfycPN (toolchain run) |
| D-C04-02 | Product | CC | CC's -I option only accepted the separated form '-I dir', not the gcc-style combined '-Ikernel' used by the Makefile, so kernel headers were not found.`CC`'s `-I` parsing only supports the separated form (`-I dir`), but the actual Makefile uses the combined form (`-Ikernel`) | build-error | uZPUzozH · WX82y3kV · mCA1wT95 |
| D-C04-03 | Product | CC | CC's argument parser treated any unrecognized flag (-Wall, -O2, -c, ...) as the input filename.`CC`'s arg parser treats *any* unrecognized flag as the input filename | build-error | uZPUzozH · Dr7qWvEL · mCA1wT95 |
| D-C04-04 | Product | CC | CC preprocessor reused a static per-depth path buffer for sibling #includes while token_t.file kept a raw pointer into it, so earlier tokens' filenames were retroactively overwritten (errors reported in string.h instead of tinyfs.h).`paths[depth]` is a static buffer reused by *every* `#include` at the same nesting depth ... `token_t.file` stores a raw pointer into it | wrong-output | mCA1wT95 · KT85R4Np · QvQeCZhE |
| D-C04-05 | Product | CC | CC preprocessor expanded macros only one level deep, so macro bodies referencing other macros (TINYFS_DATA_BLOCK -> TINYFS_INODE_BLOCK) left undeclared identifiers.The actual failure is nested macro expansion only recursing one level deep. | build-error | mCA1wT95 · EYJMViQh, eJUM9GAt · TvwcLrLh |
| D-C04-06 | Product | CC | CC's perr reported the token after the failing identifier (parser had already advanced), producing misleading 'near ?' diagnostics.`perr` reads `p->toks[p->pos]`, but by the time `resolve_ident` calls it, the parser has already advanced past the actual failing identifier | wrong-output | mCA1wT95 · iyoATcQV, LvhhhCxm, 757yr5n8, upr92nLK · PFqLVCbs (toolchain run) |
| D-C04-07 | Product | CC | CC's host _start did a bare 'call main', so argv received argv[0]'s value instead of the address of the argv array.`_start: call main` doesn't set up `argc`/`argv` per the Linux process-entry ABI ... `argv` receives `argv[0]`'s string-pointer value instead of the array pointer | crash-or-exception | 78cqDDcW · 7e6BaVwJ · qS3JQXL8 |
| D-C04-08 | Product | CC | CC did not recognize 'long' as a type keyword, so mkfs_tinyfs.c's 'long offset' failed to compile.`long` isn't a recognized type keyword in CC's dialect at all — `mkfs_tinyfs.c` uses it | build-error | w7fYpY8R · jcQgC5vr, TsQ8MUpW, s9Lv2UFi, nv3P9tJ8 · txZgqcLq (toolchain run) |
| D-C04-09 | Product | CC | CC codegen called walk_collect (which recurses into ->next) on every top-level node inside a loop over ->next, quadratically duplicating string literals/externs and causing duplicate labels in AS.the first call already walks the entire rest of the top-level chain, and then the loop re-walks the tail again on every subsequent iteration | build-error | jbf2VWfR · wK9r4DpP · rJmbo8be |
| D-C04-10 | Product | CC | CC never allocated storage for function-local static variables (only top-level decls were scanned for .data/.bss), leaving __static_N references unresolved.without this they'd be referenced (lea eax, [__static_N]) but never ac[tually allocated] | build-error | GfgegWVZ · WE58qKKP, EkQL8CjN, pfTeU3HS, mo8JxqoE · 5QuTMNsD |
| D-C04-11 | Product | CC | CC emitted _start/'call main' in every --target=host translation unit, so objects without main (tinyfs.c, string.c) failed with unresolved 'main'.`_start`/`call main` gets emitted into *every* `--target=host` compilation unit, not just the one that actually defines `main` | build-error | GfgegWVZ · mXUXH5HG · LLYkPmGr |
| D-C04-14 | Product | CC | CC codegen dereferenced a bare function name used as a value (callback argument) instead of decaying it to its address, passing 4 bytes of machine code as the function pointer.a bare function name used as a value ... must decay to its address, not be dereferenced — it was reading 4 bytes of the function's own machine code | crash-or-exception | u6YRTucV · NyS8b1Qb · wcycFu2e |
| D-C04-15 | Product | CC | CC always emitted a direct symbol call even when calling through a function-pointer variable (tinyfs's block_read/block_write), jumping to the variable's storage instead of the pointed-to function.SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x400000} | crash-or-exception | cDvqr7XF · EM1pGSjg, 5u3o5dXB, 4GdBw4ZC, sJ5asAaN · wcycFu2e |
| D-C05-01 | Product | CC | CC registered a struct tag only after parsing its body and allocated a fresh type on definition, so self-referential members (struct block_header *next) and forward-declared tags (typedef struct ast_node ast_node_t before the definition) failed to resolve.self-referential structs ... the struct's own tag only gets registered into the symbol table *after* its body is parsed | build-error | DQUBcJmJ · qH4NDjSh · R3KTrw3W |
| D-C05-02 | Product | CC | CC's parser had no switch/case/default support at all, so vm.c's bytecode dispatch loop and lexer.c failed to parse.`switch`/`case` isn't implemented in CC's parser at all — a real, substantial gap | build-error | DQUBcJmJ · gNRc6z7N, U6FnHXdQ, 9MQPAnQy · R3KTrw3W |
| D-C05-03 | Product | CC | CC's parameter-list parser did not handle function-pointer parameters of the form TYPE (*name)(PARAMS), so script/parser.c and compiler/parser.c failed to parse.FAIL kernel/lang/compiler/parser.c: cc: kernel/lang/compiler/parser.c:130: unexpected token (near '?') | build-error | R3KTrw3W · MwwYJn2P · jatCaCcg |
| D-C05-04 | Product | CC | CC's initializer parser did not support designated initializers, so eval.c's VAL_ZERO = { VAL_INT, { .i = 0 } } failed to parse; worked around by rewriting it positionally in the kernel source.`VAL_ZERO`'s designated initializer (`{ .i = 0 }`) is a real gap — CC's initializer parser has no support for designated initializers at all. | build-error | jatCaCcg · dQufw2x4 · 8k3ALiT8 |
| D-C05-05 | Product | CC | CC declared ND_COMMA but never implemented the comma operator in parser or codegen, so for-loop increments like `pn = pn->next, i++` failed to parse.`ND_COMMA` was declared but never actually implemented anywhere — the comma operator (`pn->next, i++` in a for-loop increment) simply doesn't parse. | build-error | 8k3ALiT8 · gz8TG7Td, WJPGHBGS · 4PwA3CVE |
| D-C05-08 | Product | CC | CC codegen only supported brace-init lists for globals; local aggregate initializers like `exec_result_t r = { EXEC_NORMAL, VAL_ZERO };` failed to compile.local (stack) variables ARE brace-initialized in this codebase (`exec_result_t r = { EXEC_NORMAL, VAL_ZERO };`), contrary to the existing assumption that only globals use brace-init | build-error | cyuaX7rg (toolchain run) · 6aQJbVaA, XqSazhuA · rkwt9n11 (toolchain run) |
| D-C05-09 | Product | CC | CC's emit_data_bytes had no struct/union path for global .data initializers, silently emitting wrong bytes for brace-initialized struct globals.properly implement struct-initializer support for both the global `.data` path (which has a silent-corruption bug, not just a crash) | data-corruption | dqv9j2TK · shrWpuTP · thZd1wY2 (toolchain run) |
| D-C05-10 | Product | CC | CC marked per-file generated labels __str_N and __static_N as global, so linking several translation units hit duplicate-symbol errors.ld: duplicate symbol '__str_0' (from build/idt.o) | build-error | Pqmz7nSu · YRqdZH4a, Mp4hnGf9 · QY2rK5if |
| D-C05-12 | Product | CC | CC gave extern variable declarations (extern uint32_t isr_stub_table[32];) their own .bss/.data storage and never emitted an `extern NAME` directive for them, which AS requires for undefined symbols.`extern` variable declarations get treated as real definitions, allocating their own `.bss`/`.data` storage instead of just referencing the symbol defined elsewhere | build-error | QY2rK5if · 3NLnWHpz, afzBgjLi, NngCnpZY · FYHEorz3 (toolchain run) |
| D-C05-13 | Product | CC | CC's earlier walk_collect dedup fix nulled n->next while recursing, which cut off prog's chain during the is_local scan, so forward-referenced functions defined later in the file (parse_statement) were wrongly declared extern.temporarily nulling `n->next` before recursing) corrupts `prog`'s chain *while it's being scanned* by `is_local`'s check | build-error | AXgW4JXX · pXinP6eY, MyXrKrhG · 2zabgwXj |
| D-C05-15 | Product | CC | CC's walk_collect treated indirect calls through function-pointer variables (tinyfs.c's block_read(...)) as calls to extern functions and emitted a spurious `extern block_read`.with indirect calls (my earlier fix), the callee can be a variable — it spuriously emits `extern block_read` even though `block_read` gets a real local definition later | wrong-output | 3Kj6uDmu · keoRXLFr · 4ZVUL6Pv (toolchain run) |
| D-C05-16 | Product | CC | CC's parse_global_var always set external linkage, so file-scope static variables (block_read/block_write in tinyfs.c) were emitted as global symbols.`parse_global_var` unconditionally sets `n->is_global = 1` regardless of the `static` keyword — every file-scope `static` variable ... gets external linkage | wrong-output | NiJYWbtH · 67xqJ5oE, QjZ5DB1t, 1X9XzYQm, KDY4q1fQ, acCoM9Kt · iVoUrqU2 |
| D-C06-01 | Product | CC | CC load_value/store_value had no 16-bit case, so a uint16_t store (p[i] = inw(...)) emitted a 4-byte mov [ecx], eax, doubling every write into the ATA sector buffer and corrupting kernel memory.`p[i] = inw(...)` where `p` is `uint16_t*` generates `mov [ecx], eax` (a 4-byte store) instead of a 2-byte store | data-corruption | 1jCb5puN · M1xxQNTq · ji9Gk77E (toolchain run) |
| D-C06-05 | Product | CC | CC never inferred array_len for a global `T name[] = {...}`, so sizeof(lower_table) was 0, TABLE_LEN was 0 and keyboard_getchar discarded every scancode, leaving the shell with no keyboard input.Our parser never computes the actual length for `[]` (leaves `array_len = -1`), so `sizeof(lower_table)` evaluates to 0 | hang | hczG9Hth (os run) · bZdAXjDz · dTH61jV7 (os run) |
| D-C06-06 | Product | CC | The array-size inference fix only covered globals; function-local `static const T ops[] = {...}` (script parser operator tables) still got size 0.these are `static` *local* array declarations with inferred size, a case my earlier fix (scoped to globals only) didn't cover | wrong-output | dTH61jV7 (os run) · cijSRtGi · 4ig98Kw5 (toolchain run) |
| D-C06-09 | Product | CC | CC had no struct/union by-value assignment: `*p = save;` copied only 4 bytes of parser_t, corrupting the script parser's backtracking state ('script: parse error: unexpected token').struct-by-value assignment/copy isn't supported at all — ... silently copying just 4 bytes of a ~90+ byte `parser_t` struct | wrong-output | wq3PVpfE (os run) · 3rx6Gc29, kxhaaXwZ · pfZy5xpC (toolchain run) |
| D-C06-10 | Product | CC | CC did not support struct-returning functions (no hidden-pointer ABI), so eval.c's mkint()/mkstr() value constructors returned garbage and `run hello.tsh` printed '2 2' in an endless loop.This requires implementing struct-by-value function returns (the classic "hidden pointer" ABI pattern) | hang | BK6A1cuV (os run) · FhWyBpZx, KFGpyge7, ZjEYf228, 9EkLEWbW · rj7LcpQ5 (os run) |
| D-C06-11 | Product | CC | CC passed struct/union parameters as a flat 4 bytes instead of copying the whole struct onto the stack (used by print_value(value_t v)).FAIL t14_struct_return: expected 44, got 145 | wrong-output | jZhApn6D (toolchain run) · iRTBeHRR, yXXcMF2q · sk27sg4C (toolchain run) |
| D-C06-13 | Product | CC | CC's read_escape had no case for \b (or \f, \v, \a), so '\b' lexed to the letter 'b' and every typed 'b' in the shell was treated as a backspace ('build' arrived as 'uild').`read_escape` doesn't handle `\b` (backspace) at all, so it falls through to the `default: return c;` case, returning the literal letter `'b'` | wrong-output | iaN3rAiL · DxJccFvg · yJ6zGae6 (os run) |
| D-C07-03 | Product | CC | CC's own lexer.c used a function-like TWO(c1,c2,kind) macro for two-char operators, which CC itself cannot preprocess; replaced by a try_two helper.Not a function-like macro (CC's preprocessor only supports object-like #define | build-error | pLyMQgGf · FqKtq9bQ, YPUgbCc6 · c8uc94at |
| D-C07-05 | Product | CC | CC's declarator parser accepted only one [N] group, so multi-dimensional arrays (g_externs[MAX_EXTERNS][MAX_NAME], param_names[16][MAX_NAME]) failed to parse; parse_array_dims added with correct outer-to-inner nesting.cc: toolchain/cc/codegen.c:655: unexpected token (near '?') | build-error | pLyMQgGf · dtpNCQyR, KenitQ8m, q41YDPVw · c8uc94at |
| D-C07-06 | Product | CC | codegen_addr had no case for a struct-returning ND_CALL used as an lvalue (line_peek(ln).kind in AS's parser.c), aborting codegen with an internal error.cc: internal error: not an lvalue (kind 17) name='line_peek' a_kind=-1 a_name='' g_cur_func='eval_primary' | build-error | dX4QgXb5 · ZrmZ3i1w · sprrEJH7 |
| D-C07-11 | Product | CC | parse_param_list decayed every bracket group of an array parameter to a pointer, typing char names[][MAX_NAME] as char** instead of char(*)[MAX_NAME]; Stage2 CC segfaulted on any function with parameters.Only the *outermost* dimension decays to a pointer - `T x[][M]` as a parameter is `T (*x)[M]`, not `T**`. | crash-or-exception | bWhYR4Uf (toolchain run) · YLqdqHg4, LPvdGcmd · jym3ECSD |
| D-C07-12 | Product | CC | A partial local brace-init (line_t ln = {0};) only initialized the listed elements and left the rest of the aggregate as stack garbage, sending Stage2 AS's line loop into a multi-million-iteration spin that looked like a hang.as: build/toolchain_tests/t01_basic.S:18263733: expected directive/instruction | hang | W2LMQ6kX (toolchain run) · kfuo3GUU · z47TEwTm |
| D-C07-13 | Product | CC | A string-literal initializer for a pointer-typed struct field in a global array (AS's REGS[] register table) was emitted as a null dd instead of a relocation to the string label, so Stage2 AS segfaulted in reg_lookup.DBG: reg_lookup entered name=ebp count=31 DBG: i=0 REGS[i].name_is_null=1 | crash-or-exception | z47TEwTm · 1uoVpqic · — |
| D-C08-01 | Product | CC | CC's parse_one_local_decl called add_local (which sizes and allocates the stack slot) before parsing the initializer, so an unsized local array like is_type_start's `const char *kws[] = {...}` got a zero-size slot whose initialization clobbered the frame; Stage2 CC segfaulted on any program containing a local declaration.DBG: is_type_start entered DBG: kws array built, kws[0]=void DBG: i=0 kws[i]=void exit=139 | crash-or-exception | zAWdrNdi (toolchain run) · 7xb731Ny · Cr4uXxb5 |
| D-C08-02 | Product | CC | CC compiled pointer-minus-pointer (elf_writer.c's `s - ctx->syms`) as pointer arithmetic (result typed as pointer, scaled by multiply) instead of an integer element count, corrupting the relocation symbol index and making Stage2 AS segfault on any input with a relocation.DBG: rel i=0 sym=g_inodes DBG: found sym, computing symidx | crash-or-exception | C6ejtmWN (toolchain run) · YWH26ZMe, sLLT9nYw · eNCN4z9d |
| D-C08-05 | Product | CC | CC's parse_struct_members had its own multi-dimensional array loop that nested array types in the wrong order (the bug already fixed in parse_declarator), so AS's 2-D struct member section buffers were mislaid and Stage2 AS wrote .data bytes into the .text section, producing crashing binaries (t11/t12).Found it — `parse_struct_members` has its own unfixed multi-dimensional array parsing loop (the same bug I fixed earlier in `parse_declarator`, but never applied here). | byte-mismatch | NpR6ihBd (toolchain run) · 9YpBpoFU · xXaRFvpA (toolchain run) |
| D-C08-06 | Product | CC | CC did not support `char x[N] = "literal"` (unbraced string init of a char array) for globals or locals; codegen's local `char default_label[MAX_NAME] = ""` left garbage, so Stage2 CC emitted `jmp Z` for a switch default.as: relocation against unknown symbol 'Z' ... char default_label[MAX_NAME] = ""; | wrong-output | 6qjovh4Q (toolchain run) · tBm7ihqQ, LQoMpQiL · xXaRFvpA (toolchain run) |
| D-C03-21 | Product | hostlib | The libc-free mkfs_tinyfs rewrite used #if defined(__TINYC__), which CC's preprocessor does not support; the syscall shim had to move into its own file.I used `#if defined(__TINYC__)`, but CC's preprocessor explicitly doesn't support `#if`/`#ifdef` | build-error | 6xtJCBB5 · JGjJgazt, 713HvMkx, eJ9joDR7 · KT4GqYQK |
| D-C04-01 | Product | LD | LD's classify_section() matched section names exactly, so nasm's '.text.entry' section in entry.o was dropped and _start vanished from the linked kernel (isr_stub_0 landed at the entry address).entry.o built by NASM ... names its section `.text.entry`, not `.text`, and my `classify_section()` only matched the exact string, silently dropping `_start` | wrong-output | ti6Z6LRs · Wvmd3jqc · Ef16BSXt |
| D-C07-01 | Product | hostlib | CC had no libc headers or runtime for --target=host, so AS/CC/LD's own source (stdio/stdlib/string/ctype/sys/stat) could not even be preprocessed; a minimal toolchain/include + toolchain/hostlib with __sys_brk/__sys_chmod builtins was added.cc: toolchain/ld/main.c:4: cannot find include file 'stdio.h' | build-error | GrQ2rRiX · CfPrhks5, hpTTmQpE, ZCyB5W7X, 2Rs2t96D, B6Qw1KLJ, P3SByssR, pbYNdmJY, nYuSPAP9, 3S9Gt9Uz, PebJhP31, biZXLe4R, aBnxapjC, 2hAGbgP3 · c8uc94at |
| D-C07-08 | Product | LD | LD's per-file symbol/relocation limits (512) and MAX_OUT_SYMS (2048) were too small for encode.o's 800+ symbols.ld: build/stage2/toolchain_as_encode.o: too many symbols | build-error | 4bPE5KMJ · StKVP24f, y8p3KDp6 · EfceXBah |
| D-C07-09 | Product | hostlib | hostlib had a chmod declaration in sys/stat.h but no implementation, so linking Stage2 LD failed with an undefined symbol; stat.c added.build/stage2/ld: cannot open `build/stage2/ld' (No such file or directory) | build-error | tSp8EVr3 · nsjYwyRp · y2PZprXd |
| D-C07-10 | Product | hostlib | hostlib lacked strtoul (used by ld/main.c for --flat-base), leaving an undefined symbol when linking Stage2 LD.toolchain/ld/main.c:128: flat_base = (uint32_t)strtoul(argv[++i], NULL, 0); | build-error | tfKzcZQ8 · JK7Xoey8, KEzw5ioD · y2PZprXd |
| D-C08-04 | Product | LD | LD's chmod(path, 0755) was read by CC as decimal 755 (CC's lexer has no octal literals), so Stage2-linked executables got nonsense permissions (octal 1363, -wxrw--wt).--wxrw--wt 1 martin martin 305 Jul 19 05:24 /tmp/t11 ... decimal 755 = octal 1363 | wrong-output | C7dXFaWM · nHNvfB5D · xXaRFvpA (toolchain run) |
| D-C01-06 | Product | build | Makefile used host:fs seed spec pairs (tests/hello.tsh:hello.tsh) directly as disk image prerequisites, which are not valid file targets; split into MKFS_SEED_FILES and MKFS_SEED_SPECS.# host-path:fs-name pairs seeded into every disk image; the host paths # alone are listed separately so they can be used as make prerequisites | build-error | nzM9SZPX · Hn5UbBDM, Jx1A5itk · qEPJpXv5 |
| D-C01-10 | Product | other | README demo transcript listed a hand-written placeholder size for hello.tc (206) that did not match the real disk image (272).updating the exact sizes (281/272 vs my placeholder 281/206) | wrong-output | C5Jbz5cY · xgYeKLye · — |
| D-C02-01 | Product | build | `make run` used -display none, so there was no input surface for the emulated PS/2 keyboard and the user could not type into the shell; a run-gui target was added.Root cause: `make run` uses `-display none`, so there's no window at all — no window means no input surface for the emulated PS/2 keyboard. | other | 8yDpoTAp · 4w1qJXaA, spqViNos · — |
| D-C05-06 | Product | build | The new self-hosted Makefile referenced $(BUILD) in := assignments before BUILD was defined.Right, `BUILD` needs to be defined before it's referenced with `:=`. | build-error | u8ZTx3vK · pEJ4qx84 · SUxKa7Ek |
| D-C05-11 | Product | build | The Makefile did not make compiled objects depend on the CC/AS binaries, so after rebuilding CC, stale .o files were reused and the old duplicate-symbol error came back until make clean.Stale objects — Make doesn't track that `CC`'s own source changed. Let me force a clean rebuild. | build-error | hEGBxaSn · — · — |
| D-C08-07 | Product | build | The Makefile's toolchain rule still used the old plain-gcc bootstrap instead of the new 3-stage bootstrap_selfhost.sh, so `make` did not build the OS with the verified self-hosted toolchain.The OS build used the old plain-gcc bootstrap rule, not the new 3-stage self-hosting script. | other | 3BSDa4cu · mHsQ4ujF · PmV6tR8d |
| D-C03-18 | Oracle tooling | test-harness | run_toolchain_tests.sh had no expected exit code for the t02_types fixture, so it was silently skipped and never executed.SKIP t02_types (no expected value registered) | other | efYRLJFH (toolchain run) · brR7AjPP · 86WUXdG3 (toolchain run) |
| D-C04-13 | Oracle tooling | test-harness | Toolchain test t04_pointers passed despite the broken imul encoding because writes and reads used the same wrong index formula, so the battery could not detect the bug.It self-cancels in `t04_pointers` because both the write (`nums[i]=`) and read (`a[i]`) use the same broken formula | other | UeYwZcbD · — · — |
| D-C04-17 | Oracle tooling | test-harness | Ad-hoc pipeline verification commands printed success lines ('CC: all three compiled OK', 'AS: all three assembled OK', 'LD: linked OK', cmp 'IDENTICAL') after steps had failed, hiding the failures and confusing the diagnosis.ld: cannot open /tmp/mkfs_build/tinyfs.o LD: linked OK | other | w7fYpY8R · — · etmxgztP |
| D-C04-18 | Oracle tooling | qemu | Booting QEMU with '-serial stdio' under timeout piped to head produced no output (exit 143), so the boot check had to be redone with serial to a log file and a backgrounded QEMU.Let me use the same pattern (serial to a log file, background QEMU) instead of `-serial stdio` under `timeout`. | other | aij33AGw · — · XJiF3g8N |
| D-C06-07 | Oracle tooling | test-harness | Block comments in the new t12 regression test (and the matching parser.c comment) contained the path kernel/lang/*/parser.c, whose `*/` closed the comment early so CC failed to parse the test.My comment text contained a literal `*/` sequence, prematurely closing the C block comment. | build-error | wKu3q8vB (toolchain run) · NWA6kUjL, xKM5hNw3 · 4ig98Kw5 (toolchain run) |
| D-C06-08 | Oracle tooling | test-harness | qemu_type.py's keymap has no mapping for '(' and similar characters, so ad-hoc scripts with call syntax could not be typed into the shell for diagnosis.ValueError: qemu_type: no key mapping for '(' | other | VDq1Sa62 · — · — |
| D-C08-09 | Oracle tooling | test-harness | Agent's ad-hoc kernel rebuild script put all objects in one flat directory, so two parser.c objects collided and the link failed with a duplicate symbol.ld: duplicate symbol 'tc_parser_init' (from /tmp/kbuild/parser.o) | build-error | tZ6TK44Y · kZAENvai · kZAENvai |
| D-C08-10 | Oracle tooling | test-harness | Agent's ad-hoc extraction of the HEAD toolchain source copied only .c files, so building the old-baseline tools failed on missing headers (ld.h)./tmp/oldsrc/toolchain/ld/main.c:1:10: fatal error: ld.h: No such file or directory | build-error | CCFjLBMA · V9m7CDsD · V9m7CDsD |
| D-C09-03 | Oracle tooling | capture | Serial driver/recording script waited for the boot banner, but a QEMU `server,nowait` serial socket discards guest output written before a client connects, so the banner never arrived and the script timed out.fix the script to not depend on catching the boot banner (a `server,nowait` socket discards output written before a client connects) | hang | cg1DYTAp · nnz9D2hQ · h439JRhh |
| D-C10-05 | Oracle tooling | qemu | Every Bash call that ran `pkill -9 -f qemu-system-i386` together with later steps (QEMU launch, test suite, rm) exited with code 1 and skipped the rest, leaving no QEMU running or stale logs, probably because pkill -f matched the calling shell's own command line; the agent worked around it by running pkill and the launch as separate calls.pkill -9 -f qemu-system-i386 2>/dev/null bash tools/run_tests.sh 2>&1 | tail -40 [OUT] ...Exit code 1 | other | mkjf2Shc (os run) · — · RoM7DPQp |
| D-C10-06 | Oracle tooling | capture | The GUI screencast recorder assumed QEMU screendump frames were 320x200, but they are 640x400, so ffmpeg read the rawvideo with the wrong stride and produced sheared, double-exposed frames. The first guess (a torn file read) was wrong, and the stricter re-read then rejected every frame and produced an empty mp4.QEMU's screendump PPM is actually 640x400 (2x supersampled from the native 320x200), not 320x200 as I assumed. That dimension mismatch, not a file race, was silently corrupting every frame | visual | q28RMGUW · 584TzG5r, nqCaKEAb, CjF3ns6K · 2bRxXTVp |
| D-C10-07 | Oracle tooling | capture | The recorder's pump() matched stop patterns against the whole cumulative serial log, so after the first '4) Run' every wait returned at once. Keystrokes were then typed while the kernel was busy in gui_pause and got merged ('quhelp', 'ququit', 'quitquit'), and the clip was too short.my `pump()` checks for the stop pattern against the *entire* cumulative log, so once "4) Run" appears once, every later wait returns instantly | wrong-output | NfhCPLXv · R2VNSysJ, ve9bWUBk, 2GcWG3Fs · 1YTSGo51 |
| D-C09-02 | Environment | qemu | Agent's `pkill -f 'qemu-system-i386...'` patterns matched the invoking bash command line itself, killing the shell (exit 144/1) so the rest of the command (QEMU launch, make) never ran, e.g. QEMU never started and later connects/monitor socket failed.pkill -f 'qemu-system-i386' 2>/dev/null ... [OUT] ...Exit code 144 | other | BF7sBAkP · — · — |
| D-C09-04 | Environment | qemu | During the 5-minute recording the QEMU serial socket connection went quiet mid-battle although the guest stayed alive, so the play script timed out waiting for an end state; longer timeout did not help, reconnect-on-stall logic was needed.I hit a QEMU serial-socket quirk (a connection occasionally went quiet mid-session even though the guest stayed alive and responsive) and added reconnect-on-stall logic | hang | h439JRhh · T7GdyaJL, G99GKJAp · UWjepz4W |