Every Program Logic Manual (PLM) is scored 0–100 so the corpus result
is interpretable, not a bare marketing number. The rubric is
archetype-specific: a program is classified into one of
eight archetypes first (see METHODOLOGY.html §2), and each
archetype is scored on six maintenance-scenario tasks
with archetype-appropriate weights. The tasks and weights below are the
live rubric weights used to score this corpus —
extracted from the scoring harness, not illustrative.
coverage × quality × 100 — so a PLM that covers a
scenario broadly but shallowly, or narrowly but well, cannot max the
task; it must be both complete and correct.grounding_coverage (how much of each
claim traces to a citation) is measured and reported but is
diagnostic only — it never feeds the score.Two things sit outside this weighted average and are handled separately: the fabrication hard-gate (below) and critical-error penalties (a direct source contradiction can cap a task regardless of coverage).
Every archetype carries Business Purpose (what/why) and Error Handling (failure paths); the middle four tasks are what distinguishes the archetype.
| Task | Weight |
|---|---|
| Business Purpose | 10% |
| Screen Flow / State Machine | 20% |
| Trace File→Screen Data Flow | 25% |
| Search / Lookup Logic | 20% |
| PF-Key Navigation | 20% |
| Error Handling | 5% |
| Task | Weight |
|---|---|
| Business Purpose | 10% |
| Screen Flow / State Machine | 25% |
| Field Validation | 20% |
| Trace Screen→File Data Flow | 20% |
| PF-Key Dispatch | 20% |
| Error Handling | 5% |
| Task | Weight |
|---|---|
| Business Purpose | 15% |
| Menu Options & Routing | 30% |
| PF-Key Dispatch | 20% |
| Screen Layout | 15% |
| Program Transfer Logic | 15% |
| Error Handling | 5% |
| Task | Weight |
|---|---|
| Business Purpose | 15% |
| Transaction Processing Logic | 25% |
| Data Access | 25% |
| External Dependencies | 15% |
| COMMAREA Interface | 15% |
| Error Handling | 5% |
| Task | Weight |
|---|---|
| Business Purpose | 15% |
| File Update Logic (REWRITE/DELETE/WRITE) | 25% |
| Trace Input→Output Data Flow | 20% |
| Record Matching / Selection | 15% |
| File Processing Logic | 20% |
| Error Handling | 5% |
| Task | Weight |
|---|---|
| Business Purpose | 15% |
| Totaling Hierarchy | 25% |
| Report Layout | 20% |
| Trace Input→Output Data Flow | 20% |
| File Processing Logic | 15% |
| Error Handling | 5% |
| Task | Weight |
|---|---|
| Business Purpose | 25% |
| Program Function | 25% |
| Trace Input→Output Data Flow | 15% |
| Dependencies | 15% |
| Processing Logic | 15% |
| Error Handling | 5% |
| Task | Weight |
|---|---|
| Business Purpose | 15% |
| Interface Contract | 30% |
| Trace Input→Output Parameters | 20% |
| Processing Logic | 20% |
| Caller Integration | 10% |
| Error Handling | 5% |
The weights encode what a maintainer of that kind of program actually needs: a called subprogram's value is its interface contract (30%), a menu's is its routing (30%), an inquiry's is the file→screen data flow (25%). Business Purpose and Error Handling are held light (10–25% / 5%) so the discriminating middle tasks drive the score.
Fabrication is not a scored dimension that can be
averaged against good writing. It is a pass/fail
pre-check run before the six tasks are scored: every
named entity in the PLM — field, paragraph, file/dataset, copybook, CICS
command/map, CALL'd program — is resolved against the source and its
Structured Technical Baseline. Any entity not found → the PLM is
rejected and re-processed, not patched
(total_fabrications > 0 ⇒ verdict
UNACCEPTABLE, task scoring is skipped). File-name variants
that denote the same resource (JCL DDNAME, CICS dataset name,
WS literal, FD name) are all treated as grounded — the gate does not
trip on a legitimate alias. Full definition: FABRICATION-DETECTION.html.
This is why the corpus result is reported as two distinct facts — a quality score and zero fabrications — never folded into one.
A required element that genuinely does not apply to a program (e.g. a
JCL trigger for a called subprogram) is marked NOT_APPLICABLE
and is not penalized. A source-true statement of an
absence — "no in-program trigger; invoked by an external scheduler
not in the corpus" — counts as VERIFIED, not a gap.
ABSENT is reserved for a required fact the PLM simply
failed to provide. The rubric therefore rewards a PLM that says
"this cannot be determined from source" over one that
confidently asserts an unverifiable fact.
| Band | Meaning |
|---|---|
| 95–100 | Production-trustworthy: a maintenance programmer can rely on the PLM without cross-referencing source for basic comprehension. This is the production bar. |
| 85–94 | Strong; minor gaps or under-qualified inferences. |
| 70–84 | Useful but requires source cross-reference on key claims. |
| < 70 | Not fit for unsupervised maintenance use. |
The production bar is aggregate ≥ 95 with no
individual task scoring below 90 on the score of record (the
median of the three grading rolls, METHODOLOGY.html §4.3;
every sub-90 roll individually triaged). The 95–100 top band matches
this internal bar. The benchmark is not published until every
program either clears the no-task-below-90 floor or carries an
individually-audited, recorded grading-artifact exception — a
documented grader error on a correct document, never a document defect —
so the published claim matches the audit trail rather than resting on an
unqualified "universally." Judge consistency (not inter-rater
human agreement) is the relevant control here — handled by the
multi-roll median in METHODOLOGY.html §4.3.
The rubric intentionally does not award points for
confidently stating things that cannot be mechanically verified from
source — e.g. who consumes a report or when a batch job is
scheduled in production. A PLM that qualifies such statements as
inferences scores higher than one that asserts them as fact. This —
together with the multiplicative coverage × quality per
task — is what keeps scores honest.
The "rare" is a statement about the corpus aggregate, not individual programs. Many individual programs legitimately earn a median of 100 — a program with no non-derivable operational context to qualify (a self-contained subprogram, a program whose every claim resolves to source) can and does score a clean 100 across all three rolls. What is rare is the whole-corpus average sitting at 100: across programs of every archetype, some carry inherently non-derivable context (report consumers, production schedules) that a correct PLM must hedge rather than assert, which pulls the aggregate to ~98–99. So a per-program 100 is expected and correct; a corpus-wide 100 would be the red flag. In regulated environments, appropriate epistemic humility is part of correctness, not a deduction from it.