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:
- Not extracting the
requiredLevel / achievedLevel pair at all (so the rule has no inputs)
- Extracting them but always equal (no gap)
- 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
- 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.
- Compare prompts: the V&V 40 prompt asks for
required_level and achieved_level per factor. Is qwen returning these reliably for NASA cou1?
- 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.
- 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 f78675b → d90c52c). 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.
Observation
The canonical NAFEMS-aero narrative (encoded in the hand-crafted
tests/fixtures/extract/aero-cou1-imported.jsonldand exercised byTestAeroWeakenerPipelineFromFixture::test_cou1_w_ar_02_fires_on_gap_factors):The May 25 real-LLM e2e run with
ollama/qwen3.5:4bdid NOT reproduce this on either COU: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:
requiredLevel/achievedLevelpair at all (so the rule has no inputs)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.mdand 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 runsuofa extractinstead of using the pre-built jsonld.Suggested investigation
dev/tools/scripts/score_extraction.py --pack nasa-7009b --case cou1 --model ollama/qwen3.5:4band diff thefactor_level_accuracyagainst 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.required_levelandachieved_levelper factor. Is qwen returning these reliably for NASA cou1?claude-sonnet-4-6orgpt-4o) to see whether this is a qwen-specific limitation or a prompt/spec issue.v4-kv-adaptive-ctxprompt gotfactor_level_accuracy = 0.947on 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::TestAeroFullPipelineE2ERealLLMwas initially written to assert the canonical pattern (commits f78675b → d90c52c). 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
TestAeroWeakenerPipelineFromFixturecontinues 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.