Skip to content

Generated progress page + README numbers that can't drift: burned-estate ladder, per-tool %, core burn-down with ETA, Gap Atlas #5280

Closed

Description

@squid-protocol

Owner-approved 2026-10-16 (step 2 of the scope retag). The README's CICS-to-Java numbers are hand-written and have drifted from the generated ones:

  • README.md says 127 programs; the evidence index has 129.
  • README.md cites "CICS crucible: 17 programs"; tests/cics_crucible/coverage.json has 50.
  • det_survey.md still says 48 proven.
  • The hero tiles and the "Coverage across CICS eras" table in gitgalaxy/tools/cobol_to_java/README.md are hand-written too.

Progress also needs a fixed denominator, so it stops looking like limbo while sweeps keep finding siblings. Issues now carry scope:core | sweep | frontier | infra and era:0..4 labels, and frontier work lives in milestone 30, Gap Atlas.

Build: a generated progress page

Add tests/tools/progress_report.py, which renders docs/language_status/progress.md and progress.json on the generated branch through generated_docs.PAGES. The workflow publish list must match PAGES; that workflow edit is owner-approved here. Inputs are the existing machine-readable artifacts; nothing new is hand-maintained.

  1. Burned-estate ladder. Fixed denominator: the 129 programs of the 6 burned estates (BURNED_NAMES). Read the evidence_report per-estate report.json. Show per estate and in total the counts at L0..L5, the % at L2+, the % at L4+ and the count at L5. Today that is 99/129 at L2+, 36 at L4 and 0 at L5.
  2. Components, each with its own fixed denominator:
    • Translator: programs translated whole out of 129.
    • CICS: the commands the burned estates actually use. That means census burned > 0, including the "unlisted" and "unparsed" forms from cics_spec_status.json and the spec status. Report how many are modelled on both runtimes, about 60 of 68 today. Show the whole spec (100 / 2 / 155 of 257) on a separate line, labelled frontier context.
    • COBOL runtime rules (cobolrt_rules.json): MATCHED / DIFFERS / ASSUMED / REFUSED, and how many are measured on z/OS (0 today).
    • Mutation: the kill rate from mutation_scores.json.
    • Crucibles: programs and scenarios per crucible, from their coverage files.
  3. Eras: per era (era_tags.py), programs and how many are at L2+ / L4+. This replaces the hand-written era table.
  4. Core burn-down, from GitHub issues by label. The docs workflow has GITHUB_TOKEN; offline, read a cached JSON so tests stay hermetic. Show:
    • open and closed scope:core issues, overall and for milestone 28;
    • core issues opened and closed in the last 7 days, and the net;
    • ETA = open / (7-day net closure rate), printed as "not converging" when the net is zero or positive. Never print a date it can't support.
  5. Gap Atlas: frontier issues found this week, and the total, presented as discoveries, not debt. Plus sweep and infra counts.

Every number cites its source artifact and the generated commit. The evidence-level wording follows .claude/rules/mainframe-evidence-policy.md: report the ladder, never "proven" as a bare claim, and say the oracle is GnuCOBOL plus IBM documentation, not z/OS.

READMEs: no hand-written numbers left

  • In README.md's "CICS to Java" section and gitgalaxy/tools/cobol_to_java/README.md (the hero tiles and the era table), replace every hand-written number with numbers that cannot drift. Read tests/tools/test_evidence_report_single_source.py first: main may not link generated files.
    • Either: a marker block (<!-- progress:begin --> … end) rendered by progress_report.py, which the docs bot refreshes on main, plus a test that fails when the block is stale.
    • Or, if the rules forbid that: one pointer to the generated page, with the README keeping only prose.
    • Pick the option the repo's rules allow and say why in the PR.
  • docs/language_status/det_survey.md: mark it a dated historical snapshot, or drop its numbers.

Acceptance

  • progress.md and progress.json are generated with all 5 sections.
  • No hand-written estate, program, command, era or proof count remains in either README.
  • Tests: the rendering from fixtures, the "not converging" rule in both directions, the burned-only CICS denominator, and the stale-block or pointer check.
  • pr_gates --fast is green and the generated-docs workflow publishes the page.

Activity

  1. added
    tier:customerChurn tier 2: front-facing customer items
    scope:infraCI, tooling, churn/factory, docs infrastructure
    on Oct 16, 2026
  2. squid-protocol commented on Oct 16, 2026

    @squid-protocol
    OwnerAuthor

    Siblings: #5282 (other docs pages and the non-CICS README tiles, found in the review of #5281).

  3. squid-protocol commented on Oct 22, 2026

    @squid-protocol
    OwnerAuthor

    Owner request 2026-10-21: next slice. The ladder in progress_report.py (progress.md / progress.json) and the evidence report show the programs that cannot reach L1 for a non-translator reason in their own rows, separate from translator holes: (a) source defects, i.e. source IBM's compiler rejects (CardDemo CBEXPORT / CBIMPORT, #5866; fill the evidence report source_defects that is empty today), and (b) refused whole: not COBOL (zECS ZECS002 / ZECSNC assembler, #5859). The headline shows the reachable denominator next to the fixed 129 (today 129 - 4 = 125 reachable). Do not drop programs from the 129: report them separately, with the IBM citation.

  4. squid-protocol commented on Oct 22, 2026

    @squid-protocol
    OwnerAuthor

    Addendum: a third row, (c) held by an owner ruling or z/OS calibration: DBB epscsmrd (LE condition handlers refused by name, owner ruling 2026-10-21 on #5106) and epsmpmt (floating-point power / ANNUITY need captured z/OS bits, #5867). With ZECS001 moving to core (#5945), reachable = 129 - (a) 2 - (b) 2 - (c) 2 = 123. Each row names its issue.

  5. squid-protocol commented on Oct 22, 2026

    @squid-protocol
    OwnerAuthor

    Claimed by promoter-bot host melek, lease renewed 2026-10-22T00:55Z. It lapses after 6 h without a renewal. To take it back, assign someone or remove the claim:melek label.

  6. squid-protocol commented on Oct 22, 2026

    @squid-protocol
    OwnerAuthor

    Closing: the generated progress page and README pointers landed in #5281, and the owner-requested slice (source-defect, not-COBOL and owner-held rows with a reachable denominator of 123) landed in #5948. Remaining doc-number drift is tracked in #5282.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    claim:melekscope:infraCI, tooling, churn/factory, docs infrastructuretier:customerChurn tier 2: front-facing customer items

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions