Part of #2560 — per-language tracking for the keyword-rosetta control corpus (built for #1096). Planted intent is identical in every language, so every deviation below is measured bias vs. the 46-language median, validated in the corpus's deviation ledger. 🔴 = beyond ±50% of the cross-language median, 🟡 = ±25–50%.
Triage order (per the epic): structure detection first, then signal/keyword rules, then risk-score consequences — §3's numbers are downstream of §1–§2 and re-baseline as those fix. Cross-cutting engine issues (e.g. #2535/#2546) fix many languages at once; this issue tracks this language's residual after each cross-cutting fix lands, and closes when the language sits inside the ±25% band on every comparable metric (or every remaining deviation is ledgered as intended morphology).
1. Structure detection (fix first)
- 🔴
args: 1 vs median 13 (-92%)
2. Signal / keyword deviations
- 🔴
fragile_debt: 3 vs median 1 (+200%)
- 🔴
planned_debt: 2 vs median 1 (+100%)
- 🔴
state_mutation: 2 vs median 6 (-67%)
- 🟡
comment_lines: 15 vs median 30 (-50%)
- 🟡
globals: 3 vs median 2 (+50%)
- 🟡
high_risk_execution: 3 vs median 2 (+50%)
- 🟡
io: 4 vs median 3 (+33%)
- 🟡
keyword_hits: 178 vs median 247.5 (-28%)
3. Risk-exposure consequences (downstream)
- 🟡
risk_api_exposure: 6.81696 vs median 5.31104 (+28%)
- 🟡
risk_cognitive_load: 8.11636 vs median 15.1444 (-46%)
- 🟡
risk_safety_score: 53.1215 vs median 37.297 (+42%)
Ledgered shapes touching cobol
| defect |
type |
issue |
evidence |
summary |
census-requires-git-tracked |
engine-semantic |
— |
— |
GalaxyScope's census enumerates git-tracked files only; an untracked folder scans as '0 files mapped' with no per-file warning |
cobol-working-storage-globals |
keyword-overlap |
— |
(notes) |
cobol globals pattern includes WORKING-STORAGE\s+SECTION as an alternative — every fixed-format program with a working-storage section records globals >= 1 |
cobol-hyphen-identifier-debt-leak |
upstream-bug |
#2537 |
c.cpy |
Debt rules are whole-text, not comment-anchored, and '-' is a regex word boundary: HACK-LEVEL (data item, 2 code occurrences) counts fragile_debt, PROBE-TODO (paragraph … |
cobol-area-b-bare-token-paragraph |
upstream-question |
#2538 |
(notes) |
A bare token + period in Area B (CEE3DMP |
string-literal-selective-shielding |
upstream-question |
#2535 |
a.cpy |
Keywords inside one string literal ('if eval fails, try open') count toward branch (+2), safety (+1), io (+1) but eval does NOT count toward high_risk_execution (routes … |
Decoy outcomes (file-level evidence)
- main.cbl ·
never ALTER this flow and no PERFORM loop (comment): stripped: contributed 0
- a.cpy ·
DISPLAY 'IF ALTER FAILS TRY OPEN AGAIN' (string): ALL counted: IF (branch +1), ALTER (high_risk +1), OPEN (io +1) — cobol does NOT shield the high-risk family in literals, unlike python/javascript. Ledger: string-literal-selective-shielding; gitgalaxy#2535 comment
- c.cpy ·
77 HACK-LEVEL PIC 9. / DISPLAY HACK-LEVEL. (code): COUNTED (+2): hyphen is a word boundary so \bHACK\b matches inside the identifier, both occurrences; the PROBE-TODO paragraph name likewise adds planned_debt +1. Ledger: cobol-hyphen-identifier-debt-leak; gitgalaxy#2537
Reproduce / evidence
Part of #2560 — per-language tracking for the keyword-rosetta control corpus (built for #1096). Planted intent is identical in every language, so every deviation below is measured bias vs. the 46-language median, validated in the corpus's deviation ledger. 🔴 = beyond ±50% of the cross-language median, 🟡 = ±25–50%.
Triage order (per the epic): structure detection first, then signal/keyword rules, then risk-score consequences — §3's numbers are downstream of §1–§2 and re-baseline as those fix. Cross-cutting engine issues (e.g. #2535/#2546) fix many languages at once; this issue tracks this language's residual after each cross-cutting fix lands, and closes when the language sits inside the ±25% band on every comparable metric (or every remaining deviation is ledgered as intended morphology).
1. Structure detection (fix first)
args: 1 vs median 13 (-92%)2. Signal / keyword deviations
fragile_debt: 3 vs median 1 (+200%)planned_debt: 2 vs median 1 (+100%)state_mutation: 2 vs median 6 (-67%)comment_lines: 15 vs median 30 (-50%)globals: 3 vs median 2 (+50%)high_risk_execution: 3 vs median 2 (+50%)io: 4 vs median 3 (+33%)keyword_hits: 178 vs median 247.5 (-28%)3. Risk-exposure consequences (downstream)
risk_api_exposure: 6.81696 vs median 5.31104 (+28%)risk_cognitive_load: 8.11636 vs median 15.1444 (-46%)risk_safety_score: 53.1215 vs median 37.297 (+42%)Ledgered shapes touching cobol
census-requires-git-trackedcobol-working-storage-globalscobol-hyphen-identifier-debt-leakcobol-area-b-bare-token-paragraphstring-literal-selective-shieldingDecoy outcomes (file-level evidence)
never ALTER this flow and no PERFORM loop(comment): stripped: contributed 0DISPLAY 'IF ALTER FAILS TRY OPEN AGAIN'(string): ALL counted: IF (branch +1), ALTER (high_risk +1), OPEN (io +1) — cobol does NOT shield the high-risk family in literals, unlike python/javascript. Ledger: string-literal-selective-shielding; gitgalaxy#2535 comment77 HACK-LEVEL PIC 9. / DISPLAY HACK-LEVEL.(code): COUNTED (+2): hyphen is a word boundary so \bHACK\b matches inside the identifier, both occurrences; the PROBE-TODO paragraph name likewise adds planned_debt +1. Ledger: cobol-hyphen-identifier-debt-leak; gitgalaxy#2537Reproduce / evidence
data/cobol/—expected_signals.jsoncarries the shape-by-shape accountingGALAXYSCOPE_BIN=<venv>/bin/galaxyscope python tools/verify_language.py cobolin the corpus repo