COMTRAN Reconstruction

The language reference is this project’s reading of the two manuals, not IBM’s text. Every claim in it cites a page, and each citation opens that page beside its scan.

Part 8 of 10 of the COMTRAN Language Definition.

8. Known ambiguities, underspecified behaviour, and plausible resolutions

This section is the compiler writer's risk register. It collects (§8.2) the complete digest of J Appendix 90.01 (the master list of features deferred, removed, or restricted between the 1960 language and the 1962 processor); (§8.3) the direct contradictions between F28-8043 and J28-6169; (§8.4) the severity-code system and the language rules that can only be recovered from the compiler's error messages; and (§8.5) the consolidated catalog of genuine ambiguities and underspecified behaviour, each with the most historically plausible resolution. Questions the manuals cannot answer at all are listed at the end of the document under Open questions.

Contents of this section

8.1 Status of the sources

F28-8043's Preface states that environment-description rules and processor operation are deferred to "separate publications" (F Preface, PDF p. 6), so for the Environment Description, J is not merely authoritative but the only source. J28-6169-1 documents the field test version of the 709/7090 processor: several restrictions in its Appendix 90.01 are explicitly scoped "for field test" / "by the field test processor" (J 90.01.01), its promised Appendix 90.07 (Sample Non Standard Label Processing) is marked "(Not Currently Available)" in its own contents (J 00.00), and its sample listing was produced by an October 1961 system whose control card (*COMPILE) differs from the documented $CMPLE (see §8.5). Both manuals therefore describe moving targets; J is the later and operationally definitive snapshot.

F Appendix 3 (Glossary, F pp. 111–116) was swept for this definition. It is definitional and largely redundant, with these normative exceptions folded in where relevant: ROUND and TRUNCATED (F pp. 115–116 — the rounding rule, see §8.5.4), ALPHAMERIC (F p. 111 — "an alphameric literal may not contain a quotation mark"), OPEN SUBROUTINE / CLOSED SUBROUTINE (F pp. 112, 114 — the terminology §5.5.5 relies on), SUBSCRIPT (F p. 115 — the three legal subscript forms), and FLOATING POINT (F p. 113).


8.2 The F→J delta: complete digest of J Appendix 90.01 (deferred features, restrictions, limitations)

Everything below is from J Appendix 90.01 unless another citation is given. Section 90.01 is organized as: A. Compiler (1. Language: Procedure / Data Description / Environment Description; 2. Internal table sizes) and B. Loader.

A.1 Procedure-language restrictions (J 90.01.01–90.01.03)

Statements / verbs

Item Restriction or deferral Citation
CALL verb Subscripts may not be used in specifying the (old.name). Both CALL (A(J))B. and CALL (A(3))B. are erroneous. (J 90.01.01)
CRYPT Qualified names may not be referenced by CRYPT instructions (e.g. CLA MASTER NAME is incorrect). "The verb CALL may be used to reduce a qualified name to a single unique name." (J 90.01.01)
DISPLAY verb "Data names not intended to be used as qualifiers must be separated by commas; otherwise all but the last will be disregarded." (Cross-ref §8.3 item 4: this diverges from F's DISPLAY rules.) (J 90.01.01)
GET verb Card files processed on-line may only be BCD and fixed length for field test. (J 90.01.01)
GET verb All input records containing arrays are processed in the transmit mode by the field test processor: true for both fixed and variable length records. (J 90.01.01)
GET verb Records from different files which have been REDEF'd together will not be automatically transmitted by the field test processor (the automatic feature is described at J 02.07.05 c-ii). SPANS or HOLD must be used. (J 90.01.01)
INCLUDE verb Deferred. "Mechanization of the INCLUDE verb has been deferred, and consequently no library facilities are currently available." (J 90.01.02)
Indexing / DO Repeated use of one subscript name for multiple purposes causes unnecessary re-evaluation of all positional indicators containing that subscript when it changes value: inefficient but "it will not be incorrect". (J 90.01.02)
Indexing / DO The dimensions of an array must be set before calculation of subscript values associated with the array. "Presently, failure to observe this restriction causes invalid object code." Worked example: SET I = 3, SET J = 5. / SET Q = 10. / MOVE A (I,J) TO R. is incorrect where Q holds the QUANTITY of A: the positional indicator for A(I,J) is computed when I and J are set and not updated when Q is set. When an array follows a variable-length array, the positional indicator is not updated when the base is determined; subscripts must be set prior to a subscripted reference to the array. (J 90.01.02)
DO verb "A DO section will always be performed at least once regardless of the values of the loop control variables." (J 90.01.02)
Subscripting "No object time check is made to insure that subscript references conform to the limits specified by the array dimensions in the Data Description." (J 90.01.02)
MOVE verb Figurative constants may not be moved to variable length arrays; they may be moved to fixed length arrays or to array elements. (Amplified at J 02.04.01 c: MOVE BLANKS TO ARRAY illegal where ARRAY has QUANTITY IN; MOVE BLANKS TO FIELD(3) proper; also may not be moved to fields longer than 2^15 − 1 characters, see the catalog in §8.5 re messages 180/181.) (J 90.01.02; J 02.04.01)
LOAD, OVERLAP verbs Deferred. "Implementation of these verbs has been deferred." (Consequence for loader at B.2 below: no program segmentation into separate memory loads.) (J 90.01.03)
Statement termination (misc.) Procedure.names not followed by period-blank "are handled properly; no diagnostic message is given." A period followed by a blank in a procedure statement terminates analysis of the statement except within an alphabetic literal; anything on the same card after the period is assumed commentary; no diagnostic comment is made. (J 90.01.03)

A.2 Data Description restrictions (J 90.01.03–90.01.04)

Item Restriction or deferral Citation
COPY type code Deferred. "Implementation of COPY has been deferred." (Diagnostic 110 also covers LIBRARY: "-COPY- AND -LIBRARY- ARE NOT YET HANDLED BY SYSTEM.") (J 90.01.03; J 90.04.01)
RECORD type code A name with the RECORD type code must be unique. If the record is defined within a section, the section.name may not be used as a qualifier of the record.name. (J 90.01.03)
RECORD type code Since a quantity specification may not be made at the record level, record.names may not be subscripted. (J 90.01.03)
REDEF type code Whenever an input record containing an array is involved in a REDEF, the record containing the array should precede the REDEF for optimum results. "An area involved in a REDEF must not contain subscript variables or a QUANTITY.IN value." (J 90.01.03)
Pictorials A field may not be described as mixed numeric and alphameric (both A's and 9's in one pictorial). "If this specification is made the field is treated as alphameric." (J 90.01.03)
Subscripting of data entries Neither a data item (literal) nor a condition.name may be subscripted. A conditional variable may be subscripted. (J 90.01.03)
Hierarchy layout "Fields may not be defined following a variable length array as part of the same data hierarchy." (J 90.01.04)

A.3 Environment Description restrictions (J 90.01.04)

Item Restriction or deferral Citation
CONTRL card Deferred. "Mechanization of multiple deck combination has been deferred. CONTRL specifications will have no effect on the object deck produced by the Compiler, i.e., no control break table is punched." (CONTRL syntax/rules remain documented at J 02.06.15–16.) (J 90.01.04)
FILE card "A maximum of 63 files may be described." (Enforced by diagnostic 193.) (J 90.01.04; J 90.04.01)
FILE card "No file check table is produced in the object deck." (The object-deck layout at J 02.02.01 nonetheless lists a File Check Table slot; see 90.03 for deck format.) (J 90.01.04)
FILE card CARD, BINARY and locate/transmit mode restrictions are those given with the GET verb (A.1 above). (J 90.01.04)
SPECIF card "Absolute tape assignment cannot be made; symbolic and relative assignment techniques are used (see section 02.06)." (J 90.01.04)
SPECIF card Unless system utility tapes (UTk) are explicitly designated, the drives assigned to them are not used at execution time as object program units. (J 90.01.04)
Environment generally "Qualified names may not be used in the Environment Description." (Restated at J 02.03.03 C: names in Environment and CRYPT must be one word; CALL reduces a qualified name to one word.) (J 90.01.04; J 02.03.03)

A.4 Internal table size limitations (J 90.01.05)

Reproduced from the 90.01.05 table (header reads "Appox-Max Size", sic; note these are stated as approximate maxima):

# Limited quantity Approx-max size
a Internal dictionary including all program names whether defined by the programmer or generated by the Compiler 3500
b Number of SECTIONS 35
c Number of different edited field formats 35
d Number of base locators (for the field test version this is the number of located records) 127
e Number of QUANTITY IN specifications 25
f Depth of nested sections 18
g Number of index expressions (a * VARIABLE ± b) 50
h Number of positional indicators (each unique combination of array and subscript notation, e.g., A(I), A(I + 1) B(I) requires 3 positional indicators) 90
i Number of array dimensions (explicit or implicit Quantity specifications) 85
j Number of levels in a data hierarchy 23
k Number of generated constants in the constant pool -CP)+NN 500

(Item k's -CP)+NN is printed exactly so; scan check 2026-08-01 resolves it: the mark is a plain hyphen, a dash introducing the notation CP)+NN, the manual's own generated-name form ("SYM)NNN", J 90.02.03), which has no opening parenthesis. See §8.5.8.) (J 90.01.05)

Overflow of these tables is reported at compile time by diagnostics 148, 149, 172, 177, 183, 184, 200–205 (see §8.4).

A.5 Loader restrictions (J 90.01.05, part B)

  1. The control break table is not processed by the loader: multiple program loading with cross references by means of control breaks is not available. (J 90.01.05)
  2. Deferred implementation of the LOAD-OVERLAP verbs implies that programs may not be segmented into separate memory loads at this time. (J 90.01.05)
  3. "No debugging facilities are currently available." (J 90.01.05)
  4. Normally the MINIMUM module of IOCS is used with the object program; if checkpoints are desired or specified, BASIC IOCS is used; if labeling exists, the LABELS version of IOCS is necessary. (J 90.01.05)
  5. Trap for the compiler writer: "The Compiler accepts without comment a deck.name containing imbedded blanks and punches it in Loader symbolic control cards. A deck.name of this form is not acceptable to the Loader and will prevent execution of the object program." (Contrast the $CMPLE rule that deck.name "must not include imbedded blanks", J 02.01.01.) (J 90.01.05)

A.6 Deferrals and removals recorded outside Appendix 90.01

These belong in the same master delta list but appear elsewhere in J:

Item Statement Citation
PARAM and FUNCT type codes "These two type codes described in the General Information Manual are no longer in the language." (Removal, not deferral; see §8.3 item 1.) (J 02.05.03)
CRYPT VFD pseudo-op Listed among pseudo-ops which "may not be used" (with HEAD, DEC, DUP, ORG, SYN, END); diagnostic 151 phrases it as "VFD IS NOT YET HANDLED BY SYSTEM." (only-permitted pseudo-ops: OCT, PZE etc. (both MZE and FOR sets), EQU, BSS, BES, BCI) (J 02.08.02, forbidden list; J 02.08.01, permitted list; J 90.04.01)
CRYPT literals "Literals are not presently permitted in machine language." (J 02.08.02)
CRYPT macros "No SCAT macros are acceptable." (J 02.08.01)
$CMPLE MAP option "[,MAP] is an option yet to be specified for obtaining additional load-time information." (J 02.01.02)
Appendix 90.07 "SAMPLE NON STANDARD LABEL PROCESSING (Not Currently Available)": the appendix that both the LABEL type code (J 02.05.03) and the FOR LABEL FILE option (J 02.06.05) refer the reader to does not exist in this edition. (J 00.00, contents)
Environment types Diagnostic 90 "THIS ENVIRONMENT TYPE NOT YET PROCESSED BY COMPILER." implies at least one of the seven environment card types was unimplemented at field test (CONTRL is the documented case, per A.3). (J 90.04.01; J 90.01.04)
GET on unopened file "If the file is not open and a GET command is given, the end of file exit is taken. No error message is given." (Silent runtime behavior.) (J 02.07.04)
FILE on unopened/closed file "the command acts as a NOP. No error message is given." (J 02.07.08)
Located records before first GET References to fields of a located record before the first GET address location zero; "the low order portions of memory (the monitor) will be irreparably damaged." No compile- or run-time check. (J 02.07.05)
Variable-length located records A located variable-length record cannot be expanded unless each record begins a new block; "No check is made for violation of this rule either at compile time or at execute time." (J 02.07.03)


8.3 F28-8043 vs J28-6169: contradictions and divergences

Each item gives both readings. J is authoritative for the implemented language.

  1. PARAM and FUNCT type codes removed. F defines FUNCT and PARAM as required Data Description type codes for the GIVING/USING names of a BEGIN SECTION command (F pp. 72–73; type-code list F p. 71 area; word list marks them † restricted, F p. 110). J: "These two type codes described in the General Information Manual are no longer in the language." (J 02.05.03). Functions themselves survive: J diagnostics 30 and 68 still police function-argument counts (J 90.04.01) and DO USING/GIVING parameter matching is checked (msgs 72–75); only the special data-description marking is gone.

  2. GET verb definition corrected by J. J states outright: "The verb is described incorrectly in the Commercial Translator General Information manual and the definition given in the last paragraph on page 39 of the manual should be replaced with:" followed by replacement text: GET record.name obtains the next record in the file regardless of what record is actually next, in accordance with the characteristics of the named record; the record.name must be associated with only one input file (J 02.07.04, correcting F p. 39). J also adds the five preconditions (a–e) for using GET RECORD FROM file.name (fixed equal lengths / BEGIN / standard variable-length / BLOCK CONTROL / PATTERN) (J 02.07.04).

  3. STOP RUN. F documents only STOP n: halt displaying n, resumable by restart (F p. 54; command list F p. 109 area shows "STOP n"). RUN is absent from F's word list (F p. 110). J requires a STOP RUN in every program to return control to the CT Supervisor, closing all open files as if CLOSE ALL FILES had been given (J 02.04.06 #9), enforces it with diagnostic 175 (J 90.04.01), and reserves RUN (key-word list 2, J 02.03.02; diagnostic 2). J's operator documentation shows both forms: "STOP nnnnnn where nnnnnn is any number 6 digits or less" and STOP RUN (J 05, systems operation).

  4. DISPLAY comma semantics. F: "The DISPLAY command displays all the information that follows the word DISPLAY up to, but not including, a comma or period not enclosed in quotation marks.": a bare comma terminates the displayed material (F p. 54). J: within DISPLAY, "Data names not intended to be used as qualifiers must be separated by commas; otherwise all but the last will be disregarded": the comma is an operand separator (J 90.01.01). Also, J fixes the display device as the on-line 716 printer and caps the quoted material at a 50-character alphameric literal complete on a single line (J 02.04.02.01), where F speaks generally of "an appropriate output device or display medium" (F p. 54).

  5. Pictorial characters A vs X. F distinguishes them: A = "Any non-numeric character, including the blank"; X = "Alphameric character (any character in the machine's character set)" (F p. 80). J collapses the distinction: "The pictorial characters A and X are considered to be synonymous by the 7090 CT Compiler." (J 02.05.04).

  6. Sign-overpunch position. F allows the +/− overpunch "with either of the format characters 8 or 9, in either the units or high-order position of a field" (F p. 80). J restricts external decimal fields to "an overpunched + or - in the rightmost position of the field. A + and - may not appear in the character by itself." (J 02.05.05, note 1; the field-type chart allows the overpunch only in the rightmost character).

  7. Continuation of Data Description literals across lines. F's rule: a constant carried onto a new line must have the portion on each line "treated as a complete constant (i.e., enclosed in quotation marks)"; no continuation indication, no assumed blanks (F p. 83, General Note). J: "Literals in this section which are continued on multiple lines in violation of the rules given on page 83 of the General Information Manual are handled correctly. Use of this characteristic of the 7090 processor should not be made if compatibility with other processors is desired." (J 02.03.01 A.2.c). I.e., the 7090 processor tolerates plain continuation of literals that F declares illegal.

  8. Mixed alphameric/numeric pictorials. F's format-character table and examples never address a pictorial mixing A's and 9's (F pp. 80–81, silent). J explicitly forbids it and defines the fallback: the field is treated as alphameric (J 90.01.03).

  9. Reserved-word lists restructured. F gives one flat list of "Commercial Translator Words" to avoid, with † marking words restricted only in data description (COND, COPY, FUNCT, LABEL, LIBRARY, PARAM, QUANTITY, REDEF) (F p. 110). J replaces this with a three-tier key-word system: (1) thirteen words never usable as programmer names in any division (BEGIN, FILE, FOR, HIGH.VALUE, HIGH.VALUES, IN, LOW.VALUE, LOW.VALUES, ON, RECORD, WHEN, ZERO, ZEROS); (2) words not usable as Data or Procedure names (56 words incl. RUN and CRYPT, neither in F's list); (3) words usable as Procedure/Data names if not referenced in the Environment Division (ACTIVITY, BCD, BINARY, BLOCKSIZE, … 49 words, 48 of them absent from F; LABEL is the one F carries) (J 02.03.02–02.03.03). Compiler writers need both lists; J governs.

  10. LOAD / OVERLAP presented as available in F, deferred in J. F describes the LOAD command (F p. 54) and OVERLAP processor command with object-program overlay organization (F pp. 55–56). J defers both verbs (J 90.01.03) and notes the loader consequence: no segmentation into separate memory loads (J 90.01.05 B.2).

  11. INCLUDE / library facilities. F describes the INCLUDE command with name substitution from library procedures (F p. 58; cross-referenced at F p. 52, cf. p. 12) and the LIBRARY description-field code for copying stored data descriptions (F p. 81). J defers INCLUDE entirely: "no library facilities are currently available" (J 90.01.02); and diagnostic 110 rejects both COPY and LIBRARY (J 90.04.01).

  12. COPY type code. Defined in F (type list F p. 71 area; description-field usage F p. 81). Deferred in J (J 90.01.03; diagnostic 110).

  13. HIGH.VALUE / LOW.VALUE made concrete. F defines them abstractly as the highest and lowest characters in the collating sequence of the target system (F p. 20). J instantiates: HIGH.VALUE is the left parenthesis "(" and LOW.VALUE the zero "0" under the native 709/7090 sequence; under COLLATE COM (Commercial/705 sequence) HIGH.VALUE is 9 and LOW.VALUE is blank (J 02.04.01; collating sequences displayed at J 02.06.16). J also adds comparison restrictions (ZERO vs numeric or alphameric; HIGH.VALUE/LOW.VALUE/BLANK vs alphameric only) and the MOVE/SET target-field legality chart with "Illegal" cells (J 02.04.01–02.04.02), none of which appear in F.

  14. DO loop semantics: agreement, with a shared gap. F's expansion of DO rtn FOR i = p(q)r executes the body before the test (SET i = p. / START. DO rtn. / IF i = r THEN GO TO NEXT. / ADD q TO i. / GO TO START.) (F pp. 50–51); J confirms "A DO section will always be performed at least once regardless of the values of the loop control variables" (J 90.01.02). Note both manuals terminate on equality with r, not on exceeding it; see the catalog in §8.5.

  15. Figurative-constant MOVE limits added by J. F places no length limits on figurative-constant moves (F pp. 19–20). J forbids moves to variable-length arrays and to fields longer than 2^15 − 1 characters (J 02.04.01; J 90.01.02; diagnostics 180/181).

  16. Environment Description documented only in J. F's Preface expressly omits environment-description rules, deferring them to processor publications (F Preface, PDF p. 6). J 02.06 is therefore the sole source for FILE / SPECIF / POOL / GROUP / CONTRL / OPTION / COND card rules; there is no F baseline to diverge from. (J 02.06.01–02.06.17)

  17. Period as terminator differs by division. F's punctuation rules (F p. 27 area) describe the period sentence-terminator generally. J sharpens: in Procedure, the first period-followed-by-blank terminates the statement, remainder is commentary (J 02.03.01 A.3.a; J 90.01.03 — no diagnostic given); in Data and Environment, entries end when column 72 is blank and "The period (.) must not be used to signal completion. In these sections, a period is considered part of the previous word, thus creating an undefined name." (J 02.03.02 A.3.b; restated for Environment at J 02.06.02).



8.4 The severity-code system and rules implied by the diagnostics (J Appendix 90.04)

B.1 The severity-code system

B.2 Implied language rules, message by message

All message texts below are from the compiler error-message listing (J 90.04.01, messages 0–209); abbreviated where marked "…", and with intra-message spacing normalized (the listing prints e.g. "( E A(2) )" with double spaces and occasional space-before-period). 'NAME.1'/'NAME.2' are compiler substitution placeholders; numeric values inside message texts (24, 12, 999, 16, etc.) are representative sample values from the fixed text, not variables (per transcriber note at J 90.04.01). The citation for every row is (J 90.04.01); the msg number is given so the row can be traced.

Numeric limits revealed by diagnostics

Implied rule / limit Msg #: text (abbrev.)
COND-card key setting max 12 octal digits; excess keeps rightmost 12; non-octal setting replaced by '1' 6: "-COND- CARD KEY SETTING EXCEEDS 12 DIGITS. RIGHTMOST 12 DIGITS USED."; 7: "…MUST BE OCTAL. KEY SETTING '1' USED." (matches J 02.06.17: 'nn' is 12 octal digits for 36 console keys)
Max 16 records in a PATTERN on a FILE card 50: "NUMBER OF RECORDS IN -PATTERN- CANNOT EXCEED 16."
Pictorial max 30 characters 100: "DATA DESCRIPTION CONTAINS PICTORIAL WHICH EXCEEDS LEGAL LIMIT OF 30 CHARACTERS."
Alphabetic literal max 50 characters 150: "ALPHABETIC LITERAL EXCEEDS 50 CHARACTERS." (matches F p. 18 and J 02.04.02.01 DISPLAY rule)
Alphabetic literal after a SPECIF key word max 6 characters 160: "ALPHABETIC LITERAL FOLLOWING KEY WORD CANNOT EXCEED 6 CHARACTERS."
Max 60 operators per sentence 171: "NUMBER OF OPERATORS IN THIS SENTENCE EXCEEDS MAXIMUM OF 60. SENTENCE DELETED FROM TEXT."
Max 63 files 193: "LIMIT OF 63 FILES EXCEEDED." (matches J 90.01.04)
Figurative constant move: target field length capped (32766 chars per message; 2^15−1 per J 02.04.01; see ambiguities) 181: "MOVE OF FIGURATIVE CONSTANT TO FIELD LONGER THAN 32766 CHARACTERS NOT YET HANDLED…"
CONTRL load name unique, ≤ 6 characters 207: "-CONTRL- NAME MUST BE UNIQUE AND 6 CHARACTERS OR LESS." (matches J 02.06.15 "loadnm is a name of 6 characters or less")

Lexical / card-format / statement-structure rules

Implied rule Msg #: text (abbrev.)
Every Procedure statement must end with period(+blank); an unterminated card gets a period assumed 62: "PREVIOUS CARD NOT PROPERLY TERMINATED. PERIOD ASSUMED."
Alphabetic literals need a closing quote and must be complete on one card 167: "SECOND QUOTE MARK MISSING."; 168: "ALPHABETIC LITERAL EXTENDS ACROSS CARDS." (cf. J 02.03.01 A.2.c and F p. 18 rule 1)
Source characters outside the language character set are invalid; replaced by 0 internally / $ externally 134: "ILLEGAL CHARACTER REPLACED IN INTERNAL TEXT BY 0, AND IN EXTERNAL TEXT BY $."
Data/Environment fixed-field info (level, type, quantity, mode, justify) belongs only on the first card of a multi-card group 186: "DATA OR ENVIRONMENT FIXED FIELD INFORMATION SHOULD BE PUNCHED IN ONLY THE FIRST CARD OF A MULTIPLE CARD GROUP. POSSIBLE CONTINUATION CHARACTER ERROR." (matches J 02.03.01 A.2.d)
A sentence may not begin with OTHERWISE 208: "SENTENCE CANNOT START WITH -OTHERWISE-"
Every statement must contain exactly one verb 125: "STATEMENT WITHOUT PROPER VERB DELETED FROM TEXT."; 126: "STATEMENT WITH MORE THAN ONE VERB DELETED…"
Incomplete statements are deleted, not repaired 122: "INCOMPLETE STATEMENT DELETED FROM TEXT."
General sentence-structure validity; key words cannot appear in arbitrary positions 192: "SENTENCE STRUCTURE ERROR. POSSIBLE ILLEGAL USE OF A KEY WORD."; 196: "ILLEGAL SENTENCE STRUCTURE NOTHING DONE."
Parentheses must balance; extras diagnosed 113: "REDUNDANT RIGHT PARENTHESIS ELIMINATED."; 114: "REDUNDANT LEFT PARENTHESIS."
The job deck must end with *FINISH before end-of-file 132: "END OF FILE ON JOB TAPE WITHOUT *FINISH CARD." (matches J 02.01.02 *FINISH rule)

Name rules

Implied rule Msg #: text (abbrev.)
RUN is reserved to the processor and may not be a programmer name 2: "-RUN- DELETED. ITS USE IS RESTRICTED TO PROCESSOR." (cf. key-word list 2, J 02.03.02)
An operation (verb/key word) may not be defined as a name or appear in a name field 61: "OPERATION DEFINED AS NAME OR FOUND IN NAME FIELD."
Key words should not be used as data names; Procedure key words in Data/Environment are demoted to data names 152: "'NAME.1' SHOULD NOT BE USED AS DATA NAME."; 178: "PROCEDURE KEY WORD USED IN DATA OR ENVIRONMENT, INTERPRETED AS A DATA NAME."
Qualification must be well-formed 101: "'NAME.1' IS AN IMPROPERLY QUALIFIED NAME."
All referenced names must be defined 108: "'NAME.1' IS AN UNDEFINED SYMBOL."; 191: "'NAME.1' IS NOT PROPERLY DEFINED."
Names must be unique within a section 166: "'NAME.1' IS NOT UNIQUE IN THIS SECTION."
System-generated (GN)nnn / SYS) style) names are not user-referable 173: "REFERENCE MADE TO NON-EXISTENT SYSTEM GENERATED NAME."; 174: "REFERENCE TO SYSTEM SUBROUTINE LACKS PROPER NUMBER. ZERO ASSUMED."

Section structure and control flow

Implied rule Msg #: text (abbrev.)
END must match an open section; sections nest strictly and must all be closed 64: "CANNOT -END- SECTION WHEN NONE ARE OPEN."; 65: "CANNOT -END- SECTION 'NAME.1' BEFORE SECTION 'NAME.2'."; 66: "ONE OR MORE SECTIONS NOT CLOSED."
An END section clause must stand alone in its sentence 179: "-END- SECTION MUST BE THE ONLY CLAUSE IN THE SENTENCE."
Control must not flow off the end of procedure text into data, generated constants, or into a DO-addressed procedure 87: "PROBABLE PROGRAM CONTINUITY ERROR. PROGRAM FLOWS INTO *DATA."; 169: "…FLOWS INTO GENERATED CONSTANTS."; 99: "…FLOWS INTO STATEMENT OR SECTION 'NAME.1' ADDRESSED BY A -DO-." (i.e., DO subroutines are closed/linked — F p. 50)
GO TO targets must be statement or section names, and must not be DO-addressed procedures 127: "TRANSFER BYPASSED BECAUSE 'NAME.1' IS NOT A STATEMENT OR SECTION NAME."; 128: "TRANSFER BYPASSED BECAUSE 'NAME.1' IS A STATEMENT OR SECTION NAME ADDRESSED BY A -DO-."
Assigned GO TO index must be a proper integer; non-integer truncated 129: "FORMAT ERROR FOR TRANSFER INDEX. NOTHING DONE."; 130: "TRANSFER INDEX NOT AN INTEGER. INTEGRAL PART TAKEN AS VALUE."
DO targets must be statement/section names 188: "'NAME.1', ADDRESSED BY A -DO-, IS NEITHER A STATEMENT NOR A SECTION NAME."
There is a PROGRAM.START facility: at most one, must name a statement/section, must not be DO-addressed 141: "MORE THAN ONE -PROGRAM.START-. FIRST USED."; 142: "-PROGRAM.START- MUST BE A STATEMENT OR SECTION NAME."; 143: "-PROGRAM.START- CANNOT BE A STATEMENT OR SECTION NAME ADDRESSED BY A -DO-."
Every program must contain STOP RUN 175: "NO -STOP RUN- IN PROGRAM." (matches J 02.04.06 #9; see §8.3 item 3)

DO / functions / subscripting

Implied rule Msg #: text (abbrev.)
DO … USING/GIVING parameter lists must match the target procedure's parameter/function counts exactly 72–75: "TOO MANY / TOO FEW -USING- / -GIVING- PARAMETERS IN -DO- STATEMENT"
DO statements have a fixed set of valid forms 83: "INVALID FORM OF -DO- STATEMENT."
Loop control variables and their parameters (p, q, r) must have integer-compatible formats; literal parameters checked too 76: "FORMAT ERROR FOR LOOP CONTROL VARIABLE 'NAME.1'."; 77: "…FOR PARAMETER 'NAME.1' OF LOOP CONTROL VARIABLE."; 78: "…FOR LITERAL PARAMETER OF LOOP CONTROL VARIABLE 'NAME.1'."
Function references must specify all arguments, and not more than declared 30: "FUNCTION 'NAME.1' LACKS EXPLICIT SPECIFICATION OF ALL ARGUMENTS."; 68: "EVALUATION IGNORED FOR FUNCTION 'NAME.1'. TOO MANY ARGUMENTS SPECIFIED." (note: functions survive in J even though the PARAM/FUNCT type codes were removed; see §8.3 item 1)
Subscript variables must be integers of numeric type 31: "SUBSCRIPT VARIABLE 'NAME.1' MUST BE AN INTEGER."; 79: "SUBSCRIPT VARIABLE 'NAME.1' MUST BE OF NUMERIC TYPE."
Subscripted references must match the array's declared number of dimensions and use valid subscript-variable formats 70: "CHECK ARRAY OF ELEMENTS, 'NAME.1', FOR NUMBER OF DIMENSIONS."; 71: "INVALID FORMAT FOR SUBSCRIPT VARIABLE IN ARRAY OF ELEMENTS, 'NAME.1'."; 98: "CHECK DATA DESCRIPTION OF ARRAY OF ELEMENTS, 'NAME.1'."
Inefficient (but legal) subscript formats are warned about 206: "'NAME.1' HAS INEFFICIENT FORMAT FOR SUBSCRIPT VARIABLE."

Conditionals / comparisons

Implied rule Msg #: text (abbrev.)
Comparison structures have a fixed grammar 107: "ILLEGAL COMPARISON STRUCTURE."
Variable length items may not be compared 123: "CANNOT USE VARIABLE LENGTH ITEMS FOR COMPARISON." (matches J 02.04.07 C.5)
Conditional expressions have a bounded internal test capacity 187: "CONDITIONAL EXPRESSION TEST CAPACITY EXCEEDED. REWRITE AS TWO OR MORE SEPARATE EXPRESSIONS, EACH WITH ILLEGAL SENTENCE STRUCTURE NOTHING DONE." (text as printed; see the catalog in §8.5; appears garbled)
IF and WHEN are distinct; the compiler substitutes WHEN for improper use of IF 170: "-WHEN- SUBSTITUTED FOR -IF- BECAUSE OF IMPROPER USE."

MOVE / ADD / SET / arithmetic

Implied rule Msg #: text (abbrev.)
Data formats constrain each operation; illegal source/target format combinations are rejected with the field's format echoed 25: "OPERATION IGNORED BECAUSE 'NAME.1' HAS IMPROPER DATA FORMAT ( E A(2) ) FOR THIS USE."; 84: "ILLEGAL MOVE - FROM 'NAME.1' ( E A(2) ) TO 'NAME.2' ( IR 999 ). NOTHING DONE."; 182: "IMPROPER DATA FORMAT." (mode/format compatibility chart at J 02.04.03)
MOVE requires a complete expression 119: "INCOMPLETE -MOVE- EXPRESSION."
ADD operands of improper format are dropped from the sum 120: "'NAME.1' ELIMINATED FROM ADD BECAUSE OF IMPROPER DATA FORMAT ( E A(2) )."
CORRESPONDING is only valid immediately after ADD or MOVE, and must be structurally valid 63: "NEITHER -ADD- NOR -MOVE- PRECEDES -CORRESPONDING-"; 97: "INVALID -CORRESPONDING- STATEMENT."
Scaling can silently destroy significance; the compiler warns 27: "DOWNSCALE GENERATED WHICH LOSES ALL SIGNIFICANT FIGURES."; 199: "UPSCALE MAY CAUSE HIGH ORDER TRUNCATION FOR STORE INTO 'NAME.1'"
Compile-time division by zero is bypassed with result zero 28: "ATTEMPTED DIVISION BY ZERO BYPASSED. RESULT TAKEN TO BE ZERO."
A missing operand in an expression is taken as zero 116: "MISSING OPERAND ASSUMED TO BE ZERO."
Figurative constants have restricted usages 82: "INCORRECT USAGE OF FIGURATIVE CONSTANT."; 180: "MOVE OF FIGURATIVE CONSTANT TO VARIABLE LENGTH FIELD NOT YET HANDLED BY SYSTEM."; 181 (see limits table above). (chart at J 02.04.02)
Transfer addresses must be legal 26: "OPERATION IGNORED BECAUSE 'NAME.1' IS ILLEGAL TRANSFER ADDRESS."

Data Description rules

Implied rule Msg #: text (abbrev.)
Every data name needs a level 194: "DATA NAME LACKS LEVEL."
Mode column and pictorial must agree 32: "MODE AND DATA DESCRIPTION CONFLICT. 'NAME.1' FORMAT USED."
Format (pictorial) characters combine only in legal ways; counts bounded 33: "ILLEGAL COMBINATION OF FORMAT CHARACTERS…'NAME.1' FORMAT USED."; 34: "MAXIMUM FORMAT CHARACTER COUNT EXCEEDED…"; 35: "MAXIMUM NUMERIC LENGTH EXCEEDED…"; 185: "DATA DESCRIPTION PICTORIAL ERROR."; 133: "NO RIGHT PARENTHESIS IN FORMAT PICTORIAL."
A field on the format-description level may not have sub-organization 36: "DATA ON FORMAT DESCRIPTION LEVEL CANNOT HAVE SUB-ORGANIZATION. CHECK 'NAME.1'." (matches J 02.05.06 c)
Conditional variables have format restrictions and may not carry QUANTITY 37: "FORMAT ERROR FOR CONDITIONAL VARIABLE…"; 38: "CONDITIONAL VARIABLE CANNOT HAVE -QUANTITY-."
Right justification is only valid on format-description-level data 39: "DATA NOT ON FORMAT DESCRIPTION LEVEL CANNOT BE SPECIFIED AS RIGHT JUSTIFIED." (matches J 02.05.04 D.3)
REDEF/QUANTITY IN targets must be already-defined data names, not COND entries or constants 40: "-REDEF- TO 'NAME.1' CANNOT OCCUR BEFORE DEFINITION."; 41: "NAME ASSOCIATED WITH -REDEF- OR -QUANTITY IN- IS UNDEFINED."; 45: "'NAME.1' IS -COND- TYPE AND CANNOT BE ASSOCIATED WITH -REDEF- OR -QUANTITY IN-."; 46: "'NAME.1' IS NOT DATA NAME AND CANNOT BE ASSOCIATED WITH…"
REDEF preserves justification and level of the original definition 80: "CONFLICT BETWEEN JUSTIFICATION AS GIVEN BY ORIGINAL DEFINITION AND -REDEF-."; 81: "CONFLICT BETWEEN LEVEL AS GIVEN BY ORIGINAL DEFINITION AND -REDEF-."
REDEF or LABEL between nonformat and format levels endangers positioning (warning) 104: "-REDEF- OR -LABEL- OCCURRING BETWEEN NONFORMAT AND FORMAT DESCRIBED LEVELS MAY AFFECT POSITIONING ADVERSELY."
Every data item must have length 42: "DATA ITEM WITHOUT LENGTH. CHECK 'NAME.1'." (cf. record-length rule J 02.05.01 B.1.b)
Constants may not be part of a REDEF, an input record, an edited field, or follow a variable-length field 43: "CONSTANT CANNOT BE ASSOCIATED WITH -REDEF- OR INPUT RECORD, OR PRECEDED BY VARIABLE LENGTH FIELD."; 57: "CONSTANT CANNOT BE GIVEN FOR EDITED TYPE FIELD." (matches J 02.05.06 E.2.a)
Constant/pictorial length agreement enforced; sign convention enforced; character legality enforced; conversion over/underflow diagnosed 51: "CONFLICT BETWEEN LENGTH OF CONSTANT AND PICTORIAL OF 'NAME.1'."; 52: "MAXIMUM NUMERIC LENGTH EXCEEDED FOR CONSTANT OR LITERAL."; 53: "INCORRECT USAGE OF PERIOD, SIGN, OR F FOR CONSTANT OR LITERAL."; 54: "ILLEGAL CHARACTER FOR CONSTANT OR LITERAL."; 55/56: "FLOATING POINT OVERFLOW / UNDERFLOW IN CONVERTING CONSTANT OR LITERAL."; 58: "CONSTANT OF EXTERNAL DECIMAL TYPE IN ERROR. CHECK 'NAME.1'."; 59: "CONFLICT BETWEEN LENGTH OF ALPHABETIC CONSTANT AND PICTORIAL." (rules at J 02.05.06–07 E.2)
A zero repetition count in a pictorial is corrected to one 60: "ZERO COUNT IN PICTORIAL REPLACED BY ONE."
Numeric fields may not contain non-numeric characters 67: "THERE IS AN ILLEGAL NON-NUMERIC CHARACTER IN THE NUMERIC FIELD."
Unspecified maximum QUANTITY defaults to 1 for storage allocation 44: "UNSPECIFIED MAXIMUM QUANTITY ASSUMED TO BE 1 FOR STORAGE ALLOCATION." (matches J 02.05.04 C)
QUANTITY IN name must be numeric and on the format-description level 102: "NAME OF NUMERIC TYPE MUST FOLLOW -QUANTITY IN-. 'NAME.1' IS ALPHABETIC TYPE."; 47: "DATA NOT ON FORMAT DESCRIPTION LEVEL CANNOT BE ASSOCIATED WITH -QUANTITY IN-."
RECORD, COND, REDEF, LABEL entries cannot themselves be QUANTITY items 103: "DATA NAME HAVING -RECORD-, -COND-, -REDEF- OR -LABEL- CANNOT BE -QUANTITY- ITEM."
A QUANTITY item may not follow a variable field that depends on that same item 105: "-QUANTITY- ITEM 'NAME.1' CANNOT FOLLOW VARIABLE FIELD WHICH DEPENDS ON THE -QUANTITY- ITEM ITSELF."
Mode column accepts only legal mode characters; illegal ones default to External 189: "EXTERNAL MODE SUBSTITUTED FOR ILLEGAL MODE CHARACTER."
Justify column accepts only legal justification characters; illegal ones ignored 190: "FIELD IS NOT JUSTIFIED BECAUSE OF ILLEGAL JUSTIFICATION CHARACTER."
A record's description must be preceded by its record name 197: "RECORD NAME MUST PRECEDE DESCRIPTION OF RECORD."

Environment Description rules

Implied rule Msg #: text (abbrev.)
FILE and COND cards require a name in columns 7–22 1: "-FILE- CARD LACKS NAME IN COLUMNS 7 THROUGH 22."; 88: "-COND- CARD LACKS NAME IN COLUMNS 7 THROUGH 22."
Each environment card type has a fixed format 3: "-OPTION- CARD FORMAT ERROR."; 4: "-COND- CARD FORMAT ERROR."; 89: "-FILE- CARD FORMAT ERROR."; 153: "-SPECIF- CARD FORMAT ERROR."; 161: "-POOL- CARD FORMAT ERROR."; 164: "-GROUP- CARD FORMAT ERROR."; 176: "-CONTRL- CARD FORMAT ERROR."; 144: "ILLEGAL ENVIRONMENT CARD TYPE."; 96: "THERE IS AN ILLEGAL WORD IN THE -FILE- CARD."
FILE-card option operands are typed: BLOCKSIZE needs a numeric integer; ONERROR/FORLABEL/AT END need statement or section names; PLACE/FIND LENGTH IN need data names 91: "NUMERIC INTEGER MUST FOLLOW -BLOCKSIZE- IN THE -FILE- CARD."; 92: "STATEMENT OR SECTION NAME MUST FOLLOW -ONERROR-…"; 93: "…-FORLABEL-…"; 94: "DATA NAME MUST FOLLOW -PLACE LENGTH IN-…"; 95: "…-FIND LENGTH IN-…"; 106: "STATEMENT OR SECTION NAME MUST FOLLOW -AT END-. CHECK 'NAME.1'."
SPECIF operands typed: UNIT/SERIAL/REEL take alphameric literals; RETAIN/ACTIVITY take numeric integers; file name is first item in the variable field 154: "FILE NAME MUST BE FIRST ITEM IN VARIABLE FIELD."; 155–157: "ALPHAMERIC LITERAL MUST FOLLOW -UNIT- / -SERIAL- / -REEL-."; 158/159: "NUMERIC INTEGER MUST FOLLOW -RETAIN- / -ACTIVITY-."
POOL/GROUP operands typed 162: "NUMERIC INTEGER MUST FOLLOW -BLOCKSIZE- ON -POOL- CARD."; 163: "…-BUFFERCOUNT-."; 165: "…-OPENCOUNT-."
Record/file consistency: every referenced entity must be a record or file; records must appear on (exactly one input) FILE card; records FILEd must be on that file's FILE card; GET RECORD FROM needs an input file with determinable record length 8: "'NAME.1' IS NEITHER A RECORD NOR A FILE…"; 9/10: "RECORD 'NAME.2' MUST BE ON A[N INPUT] -FILE- CARD…"; 11: "RECORD 'NAME.2' CANNOT BE ON MORE THAN ONE INPUT -FILE- CARD…"; 12: "INCORRECT USE OF -GET RECORD FROM-. CANNOT DETERMINE RECORD LENGTH…"; 13/15: "'NAME.1' FILE LACKS RECORD NAME IN -FILE- CARD OR NO CORRESPONDING RECORD NAME IS IN DATA DESCRIPTION."; 14: "INCORRECT USE OF -GET RECORD FROM-. 'NAME.1' IS NOT AN INPUT FILE…"; 16: "'NAME.2' IS NOT A RECORD…"; 17: "'NAME.2' MUST BE RECORD NAME IN -FILE- CARD."; 19: "RECORD 'NAME.2' MUST BE ON AN OUTPUT -FILE- CARD…"; 21: "'NAME.1' IS NOT A FILE…"; 22: "'NAME.1' IS NOT AN OUTPUT FILE…"; 23: "INCORRECT USE OF -GET RECORD FROM-…"; 195: "CANNOT FILE RECORD 'NAME.2' IN THIS FILE, 'NAME.1', BECAUSE ENVIRONMENT FILE CARD LACKS THIS RECORD NAME."; 198: "NO RECORDS PROCESSED IN FILE 'NAME.1'"
Mode consistency: binary data cannot go to a BCD tape 20: "BINARY DATA CANNOT BE OUTPUT ON BCD TAPE."
Record length must not exceed blocksize unless SPANS given; blocksize adequacy checked 5: "RECORD LENGTH 24 OF 'NAME.2' EXCEEDS 'NAME.1' -BLOCKSIZE- 12. -FILE- CARD MUST HAVE -SPANS-."; 209: "'NAME.1' HAS INSUFFICIENT BLOCKSIZE. BLOCKSIZE USED IS" (value appended at run time; message ends without period as printed)
PATTERN must name records; a single-record pattern is legal but inefficient 48: "NO RECORDS SPECIFIED IN -PATTERN- ON -FILE- CARD FOR 'NAME.1'."; 49: "SINGLE RECORD IN THE -PATTERN-… INEFFICIENT PROGRAM PRODUCED." (note: PATTERN is referenced by J 02.07.04 e but has no printed general form on the FILE card at J 02.06.03; see the catalog in §8.5)
FIND/PLACE LENGTH IN and BLOCK CONTROL must be applied uniformly to all records of a file referenced by GET RECORD FROM 117/118/121: "-FIND LENGTH IN- / -PLACE LENGTH IN- / -BLOCK CONTROL- OPTION USED WITH SOME BUT NOT ALL OF THE RECORDS BELONGING TO THE FILE 'NAME.1' REFERENCED BY A -GET RECORD FROM-." (matches J 02.07.08 E: options may be elected selectively only with GET record.name)
FIND/PLACE LENGTH IN data names must have proper formats 111/112: "'NAME.1' HAS IMPROPER DATA FORMAT FOR THIS USE IN THE -FIND LENGTH IN- / -PLACE LENGTH IN- OPTION."
OPEN/CLOSE take file names 138: "FILE NAME SHOULD FOLLOW -CLOSE-."; 139: "…-OPEN-."
Console-key settings that are hard to code get a warning 86: "DIFFICULT TO PROGRAM KEY SETTING. CHECK ENVIRONMENT DESCRIPTION."

CRYPT / assembly-level rules

Implied rule Msg #: text (abbrev.)
CRYPT operations must be valid machine operations 115: "INVALID MACHINE OPERATION."
CRYPT instructions require address/tag/decrement fields where the operation demands them 145: "MISSING ADDRESS."; 146: "MISSING TAG."; 147: "MISSING DECREMENT."
VFD pseudo-op unavailable 151: "VFD IS NOT YET HANDLED BY SYSTEM."

DISPLAY

Implied rule Msg #: text (abbrev.)
DISPLAY statements have a checked structure 131: "INVALID DISPLAY STATEMENT."

Capacity-overflow diagnostics (enforce the A.4 table)

Table limit enforced Msg #: text (abbrev.)
Alphabetic-constant table 148: "LENGTH OF ALPHABETIC CONSTANT EXCEEDS INTERNAL TABLE CAPACITY AND SHOULD BE SUBDIVIDED."
Sections (≈35) 149: "NUMBER OF SECTIONS IN PROGRAM EXCEEDS INTERNAL TABLE CAPACITY."
Constant pool (≈500) 172: "CONSTANT POOL OVERFLOW."
Sentence size 177: "THIS SENTENCE EXCEEDS INTERNAL TABLE CAPACITY. SENTENCE DELETED FROM TEXT."
Index expressions (≈50) 183: "NUMBER OF SUBSCRIPT EXPRESSIONS USED EXCEEDS INTERNAL TABLE CAPACITY."
Positional indicators (≈90) 184: "NUMBER OF SUBSCRIPTED NAMES USED EXCEEDS INTERNAL TABLE CAPACITY."; 205: "INTERNAL TABLE OVERFLOW. REDUCE DUPLICATE USAGE OF SUBSCRIPT VARIABLE NAMES."
Variable-length fields 200: "NUMBER OF VARIABLE LENGTH FIELDS EXCEEDS INTERNAL TABLE CAPACITY."
Hierarchy depth (≈23) 201: "NUMBER OF NESTED LEVELS IN 'NAME.1' EXCEEDS INTERNAL TABLE CAPACITY."
Base locators (≈127) 202: "NUMBER OF DATA GROUPS ASSOCIATED WITH BASE LOCATOR EXCEEDS INTERNAL TABLE CAPACITY."
Array dimensions (≈85) 203: "NUMBER OF ARRAYS EXCEEDS INTERNAL TABLE CAPACITY."
Edited field formats (≈35) 204: "NUMBER OF DIFFERENT EDIT FIELDS EXCEEDS INTERNAL TABLE CAPACITY."

Compiler self-diagnostics (no language rule implied; listed for completeness)

Msg #: text (abbrev.)
0: "ERROR MESSAGE NOT YET IN FILE."
18, 24, 29, 124: "ILLEGAL INTERNAL CONDITION. NOTHING DONE. POSSIBLE COMPILER ERROR."
69: "ILLEGAL INTERNAL CODE 'NAME.1' SENT TO ASSEMBLY. POSSIBLE COMPILER ERROR."
85: "PERMANENT READ ERROR IN PHASE 2. COMPILATION SUSPECT."; 135: "PERMANENT READ ERROR FOR INPUT. DUBIOUS COMPILATION."
109: "PROCESSOR UNABLE TO FIND VARIABLE USED AS SUBSCRIPT. POSSIBLE COMPILER ERROR."
136/137: "REDUNDANCY WHILE WRITING / READING EXTERNAL DICTIONARY. DUBIOUS COMPILATION."
140: "INTERNAL TEXT SYNCHRONIZATION FAILURE. DUBIOUS COMPILATION."


8.5 Consolidated ambiguity catalog, with plausible resolutions

Every genuine ambiguity, contradiction, or underspecification flagged anywhere in §§1–7 and §9, deduplicated and grouped by language area. Items that are plain F/J divergences with a clear J-side answer live in §8.3 and are not repeated here. Format: the problem, then Resolution: the most historically plausible reading and why. Transcription-level doubts (where the uncertainty is in the scan/conversion, not the language) are separated into §8.5.8.

8.5.1 Lexical

8.5.2 Program structure

8.5.3 Data description

8.5.4 Arithmetic and data manipulation

8.5.5 Control flow

8.5.6 Input/output

8.5.7 Environment, control cards, and processor surface

8.5.8 Transcription and printing artifacts (conversion-level cautions)

These are uncertainties in the scans or the printed originals, not in the language. A scan-resolution pass was run on 2026-08-01 (the disputed pages were re-read at 400–600 dpi from the source PDF, with the two most load-bearing results independently verified), and each entry below records its outcome. Following that pass, and under a one-time authorization, the affected conversion notes in comtran-manuals/ were corrected on the same date and the nj mark added verbatim to the transcribed Input FILE form; entries below that quote a conversion note describe it as originally written. A second authorized pass ran on 2026-08-05 and applied five further corrections to 90.05-sample-program.md; only one of the five, entry (j), is catalogued here, because the other four are print facts of the listing and their evidence lives in the design records that measured them.