Skip to content

Real-LLM (qwen3.5:4b) doesn't reproduce canonical NAFEMS W-AR-02 firing pattern on aero COU1 #22

Description

@cloudronin

Observation

The canonical NAFEMS-aero narrative (encoded in the hand-crafted tests/fixtures/extract/aero-cou1-imported.jsonld and exercised by TestAeroWeakenerPipelineFromFixture::test_cou1_w_ar_02_fires_on_gap_factors):

  • COU1 (Accepted, with level-gap factors) → W-AR-02 fires on each level gap
  • COU2 (Not Accepted, no level-gap factors) → W-AR-02 stays at zero
  • diff(cou1, cou2) → highlights the W-AR-02 divergence

The May 25 real-LLM e2e run with ollama/qwen3.5:4b did NOT reproduce this on either COU:

Expected (hand-crafted) Observed (qwen3.5:4b)
COU1 firings W-AR-02 (n≥1) + others W-AL-02, W-AR-05×2, W-CON-04, W-EP-04, W-NASA-02, W-NASA-03, W-NASA-06, W-ON-02 — no W-AR-02
COU2 firings (mostly clean) W-AL-02, W-AR-05×3, W-CON-04, W-EP-04×19, W-NASA-01, W-NASA-04, W-ON-02, W-SI-02 — no W-AR-02
Diff highlight W-AR-02 divergence W-SI-02 divergence (1 total)

The LLM is producing semantically reasonable extractions — both COUs surface real weakener firings — but the factor-level structure that drives W-AR-02 specifically isn't being extracted reliably. W-AR-02 fires on level gaps (required > achieved) — qwen is likely either:

  1. Not extracting the requiredLevel / achievedLevel pair at all (so the rule has no inputs)
  2. Extracting them but always equal (no gap)
  3. Extracting them but missing the pack-specific edges that trigger this particular pattern

Why this matters

The W-AR-02 pattern on cou1 is the headline divergence in the NAFEMS demo deck (per docs/v0.5-morrison-deltas.md and the pre-built fixtures). If the production extract pipeline doesn't reliably hit it on the canonical evidence, the demo narrative falls apart whenever someone runs uofa extract instead of using the pre-built jsonld.

Suggested investigation

  1. Inspect factor-level extraction accuracy on aero COU1: run dev/tools/scripts/score_extraction.py --pack nasa-7009b --case cou1 --model ollama/qwen3.5:4b and diff the factor_level_accuracy against the W-AR-02-firing prerequisite. The accuracy log already tracks this metric; the question is whether the levels qwen extracts pin to required==achieved or actually surface gaps.
  2. Compare prompts: the V&V 40 prompt asks for required_level and achieved_level per factor. Is qwen returning these reliably for NASA cou1?
  3. Try a larger model as a control (claude-sonnet-4-6 or gpt-4o) to see whether this is a qwen-specific limitation or a prompt/spec issue.
  4. Consider eval-loop iteration: the v4-kv-adaptive-ctx prompt got factor_level_accuracy = 0.947 on nasa cou1, which is high but not perfect. The misses might be concentrated on the few factors that would trigger W-AR-02.

Test-side context

The real-LLM e2e in tests/test_aero_full_pipeline_e2e.py::TestAeroFullPipelineE2ERealLLM was initially written to assert the canonical pattern (commits f78675bd90c52c). After today's run revealed the divergence, the assertions were loosened to "produces ≥1 firing" and "diff detects ≥1 divergence" — chain-plumbing, not semantic correctness. This issue tracks the gap so the loosened assertions don't paper over a real quality regression.

The hand-crafted TestAeroWeakenerPipelineFromFixture continues to guard the canonical pattern against a known-good input.

Discovered during

UOFA_RUN_REAL_LLM=1 python -m pytest tests/test_aero_full_pipeline_e2e.py::TestAeroFullPipelineE2ERealLLM — May 25, 2026 demo-prep run.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions