GenSpark 第 6・7 報(0.2.0 を pip install した Linux で fullseye を叩いた実測)。
| コマンド | 起きたこと |
|---|---|
fullseye --help |
実行例が全部 py -3.11 imgevolve.py …(checkout 専用の綴り。K2 の CLI 側) |
fullseye parity |
error: unrecognized arguments: parity(rc 2)—— help には載っている |
fullseye coverage |
FileNotFoundError: …/site-packages/data/halcon_operators.json(rc 1) |
fullseye samples |
the following arguments are required: action(rc 2) |
| Studio 起動 | QMainWindow::saveState(): 'objectName' not set for QToolBar / import のたびに pywt … Level value of 2 is too high |
加えてこの木で数えると: python -W error::UserWarning -c "import ops" で REGISTRY が 931 → 929。xwt_visushrink / xwt_firm_denoise が黙って消え、FAILED_BACKENDS にも残らない。import 時にも unclosed file の ResourceWarning が 3 本(backends_auto.py:1761)。
CLI のテストは全部 checkout の imgevolve.py で走る。console_script fullseye として呼ばれる経路(argv[0] が違う、data/ が無い)を通る門が無かった([[feedback_gate_must_stand_where_the_accident_happens]] の CLI 版。wheel の門 tools/ci_wheel_check.py は中身の有無を数え、サブコマンドが走るかは見ない)。
parity: cmd_parity が parity.main() を呼び、そちらが sys.argv を自分で parse する。accel / bench は argv を差し替えていたのに parity だけ素通し。coverage: honest_summary が data/halcon_operators.json(MVTec のリファレンス説明文を含むので同梱しない判断済み)を無条件に開く。名前だけの出荷版 halcon_names_data は在ったが、こちらは読まない。backends_color._real_ops: 同じ JSON しか読まず、wheel では空集合 → if real and n not in real が全部通す。backends_auto が 0.1 系で潰したのと同じ fail-open が、色の層に残っていた。backends_r3._gate: import 時に各レシピを 24 px の探針で叩く。db4 / sym4 の level=2 は 28 px 要るので pywt が警告し、警告を例外にする環境では try/except が「動かないレシピ」と誤判定して落とす。探針は機能の門で、警告の門ではないのに区別していなかった。imgevolve._prog() —— argv[0] が fullseye… なら help の実行例を fullseye <cmd> に、checkout なら従来の綴りに。epilog に両方を書く。cmd_parity —— sys.argv = ["parity.py"] に差し替えてから委譲(accel / bench と同じ)。samples —— action を省略可(既定 list)。honest_summary.main —— JSON が無ければ「何が要るか・数字の在処(docs/HALCON_PARITY.md)・出荷しているのは名前だけ」を印字して rc 1。クラッシュしない。backends_color._real_ops —— halcon_names_data.HALCON_NAMES を先に読む(JSON と 2,313 名で完全一致、色 op 12 本は全部実在名)。backends_r3._gate —— 探針を 32 px に、探針の中の警告は catch_warnings で無視。-W error でも REGISTRY は 931 のまま(門 = サブプロセス 2 本で数を突き合わせる)。backends_auto の JSON 読みを with open、Studio の主ツールバーに setObjectName("main_tools")。fullseye --version が rc 2 で usage しか出なかった → --version を足す。algo run / apply の実行時メッセージも _prog() で呼ばれ方に合わせる。has <typo> の「not in the HALCON reference」は綴りの間違いまで HALCON の話に見えるので、「op 名でも HALCON 別名でもリファレンスの operator でもない」+ 探し方に。同報の N20(範囲外入力の出力が [0,1] を出る)= extra_checks の設計、N21(a=1e9 の丸め)= 記録 + once-per-op 警告、N22 / N23 = 第 1・3 陣で直し済み、N24(警告は初回のみ)= 文書化済みの設計(fullseye.fallbacks() / FULLSEYE_ON_ERROR=raise)。 CI(Linux)では os.path.basename が \ を区切りと見ないので Windows 形の argv[0] が丸ごと 1 要素になり、この判定が手元だけ緑だった —— 区切りは [\/] の両方で切る。sample_photo / sample_photo_raw / sample_photo_rgb に未登録名を渡すと realdata が SystemExit(1) を投げていた(PoC 用に理由を印字して落ちる作り)。公開 API なので呼び手のプロセスごと終わり、第三者のスモークでは「ワーカーが消滅」と観測された。realdata.RealDataError(RuntimeError) に替え、fail-closed は例外で守る。GenSpark 第 6・7 報で設計として残したもの: device="cuda" が GPU 無しでも返る(N7)—— 台帳に source="gpu" で記録され、op ごとに 1 度警告する(この木で実測: AssertionError: Torch not compiled with CUDA enabled が残る)。「無警告」に見えたのは同じ op が先に別の理由で fallback していたか、警告の once-per-op。非 ASCII のウィンドウ名が xwininfo で化ける(N11)は X クライアント側のロケール変換で、Qt は _NET_WM_NAME を UTF-8 で正しく立てている。