Skip to content

v2.11.0: CICS harness coverage, extraction rework, corpus v1.6.0

Latest

Choose a tag to compare

@squid-protocol squid-protocol released this 01 Oct 00:15
· 2366 commits to main since this release
Immutable release. Only release title and notes can be modified.
b92801e

35 merged changes since v2.10.0. Three areas: the CICS harness and the porting loop, a rework of several extraction internals, and the move of the language-crucible pin to v1.6.0.

CICS harness and the porting loop

  • What changed. The CICS harness now models:

    • the condition machinery: HANDLE/IGNORE CONDITION, RESP/NOHANDLE, HANDLE ABEND, PUSH/POP (#4003);
    • LINK with program levels and a by-reference COMMAREA (#4004);
    • terminal RECEIVE of unformatted input (#4005);
    • interval control on a virtual clock: START/RETRIEVE/CANCEL (#4006);
    • HANDLE AID (#4007);
    • XCTL RESP/RESP2 and LENGTH (#4008);
    • temporary-storage queues (#4002).

    CicsTask records SEND TEXT length and options, RECEIVE MAP and EIBCALEN (#4009). BMS output fidelity was fixed in the stub (9 cells, #4001).

  • Porting. The CICS crucible (pinned at v0.2.0: 44 scenarios, every program covered) has its 17 programs ported through the porting loop (#3989, #4025, #4032). Per-program COBOL paragraph and branch coverage is reported for the CICS crucible, CardDemo and cobol4j (#4023). An unattended model run proved 5 CardDemo programs (#4040). CardDemo POSTTRAN (CBTRN02C) is ported and proven, error paths included (#4033).

  • COBOL fixes:

    • alphanumeric comparison follows mainframe rules (CobolCompare, #3986);
    • double-byte (DBCS) characters are kept whole when a text field is too wide (#3985);
    • CobolRecords/CobolEdit are generated for every program to port (#4039);
    • COBOL words keep full-width digits and hyphens (#3991);
    • the graveyard finder reads non-ASCII and END-xxx paragraph names (#4026);
    • layout_fields expands a nested COPY instead of shifting later fields (#4010, #4013);
    • dto_shape resolves a class by its package (#4014);
    • no-scan lineage reads SELECT with the engine's reader (#3998);
    • the no-JCL batch controller no longer names an undefined <File>DTO (#3992);
    • the port ticket names the program's DECIMAL-POINT (#3984).

Extraction internals (#4044)

  • What changed:

    • C-family preprocessor: one module-level pass (_preproc_line_liveness) now decides each line's directive and liveness status for both the brace-safe stream and dead-branch blanking. Statically true or false #if/#elif literals prune the dead side; unknown conditions keep both.
    • C++ digit separators (512'000, 0xDE'AD) are claimed as literals before char-literal matching, in comment stripping and in the brace-safe stream.
    • Go: bodyless function declarations get their own span.
    • TypeScript/JavaScript:
      • the arrow-function branch was reworked;
      • anonymous async () => callback arguments are no longer named async;
      • two gates drop ternary true-branches and parameter function-type annotations.
    • C#: class_start accepts readonly/ref struct modifiers.
    • C++: func_start recognises out-of-line operator() and conversion operators.
    • Archetypes: _classify_archetype returns Unclassified on a vector/centroid width mismatch.
  • Golden masters. Re-blessed for one commit only: 27 values per mode. Two causes:

    • the dead-branch count path keeps the #else/#endif that closes a dead branch, as its docstring specifies (Preprocessor Macros +1 in a few files, e.g. doom/m_fixed.c);
    • continuation lines of a directive written # define are recognised as macro body (racket/eval.c).

    Tree-sitter accuracy is unchanged in all 30 languages.

  • action.yml passes inputs to its scripts only through step environment variables, and splits the args input with read -a (no eval).

  • site/app.py binds the dev server to loopback unless in development mode; GITGALAXY_BIND_HOST overrides it.

Corpus pin and dependencies

  • language-crucible pin: moved to v1.6.0 (#4043). That release verified every corpus file against its upstream source, restored one locally patched COBOL file, and replaced an unlicensed folder. Golden masters and the comparison charts were regenerated against it. The restored CBTRN03C.cbl now registers its NEXT SENTENCE safety bypass (0 → 1).
  • urllib3: 2.7.0 → 2.8.0 (GHSA-8988-9cw3-xx77, GHSA-vxq7-64xx-v4gw; #4042).

Known limitations

  • Path-dependent results. Scan results currently depend on the scanned checkout's absolute path: a parent directory named like an entry in the aperture denylist (for example tmp) changes documentation exposure (#4058). CI is unaffected because it always uses the same layout.
  • TS/JS spans. Matches dropped by the TS/JS gates still bound the preceding function's search window, so that function's span can end early at the dropped match.
  • C++ char literals are bounded to 16 characters on one line. Longer named-escape literals are not shielded.
  • Missing tags. The tags for PyPI versions 1.1.1, 1.1.2, 1.1.3 and 2.2.0 were overwritten by unrelated tags from a forked action and have been removed. Those four versions currently have no git tag.