Commit Graph

10 Commits

Author SHA1 Message Date
NB-076 33762ca959 fix: adversarial testing — 4 false positive/negative fixes + comment stripping
COBOL migration expert adversarial testing found 4 real defects:

FIX 1: Comment-stripping in detect_keyword() (FP-2)
- Remove *> inline comments and * comment lines before keyword matching
- Prevents 「マッチング」 from triggering on WS-KEY in comments

FIX 2: KEY comparison context validation (FP-1, FP-6)
- Add _matches_key_comparison() — requires WS-KEY variable to appear
  NEAR an actual comparison operator (= < >), not just as PIC/VALUE decl
- Same check in _path_rule_engine features via has_key_var injection
- Fix regex bug: [=<>\s] vs [=<>] — \s matched whitespace after PIC decl

FIX 3: Old-school naming support (FN-1)
- Add L1 keyword r'[A-Z]\d{0,2}-\w*KEY' with 0.55 confidence
- Matches K01-KEY, KS-KEY etc. (non-WS- prefix naming convention)

FIX 4: mn_output_mode over-matching (FP-6)
- Require IF branches + KEY evidence before returning M:N for file>=3
- matching_vs_keybreak rule 3 now requires has_key_var

New tests: test_adversarial.py — 8 parametrized adversarial tests
Regression: 755 passed (0 new failures)
2026-06-21 15:16:41 +08:00
NB-076 a5939e6722 fix: subtype resolver + comprehensive matching program test
Fix 4 remaining defects found by adversarial testing:
1. MT03 N:1 → subtype corrected to N:1 (key suffix -M/-T heuristic)
2. MT32 混合 → subtype added (項目チェック programs with WS-PREV-KEY)
3. MT33 混合异键 → WS-ALT-KEY detection → 混合(异键)
4. MT18/MT19 → subtype M:N (correct: static cannot distinguish M:N→M vs M:N→N)

Also expand subtype resolver scope: now also processes 項目チェック
classified programs with matching-like characteristics (WS-PREV-KEY),
not just マッチング.

New test: test_matching_programs.py — 10 parametrized tests covering
all 4 dimensions (category, subtype, branches, files) for every
matching program. Known limitation documented: MT18 vs MT19
requires runtime data for M:N→M vs M:N→N distinction.

Regression: 755 passed (10 new, 0 failures).
2026-06-21 13:40:58 +08:00
NB-076 958b12e9a9 fix: confusion group confidence calibration — false positive detection inflation
Issues found through matching program classification analysis:
1. dedup_vs_nodedup: 0.85→0.50 for negative detection (no WS-PREV-KEY
   is not strong evidence for '含まず')
2. validation_vs_keybreak: 0.80→0.55 for has_counter (counter is a
   generic pattern, not specific to key-break)
3. simple_vs_two_stage: 0.80→0.50 for non-open-close-open pattern
   (sequential OPEN is the default for most programs)

Result: matching programs now correctly classified:
- MT01-03/18/20 → マッチング  (was 項目チェック)
- MT16-17 → 二段階マッチング  (unchanged)
- MT32 → 項目チェック(重複含む)  (correct: has WS-PREV-KEY)
- VL01 → 項目チェック(重複含む)  (correct)
- CSV → CSV合并  (correct)
Regression: 745 passed (3 test expectation bounds updated)
2026-06-21 13:17:31 +08:00
NB-076 d12a305dc4 test: add L1 data generation + L2 classifier validation (58 tests)
Phase C-D complete:
- test_l1_data_generation.py — 8 tests verifying generate_data across all P0 groups
- test_l2_classifier.py — 16 existing + 34 P0 classification verification tests
- hina/pipeline/__init__.py — export classify_program for cleaner imports

Key findings:
- Classifier correctly detects: CALL→子程序调用, CICS→online,
  DB→DB操作, ORGANIZATION IS→文件编成, DIVIDE→DIVIDE_50.0,
  ASCII/EBCDIC→编码转换 (keyword match)
- Rule engine provides baseline 項目チェック(重複含まず) for programs
  without L1 keyword matches
- SD keyword (SORT/MERGE sort-file) breaks Lark parser (known limitation)
- Full regression: 749 passed (0 new failures)
2026-06-21 12:16:12 +08:00
NB-076 fbaad010ab test: add L0 statement benchmark tests (34 parametrized tests)
6 test files covering:
- test_arithmetic_statements (9 samples)
- test_control_statements (6 samples)
- test_file_statements (6 samples)
- test_inspect_statements (3 samples)
- test_move_statements (5 samples)
- test_perform_statements (3 samples)
- test_search_statements (2 samples)

All 34/34 pass. Full regression: 691 passed (0 new failures).
2026-06-21 12:05:07 +08:00
NB-076 a6c454692a fix: resolve 3 MEDIUM code review findings
M1: Cache confusion-pair confidences in Path B (eliminate redundant
    resolve_confusion_pair re-calls in _path_rule_engine)
M2: Resolve contradictions in Path C instead of hardcoding
    resolved_count=0 in _path_llm_assisted
M4: Add DIVIDE_25 to contradiction pair coverage (50-25, 100-25)
    and update test_contradiction_pairs_defined to verify all 3 variants
2026-06-21 11:25:59 +08:00
hangshuo652 bc1d56d1a4 feat: Phase 2 complete — 13 Phases of COBOL type classification and test benchmark
P0.6: gcov infrastructure
P1: extract_structure output expansion (11 new feature fields)
P2: Confusion group rule engine (8 pairs + contradiction + backtrack)
P3: 4-factor confidence calculation + quality gate update
P4: 33+2 COBOL program type test samples (22 files, 7 categories)
P5: parametrized/ test data generation engine
P6: japanese_data.py lookup tables
P7-10: Type-specific test suites (~159 parametrized tests)
P11: Full classification pipeline (classify_program) + orchestrator integration
P12: Documentation (module-interfaces, test-plan v3.0, coverage-matrix)

Architecture decisions:
- classification_pipeline/ merged to hina/pipeline/
- parametrized/ as independent module
- japanese_data.py as root-level file
- hina/__all__ only exports classify_program()

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 23:51:55 +08:00
hangshuo652 7fcdb41a85 init: cobol-java migration verification platform v3 (42 tests, JCL module) 2026-05-27 08:42:41 +08:00
hangshuo652 faeedbc77b test: add edge case tests 2026-05-24 13:01:31 +08:00
hangshuo652 818e81269c v3: gstack-code-gen 生成 2026-05-24 12:36:44 +08:00