## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Smokes v2 — Minimal Runner and Policy
Policy
- Use [SKIP:] prefix for environment/host dependent skips.
- Examples: [SKIP] hakorune not built, [SKIP:env] plugin path missing
- Keep reasons short and stable to allow grep-based canaries.
- Prefer JSON-only output in CI: set
NYASH_JSON_ONLY=1to avoid noisy logs. - Diagnostics lines like
[provider/select:*]are filtered by default inlib/test_runner.sh.
Helpers
tools/smokes/v2/lib/mir_canary.shprovides:extract_mir_from_output— between [MIR_BEGIN]/[MIR_END]assert_has_tokens,assert_skip_tag,assert_order,assert_token_count
tools/lib/canary.shprovides minimal, harness-agnostic aliases:extract_mir_between_tags— same asextract_mir_from_outputrequire_tokens token...— fail if any token missing
Notes
- Avoid running heavy integration smokes in CI by default. Use
--profile quick. - When a test depends on external tools (e.g., LLVM), prefer
[SKIP:<reason>]over failure.
Quick tips
- EXE-heavy cases (e.g.,
phase2100/*) may take longer. When running quick with these tests, pass a larger timeout like--timeout 120. - Smokes v2 auto-cleans temporary crate EXE objects created under
/tmp(pattern:ny_crate_backend_exe_*.o) after the run.