COBOL: a program's entry paragraph (reached by fall-through) is flagged unreferenced and drives the tech-debt score; the #3198 entry row was never fixed

未关闭
#7,206 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@squid-protocol 已经在做这个了。

开始于 2026年10月31日。

  • #7241 来自 @squid-protocol —— 未关闭

评估

难度
4/5
预计耗时
3-5 天
新手友好度
30/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
compilers, python
领域
compilers

调研方向

Start in detector.py at _is_orphan and the orphan/duplicate guard that exempts main_line since #7170; extend the same exemption to the first paragraph/section after PROCEDURE DIVISION. Check _calc_tech_debt in metrics/signal_processor.py and the ground-truth ledger dead cells. Done means entry paragraphs are not orphaned, tech-debt scores drop on the listed COBOL files, and golden masters update.

由索引模型根据 Issue 内容生成。

描述

bug claim:nyx core-engine lane:nyx

What happens. A COBOL program starts by falling into the first paragraph (or section) after its PROCEDURE DIVISION header, and nothing calls that unit by name. _is_orphan (detector.py) gives it usage_status = 1, and two scores read that verdict as a defect:

  • Tech debt: _calc_tech_debt (metrics/signal_processor.py) counts unreferenced_by_name as orphans and weights each ×2. In a typical COBOL file, the entry paragraph is the whole score.
  • The debt and dead-code signal families include unreferenced_by_name.

#3198 reported this as the first of three defects (its micro-repro's MAIN-PARA, "live: the entry, reached by fall-through, never PERFORMed"; zopeneditor's 000-MAIN ×4; CBSA's PREMIERE SECTION in 17 programs and A010 in 7). Its fix landed the other two (case-insensitive names, - as a name character; cobol.py identifier_case / identifier_extra_chars). The entry row is still open on main.

Since #7170 it is also asymmetric. A main line (statements before the first paragraph) is now a def_shape = "main_line" unit, exempt from the orphan verdict. So the same program scores 0 when written with a main line and a non-zero tech debt when written with an entry paragraph.

Evidence. The ten agentic-COBOL systems (acherm/agentic-*-cobol-*, MIT), engine with #7170:

  • Every flagged unit is an entry unit. Every usage_status = 1 COBOL paragraph in all ten systems, 10 of 10, is the first paragraph after a PROCEDURE DIVISION header.
  • That one paragraph is every non-zero tech-debt score. Every COBOL file with a non-zero risk_tech_debt has exactly one such paragraph and no TODO or duplicate markers. One file has one HACK marker.
file tech debt from
agentic-cobol-doom-cc walker.cob 37.8 the entry paragraph alone
agentic-cobol-pygame-cc imgtest.cob 47.6 entry paragraph + 1 HACK-style marker
agentic-cobol-sat-cc src/cobsat.cob 24.4 the entry paragraph alone
agentic-cobol-compress-cc src/crc32.cob 22.5 the entry paragraph alone
agentic-cobol-pygame-cc bounce.cob / demo.cob / flappy.cob 16.8 / 16.5 / 10.2 the entry paragraph alone
agentic-cobol-sat-codex src/cobsat.cob 10.7 the entry paragraph alone
Codex systems that open with a main line 0 no entry paragraph

Reproduce: agentic-cobol-pairs/scoring_checks.py in squid-protocol/gitgalaxy-population-analyses (PR #23) lists every unreferenced paragraph and whether it is an entry.

Expected. The unit a PROCEDURE DIVISION falls into is never an orphan or a duplicate:

  • the first paragraph after the header, when there is no main line;
  • or the first section and its first paragraph.

This is the same rule #7170 gives the main line (def_shape != COBOL_MAIN_LINE_SHAPE in the orphan/duplicate guard). Per program: nested and sibling programs each have their own entry. A paragraph that only falls through from its predecessor is out of scope here (#3198 noted that fall-through sections read 0 only via is_public). The entry is the one case that is always reached.

To check in the fix

  • Ground-truth ledger dead cells: the key's truth is reachability. Entry paragraphs counted dead should become matches; the engine_dead_is_unreferenced_by_name cause (#2806) stays for the rest.
  • The refraction pipeline's dead-code use (#3120/#3122).
  • Golden masters: tech-debt and dead-code exposure move on COBOL files.

Found by the agentic-COBOL structural comparison (DOOM study follow-up).

主要语言
Python
星标
57
派生
11
平均合并
1 小时 21 分钟
30 天内合并 PR
965

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

squid-protocol/gitgalaxy 的其他 Issue

查看 squid-protocol/gitgalaxy 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。