Skip to content

plan: P4 fallback=0 に向けた実装・検証計画 #32

Description

@opaopa6969

背景

fix-p4-bugs#23 / #25 / #30 の局所バグは前進したが、P4 runtime ではまだ fallback が残っている。現状、targeted parity test は通る一方で、実行ログと corpus では no P4 AST mapping attempted / javacode-fallback / semantic reject がまだ観測される。

関連:

ゴール

P4 を優先する経路で fallback を 0 にする。具体的には、runtime / parity corpus / targeted smoke で P4 対象式が legacy fallback に落ちない状態にする。

非ゴール

  • 旧 LSP 機能 parity 全般(必要な observability 追加は対象)
  • release / deploy 手順の整備
  • upstream (unlaxer-dsl / unlaxer-common) 変更を先に前提化すること

作業計画

1. fallback 実態の棚卸し

  1. _tinyP4ParserUsed, _tinyP4ParserExact, _tinyP4ParserProbeMode, _p4FallbackReason, _astEvaluatorRuntime, _tinyDslJavaEmitterMode を使って fallback 発生式を収集する
  2. 発生箇所を以下に分類する
    • parser / root selection gap
    • mapper / preferred-root gap
    • P4TypedAstEvaluator 未対応
    • generated-ast path 未対応
    • cross-check / semantic reject policy
    • declaration-heavy / method-heavy / object-heavy formula
    • test expectation が古く、まだ fallback を許容しているだけのもの
  3. 収集結果を issue コメントまたは linked issue に整理し、各カテゴリに owner と優先度を付ける

2. policy blocker を先に潰す

  1. cross-check が正しいP4結果を壊れたlegacyで上書きする (variadic min/max・boolean優先順位・関数項脱落) #21 を最優先で扱い、cross-check mismatch 時に正しい P4 結果を legacy で上書きしない方針へ寄せる
  2. semantic reject と grammar gap を混同しないよう marker / reason を整理する
  3. 「P4 で読めているのに fallback する」ケースを parser gap より先に減らす

3. parser / mapper 起因の fallback を削減する

  1. P4PreferredAstMapper の preferred root / retry 戦略で、残っている top-level shape を吸収する
  2. declaration / method / object / comment-wrapped structured formula の root selection を点検する
  3. no P4 AST mapping attempted を出している代表式を再現テスト化してから潰す
  4. tinyexpression-local workaround で限界が出た場合のみ、upstream dependency 側の最小追加要求を別 issue 化する

4. evaluator / generated runtime 起因の fallback を削減する

  1. P4TypedAstEvaluator と generated-ast path の未対応ノードを棚卸しする
  2. declaration-heavy formula, method invocation/declaration, object expression, nested structured text の残件を順に direct path 化する
  3. embedded-bridge / javacode-fallback に落ちる supported slice を 1 件ずつ削る
  4. native DSL Java emitter 側で bridge fallback しているケースも並行して観測し、P4 AST path との責務境界を明確化する

5. テスト基準を tighten する

  1. P4BackendParityTest の fallback 許容前提を見直し、修正済みケースは parserUsed=true / non-fallback を必須化する
  2. curated parity corpus では javacode-fallback / embedded-bridge / legacy override を禁止する
  3. extracted corpus は段階的に threshold ベースから全件 non-fallback へ寄せる
  4. fallback をまだ許すなら、理由を issue 番号付きで明示する

6. 検証と完了条件

  1. targeted smoke を branch の acceptance set として固定する
  2. fallback inventory が空になった時点で、この issue を close する
  3. close 条件:
    • targeted P4 tests が green
    • curated parity corpus で fallback marker が出ない
    • extracted / medium corpus で既知除外なしに fallback 0
    • _p4FallbackReason に依存するテスト期待が残っていない

検証候補コマンド

sh mvnw -q -Dtest=org.unlaxer.tinyexpression.p4.P4BackendParityTest test
sh mvnw -q -Dtest=org.unlaxer.tinyexpression.evaluator.ast.AstEvaluatorParityCorpusTest test
sh mvnw -q -Dtest=org.unlaxer.tinyexpression.evaluator.ast.ThreeExecutionBackendExtractedCorpusParityTest test

メモ

  • fix-p4-bugs は局所バグ修正として維持しつつ、この issue は fallback 0 の親計画として扱う
  • 依存 repo 変更が必要な場合は、tinyexpression 側の再現ケースを添えて別 issue / 別PR に切り出す

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