Repository navigation
Description
Claim to show. The software factory has turned CICS → Java translation into an iteratively solvable problem: each estate exposes blockers, each blocker is a bounded, priced fix, and the cost of the next estate falls. Today that rests on numbers pulled together by hand in a chat session. It should be a standard, generated analysis in the data-flow pipeline, published as an infographic with the data behind it: "The Emerging Economics of Iteratively Solving CICS → Java Transpilation."
Today's numbers (hand-pulled 2026-10-13, to be replaced by the generated report):
- Per-issue worker cost (churn spend ledger, 51 issues since 2026-10-11): median $1.96, mean $3.36, IQR $1.18–$3.73, p90 $6.18; 27 of 51 needed more than one run. Tail = new CICS API areas (det: async CICS siblings — waiting FETCH/TIMEOUT scheduler, FREE CHILD, START CHANNEL, RUN CHANNEL symbol names #4950 async $24, det/CICS: EXEC CICS WEB family (SEND, RECEIVE, EXTRACT, READ/WRITE HTTPHEADER, PARSE URL, OPEN, CONVERSE, CLOSE) -- zECS needs HTTP (design first) #4767 WEB $18).
- Daily: Oct 12, 2 workers ~$124 → 14 mainframe PRs merged; Oct 13, 1 worker
$76 → 12 merged ($6 per merged mainframe fix all-in; orchestrator ~20%). - Estate-specific port blockers (keyword-attributed, ±25%): CardDemo 40, CBSA 17, GenApp 11, zECS 5, DBB 3, async credit card 2 → ~1.3 → 0.6 → 0.4 → 0.25 per program in port order (zECS the exception: new API areas).
- Discovery vs. closure: issues opened ≈ closed on 2026-10-13 (11/11); opened > closed Oct 8–12 (much of it sibling-sweep filing, not estate discovery).
Proposal. A pipeline stage (scheduled, like the evidence refresh) that joins:
- the churn spend ledger (
handoffs/churn-state.jsonusage.log: model, tokens, cost_usd, issue, run_id) andchurn-runs/*/meta.json; agy runs with their real quota cost, not $0; - the port-blocker ledger from Ledger: tag port blockers (det / forge / facade / harness) by the estate that exposed them, beside field_testing.json's defects #5051 (estate, side, class, programs blocked, new_class, refused_by_name) and
field_testing.jsondefects (scan side); - GitHub issues/PRs (opened/closed/merged, links issue → PR → run);
- the evidence records (programs proven whole per estate).
Outputs (bot-written to the generated branch, per #4963, never to main):
econ.json: the joined, versioned dataset (one row per fix: estate, class, cost, runs, model, wall time, PR, merged date).- A rendered infographic page (HTML + SVG) for the public site/README:
- cost per fix: distribution + trend over time, split by model;
- blockers per estate, cumulative, and blockers per ported program in port order (the convergence curve);
- new-class vs repeat blockers per estate (the key convergence signal);
- cost to bring an estate whole ($ and days per estate, per program);
- discovery vs closure (backlog), with estate-found vs sibling-filed separated;
- throughput per worker (1 vs 2 workers);
- a projection for the next estate (blockers, $, days) with its error band.
- CI/report staleness check like
field_testing.py report.
Honesty rules (must be on the page, not in a footnote nobody reads):
- Costs are list-price agent cost; owner review time, CI minutes and subscription pricing are not included (say what is and isn't counted).
- Ledger coverage starts 2026-10-11; entries with no cost are counted and shown as missing, not zero.
- Attribution is from the Ledger: tag port blockers (det / forge / facade / harness) by the estate that exposed them, beside field_testing.json's defects #5051 ledger only; no keyword guessing in the published numbers.
- Development estates (CardDemo, CBSA, …) are training data; first-try numbers on fresh estates (Epic: first-try proof rate on fresh estates -- trials, input generation, the attempts-to-proof histogram #3803) are reported separately, with the caveat that public code may be in model training data.
- Refusals by name are counted as refusals, not as fixes.
Done when.
- The stage runs on schedule from the ledgers above and publishes
econ.json+ the infographic on the generated branch. - The page shows all charts listed, with the counting rules stated on it.
- The next fresh estate's actual blockers/cost can be compared against the page's projection.
Depends on #5051 (estate-tagged port-blocker ledger). Related: #4963 (bot output to the generated branch), #3803 (fresh-estate trials), docs/language_status/cics_field_testing.md.
Activity
squid-protocol commentedon Nov 2, 2026
Census breadth survey (counts and verb names only; no census code opened)
cics_census.py surveywith the census corpora (9 census clones + 8 pinned corpora), thenblockers, at maind86d5eabb. Programs with an EXEC CICS command: 127 (21 non-burned). Translated whole: 110 / 127 (non-burned 5 / 21); refused whole: 9.Finding: few CICS verbs are unmodelled on these estates. The non-burned programs not whole are held mostly by non-verb gaps. Programs touched, non-burned, ranked by programs:
STRING(numeric sender with P / decimal place; literal beyond single-byte code page)JSON GENERATE/JSON PARSEEXEC CICS WEB(CONVERSE URIMAP POST,RECEIVE NOTRUNCATE,WRITE HTTPHEADER SESSTOKEN)MOVEof a literal beyond the single-byte code pageEXEC SQL ROLLBACKinside a CICS programBurned-only unmodelled:
EXEC CICS SOAPFAULT CREATE(1), LECEEHDLR/CEEHDLU(1),SET ... TO ENTRY(1); not ranked (burned).Other non-verb gaps (item/copybook/layout):
no such item3,undeclared item2,its bytes hold2,missing copybook1,LayoutDisagrees1.Only 5 gap classes are CICS commands at all (SOAPFAULT CREATE, three WEB rows, and the map-field rows); WEB is the only unmodelled CICS verb family reaching non-burned estates. Ranks 1, 2, 4, 5 are COBOL / SQL statement families that block CICS programs.
Issues filed for ranks 1-5 (#7523 STRING, #7524 JSON, #7525 WEB, #7526 MOVE, #7527 SQL ROLLBACK). Caveat: program counts overlap (one program can hold several gap classes); "only gap" counts, where fixing one makes the program whole: STRING/JSON/WEB/MOVE/ROLLBACK are 0 each, so none alone turns a non-burned program whole.
squid-protocol commentedon Nov 2, 2026
Churn run
5052-20261102T1057Z(host nyx) ended without a PR. survey posted on #5052; filed #7523-#7527 (ranked families)