Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

det: batch file I/O holes in estates without an application JCL job (no CobolFiles), and WRITE ... ADVANCING

クローズ
#6,065 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

関連するプルリクエストがすでにマージされています。

  • #6111 @squid-protocol による — マージ済み

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
機能追加
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python
領域
backend, tooling

調査の方向性

Start with cobol_to_java_batch_forge.py and det/program.py to trace when batch runtime files and unscheduled main programs are generated, then inspect det/stmt.py around _write() for the trailing phrase handling. Use unit and synthetic COBOL programs to check WRITE ... ADVANCING against the IBM reference, and verify the named holes distinguish unsupported phrases. Done means the specified batch regression checks pass and the translation only survey reports before and after counts.

索引モデルが issue の本文から書いたものです。

説明

bug claim:melek priority: high scope:core

Why

The 2026-10-22 non-burned translation-only survey (#6064 comment) has two gaps that cover about two-thirds of the hole statements in the local non-burned corpora (dsf, zopeneditor-sample: 124 hole statements over 10 programs):

hole reason statements
<OPEN/READ/WRITE/CLOSE> <file>: the generated project has no batch package (CobolFiles) to run files through ~50
WRITE ADVANCING / other phrases 33

Both are generic batch COBOL, not estate quirks, so they are likely to recur on any unseen batch estate.

1. No batch package unless the estate has an application JCL job

cobol_to_java_batch_forge.py BatchForge.sources() returns {} when self.applications is empty, so the batch runtime (CobolFiles, Sysout, CobolAbend, …) is generated only when the estate holds at least one application JCL job. det/program.py:has_batch() then finds no batch/CobolFiles.java, and every FD gets fd.why = "the generated project has no batch package…" (program.py ~L1029). Every file I/O statement becomes a hole.

dsf has no JCL at all. The unscheduled main-program path (the CardDemo CBTRN01C case: a main program with files, no USING, no COMMAREA) only counts when self.applications is already non-empty (bool(self.applications) and key in self.unscheduled, ~L343/L348).

Fix: emit the batch runtime when the estate has any batch program: an application job or an unscheduled main program with files. Treat a no-JCL estate's file-owning main programs as unscheduled batch steps, as CardDemo's CBTRN01C already is. A CICS-only estate (no FDs in a main program) must still get no batch package, as today.

2. WRITE … ADVANCING

det/stmt.py _write() (~L1000) holes anything after WRITE rec [FROM x]: "WRITE ADVANCING / other phrases". Model BEFORE/AFTER ADVANCING n LINE(S) | mnemonic | PAGE (IBM Enterprise COBOL Language Reference, WRITE statement, sequential files) for line-sequential and printer files: carriage control as IBM defines it for the record (ASA control byte when the file is ADV; the line/page skip otherwise). Refuse by name any phrase still not modelled (AT END-OF-PAGE/EOP with LINAGE, mnemonic names not in SPECIAL-NAMES), as a named hole, never a guess.

Sweep the class in the same PR: _write currently holes every trailing phrase, so check which others the surveys hit (INVALID KEY / NOT INVALID KEY on indexed/relative WRITE, END-WRITE) and model or name them separately, so the hole reason says which phrase.

Evidence constraints

  • No burned estate uses ADVANCING (grep over the 6 burned corpora: 0 files). Part 2 therefore can't reach L2+ on a burned estate: test it with unit and synthetic programs (language-crucible) against the IBM reference, and report it as translation-only until a burned program uses it. Don't build cases on dsf/zopeneditor/census repos (burned-only rule).
  • Part 1 regression: CardDemo/CBSA/GenApp batch must be unchanged (byte-identical generated estate where they have application jobs); the async credit-card estate (CICS-only, 0 JCL) must still get no batch package.
  • Afterwards: re-run the non-burned translation-only survey (det_survey.py --no-compile over dsf, zopeneditor-sample) and post the before/after counts here. Baseline: dsf 0 / 7 whole, 231 / 318 statements; zopeneditor-sample 2 / 5 whole, 595 / 632.
主要言語
Python
スター
57
フォーク
11
平均マージ
1時間 5分
マージ済み PR(30日)
976

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

squid-protocol/gitgalaxy のほかの issue

squid-protocol/gitgalaxy の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。