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
维护者通常 1 天内回复
评估
调研方向
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 内容生成。
描述
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) countsunreferenced_by_nameas 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 = 1COBOL paragraph in all ten systems, 10 of 10, is the first paragraph after aPROCEDURE DIVISIONheader. - That one paragraph is every non-zero tech-debt score. Every COBOL file with a non-zero
risk_tech_debthas 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
deadcells: the key's truth is reachability. Entry paragraphs counted dead should become matches; theengine_dead_is_unreferenced_by_namecause (#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
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
squid-protocol/gitgalaxy 的其他 Issue
-
scope:infra
难度 3/5 1-2 天 新手友好度 55/100
squid-protocol/gitgalaxy#7281 ·
维护者通常 1 天内回复
-
bug claim:nyx core-engine lane:nyx
难度 4/5 3-5 天 新手友好度 55/100
squid-protocol/gitgalaxy#7207 · 2 条评论 ·
维护者通常 1 天内回复
-
COBOL: the main line (PROCEDURE DIVISION code before the first paragraph) has no function_data row, so its size, complexity and calls are missing from every per-function view可能已有人在做 @squid-protocol 于 1 天前认领。 未关闭bug core-engine
难度 4/5 3-5 天 新手友好度 35/100
squid-protocol/gitgalaxy#7170 ·
维护者通常 1 天内回复
-
bug core-engine performance
难度 3/5 1-2 天 新手友好度 72/100
squid-protocol/gitgalaxy#7169 ·
维护者通常 1 天内回复
-
enhancement priority: high scope:infra
难度 5/5 一周以上 新手友好度 25/100
squid-protocol/gitgalaxy#7155 ·
维护者通常 1 天内回复
查看 squid-protocol/gitgalaxy 的全部 Issue
相似的 Issue
-
good first issue test
难度 2/5 1-3 小时 新手友好度 85/100
ANCORATE/EncryptHome#8 ·
-
PluginProvider.storeInstance races and clobbers the dedup cache for concurrent loads可能已有人在做 @Wilson0511 今天认领。 未关闭needs-triage
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 2 天内回复
-
Bug: failed Together chat calls do not record operation duration or error.type可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
community documentation good first issue
难度 2/5 1-3 小时 新手友好度 75/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100