Source profileQuality 87/100Review permissions

xiaolai/nlpm/skills/nlpm/scoring/SKILL.md

scoring

Use when scoring NL artifact quality, applying penalties, or calibrating lint judgment — contains the 100-point rubric with penalty tables per artifact type. Four worked calibration examples (Excellent Agent / Rewrite Agent / Excellent Rule / Weak Rule) live in `references/calibration-examples.md`, loaded on demand when anchoring borderline cases.

Source repository stars
104
Declared platforms
2
Static risk flags
2
Last source update
2026-08-04
Source checked
2026-08-04

Decision brief

What it does—and where it fits

100-point quality scale for all NL programming artifacts. Apply penalties deterministically. Use calibration examples to anchor judgment on borderline cases.

Best for

  • Use when scoring NL artifact quality, applying penalties, or calibrating lint judgment — contains the 100-point rubric with penalty tables per artifact type.

Not for

  • Tasks that require unconfirmed production actions or broad system permissions.
  • Environments where the pinned source and install steps cannot be inspected.

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexDeclaredSource recordInstall path and trigger
Claude CodeDeclaredSource recordInstall path and trigger
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/xiaolai/nlpm --skill "skills/nlpm/scoring"
Safe inspection promptEditorial

Inspect the Agent Skill "scoring" from https://github.com/xiaolai/nlpm/blob/660db42b2f2351b5f21e2022ce8785e66218a724/skills/nlpm/scoring/SKILL.md at commit 660db42b2f2351b5f21e2022ce8785e66218a724. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    Agent Workflow Programs (project-root program.md-style files)

    A new artifact type recognized 2026-05-28 (see nlpm:conventions §2 and auditor/exemplars/karpathy-autoresearch.md): a project-root Markdown file driving an autonomous agent loop, hybrid between a memory file (AGENTS.md-shaped context) and a slash command (numbered workflow with…

    Command rules R14–R17: numbered steps for multi-phase work, empty-input handling, output format, error paths.Memory file rules R33–R39: build/run commands, architecture overview, no stale refs, instructive-not-descriptive.Universal R01 (vague quantifiers) and R03 (positive framing).
  2. 02

    Scoring Formula

    Penalties stack. The floor is 0; the ceiling is 100. No bonuses — the default assumption is that an artifact is well-formed, and quality is measured by what is missing or wrong.

    Penalties stack. The floor is 0; the ceiling is 100. No bonuses — the default assumption is that an artifact is well-formed, and quality is measured by what is missing or wrong.
  3. 03

    Penalty Tables

    Scope-note discipline: R07 means "scope note when related skills exist." Do NOT apply R07 to missing example blocks — that is the new R06 row above (penalty -10, not -15). The 2026-05-13 lijigang/ljg-skills audit applied R07 + −15 fourteen times for missing example blocks; both…

    Command rules R14–R17: numbered steps for multi-phase work, empty-input handling, output format, error paths.Memory file rules R33–R39: build/run commands, architecture overview, no stale refs, instructive-not-descriptive.Universal R01 (vague quantifiers) and R03 (positive framing).
  4. 04

    Skills

    Scope-note discipline: R07 means "scope note when related skills exist." Do NOT apply R07 to missing example blocks — that is the new R06 row above (penalty -10, not -15). The 2026-05-13 lijigang/ljg-skills audit applied R07 + −15 fourteen times for missing example blocks; both…

    Scope-note discipline: R07 means "scope note when related skills exist." Do NOT apply R07 to missing example blocks — that is the new R06 row above (penalty -10, not -15). The 2026-05-13 lijigang/ljg-skills audit applie…-block counting discipline (added 2026-08-01, origin: xiaolai/cc-suite v1.3.1 remediation): an block counts only when it sits outside fenced code blocks — in the body or in a frontmatter description block scalar. Tags i…name matches parent directory (added 2026-05-25, audit: google/skills): the open Agent Skills spec at agentskills.io makes this a MUST. Mismatch is deterministic, high-confidence, and reproducible by single-line diff (f…
  5. 05

    Agents

    Review the “Agents” section in the pinned source before continuing.

    Review and apply the “Agents” source section.

Permission review

Static risk signals and limitations

Runs scripts

medium · line 300

The documentation asks the agent to run terminal commands or scripts.

| R33 | Build/run command | No instructions for how to build or run the project | -10 |

Reads files

low · line 421

The documentation asks the agent to read local files, directories, or repositories.

Four worked examples — *Excellent Agent (95)*, *Rewrite Agent (41)*, *Excellent Rule (92)*, *Weak Rule (40)* — live in [`references/calibration-examples.md`](references/calibration-examples.md). Load that file on demand when scoring a borde

Runs scripts

medium · line 432

The documentation asks the agent to run terminal commands or scripts.

How to run the score command → see `commands/score.md`

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score87/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars104SourceRepository attention, not individual Skill quality
Compatibility2 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
xiaolai/nlpm
Skill path
skills/nlpm/scoring/SKILL.md
Commit
660db42b2f2351b5f21e2022ce8785e66218a724
License
ISC
Collected
2026-08-04
Default branch
main
View the original SKILL.md

NLPM Quality Scoring Rubric

100-point quality scale for all NL programming artifacts. Apply penalties deterministically. Use calibration examples to anchor judgment on borderline cases.


Scoring Formula

base_score = 100
adjustments = sum of all applicable penalties (all penalties are negative)
final_score = max(0, min(100, base_score + adjustments))

Penalties stack. The floor is 0; the ceiling is 100. No bonuses — the default assumption is that an artifact is well-formed, and quality is measured by what is missing or wrong.


Penalty Tables

Skills

RuleCheckConditionPenalty
--name presentMissing-25
--name matches parent directoryFrontmatter name: value does not equal parent directory name (per nlpm:conventions §5 — open spec MUST)-15
R04description presentMissing-25
R04Trigger qualityDescription is generic (≤1 specific phrase)-15
R04Description lengthDescription 500–800 chars-5
R04Description lengthDescription >800 chars-10
R05Body length400–500 lines-5
R05Body length>500 lines-10
R06Code examplesComplex concepts with no examples-5
R06Code examplesNo examples at all in a technical skill-10
R06<example> blocksZero <example> blocks on a user_invocable: true skill-10
R07Scope noteNo scope note / cross-references-3

Scope-note discipline: R07 means "scope note when related skills exist." Do NOT apply R07 to missing example blocks — that is the new R06 row above (penalty -10, not -15). The 2026-05-13 lijigang/ljg-skills audit applied R07 + −15 fourteen times for missing example blocks; both labels were wrong (R07 is not example-related, and -15 is the agents penalty, not the skills penalty). The validator at auditor/scripts/validate-rule-ids.py catches this kind of drift in CI.

<example>-block counting discipline (added 2026-08-01, origin: xiaolai/cc-suite v1.3.1 remediation): an <example> block counts only when it sits outside fenced code blocks — in the body or in a frontmatter description block scalar. Tags inside a fenced template (```markdown … ```) are illustrative content, and prose that names the string `<example>` is a mention, not a block. A 2026-07-31 scoring pass credited a skill with example blocks that existed only inside a fenced template, hiding a real R06 violation across 13 files. Verify by reading the file, not by grepping for the tag.

name matches parent directory (added 2026-05-25, audit: google/skills): the open Agent Skills spec at agentskills.io makes this a MUST. Mismatch is deterministic, high-confidence, and reproducible by single-line diff (frontmatter name: vs basename($(dirname FILE))). Mark such findings confidence: high per the manifest-vs-disk-diff principle in agents/scorer.md step 6. Note: this penalty did not exist before 2026-05-25 — re-scoring past audits will yield slightly lower scores for any corpus containing this defect, but no contribute outcomes are retroactively affected since no PRs were ever opened against a name-mismatch finding under the prior rubric.


Agents

RuleCheckConditionPenalty
R09description presentMissing-25
R09<example> blocksExactly 1 example-5
R09<example> blocksZero examples-15
R10model declaredNot declared-5
R10model appropriateWrong tier for task (e.g. opus for parsing)-5
R11tools declaredNot declared-5
R11Unused toolsEach tool declared but not used in body-3 each
R12Output formatNo output format spec in body-10
R11Write on read-onlyAudit/review/scan agent declares Write or Edit-10

Commands

RuleCheckConditionPenalty
--description presentMissing-25
R18argument-hint presentCommand takes input but no hint-5
R14Steps numberedMulti-step body with no numbered steps-10
R15Empty input handlingNo handling for empty/missing input-10
R16Output formatNo output format defined-10
R17Error pathsNo error handling for missing files or bad data-5

Shared Partials

RuleCheckConditionPenalty
R19user-invocable: falseMissing or set to true-25
R20Purpose clearDescription doesn't state it's a partial-10

Rules

RuleCheckConditionPenalty
R21description presentMissing frontmatter description-10
R21Format: bold imperativeNo bold imperative opening-5
R21Format: rationaleNo rationale following the imperative-10
R22EnforceabilityRule is not specific/testable-10
R23BudgetRule file over 500 lines-15
R26Conflicts with other rulesDirect contradiction with another rule in same set-20
R24Duplicates toolingRe-states what eslint/ruff/clippy already catches-10

Hooks — universal checks (apply to all tools)

RuleCheckConditionPenalty
--Valid syntaxHook config file fails to parse (JSON or TOML per tool)-25
R29Scripts existReferenced script file does not exist-20
--Command safetyHook command contains dangerous patterns (rm -rf, git push --force, DROP TABLE)-15
--Matcher regex validMatcher pattern doesn't compile as valid regex-10
--Timeout reasonableHook specifies timeout > 30s (likely hangs)-5

Hooks (Claude Code — Tier 2-Claude only)

Authoritative event list: nlpm:conventions-claude §7. Per the multi-tool design (analysis/multi-tool-design-2026-05.md decision #4), Claude / Codex / Antigravity hook event vocabularies are NOT 1:1 mappable — three separate tables, no translation.

RuleCheckConditionPenalty
R27Event names valid (Claude)Uses unrecognized event name — confirmed Claude events: SessionStart, SessionEnd, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest, Stop, StopFailure, FileChanged-15
R27Case correct (Claude)Event name has wrong case (e.g. pretooluse)-10
--Hook type valid (Claude)Uses unrecognized type value — confirmed Claude types: command, http, mcp_tool, prompt, agent-10
--MCP matcher format (Claude)Matcher targets MCP tool but doesn't use mcp__<server>__<tool> pattern-5

Hooks (Codex CLI — Tier 2-Codex only)

Authoritative event list: nlpm:conventions-codex §6.

RuleCheckConditionPenalty
R27Event names valid (Codex)Uses unrecognized event name — confirmed Codex events: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest, PreCompact, PostCompact, SubagentStart, SubagentStop, Stop-15
R27Case correct (Codex)Event name has wrong case-10
--Hooks config key (Codex)config.toml uses deprecated [features].codex_hooks instead of [features].hooks (renamed ~CLI 0.129+)-5 (advisory)

Hooks (Antigravity / Gemini lineage — Tier 2-Antigravity only) — ADVISORY

Authoritative event list: nlpm:conventions-antigravity §5. All Antigravity-specific hook scoring is advisory-only (confidence:low) until the Antigravity 2.0 spec stabilizes — see analysis/multi-tool-design-2026-05.md decision #3.

RuleCheckConditionPenalty
R27Event names valid (Gemini lineage)Uses unrecognized event name — confirmed events: SessionStart, BeforeAgent, BeforeModel, BeforeToolSelection, BeforeTool, AfterTool, AfterModel, AfterAgent, SessionEnd, Notification, PreCompress-10 (advisory)
R27Case correct (Gemini lineage)Event name has wrong case-5 (advisory)

plugin.json (Claude Code — .claude-plugin/plugin.json)

CheckConditionPenalty
name presentMissing-25
version is semverPresent but not valid semver-10
description presentMissing-5

.codex-plugin/plugin.json (Codex CLI — Tier 2-Codex only)

Schema reference: nlpm:conventions-codex §3.

CheckConditionPenalty
Valid JSONFile fails JSON parse-25
name presentMissing-25
name kebab-caseMixed case or underscores-10
version is semverPresent but not valid semver-10
description presentMissing-5
Artifact paths relativeskills/mcpServers/apps/hooks paths absolute or missing ./ prefix-5 each

.agents/plugins/marketplace.json (Codex marketplace — Tier 2-Codex)

Schema reference: nlpm:conventions-codex §4. Schema is largely compatible with Claude's .claude-plugin/marketplace.json.

CheckConditionPenalty
Valid JSONFile fails JSON parse-25
name presentMissing-25
plugins array presentMissing or empty-10
Per-plugin source validsource.source not in github/git/local, or required repo/path missing-10 each
Per-plugin category presentMissing (informational, helps marketplace navigation)-3 each

agents/openai.yaml (Codex skill sidecar — Tier 2-Codex)

Schema reference: nlpm:conventions-codex §2.

CheckConditionPenalty
Valid YAMLFile fails YAML parse-25
Sidecar is colocatedagents/openai.yaml not in same directory as a SKILL.md-10
interface.display_name presentMissing-5 (informational)

gemini-extension.json (Gemini/Antigravity — Tier 2-Antigravity) — ADVISORY

Schema reference: nlpm:conventions-antigravity §3. All Antigravity-specific manifest scoring is advisory-only until the post-2026-06-18 Antigravity spec stabilizes.

CheckConditionPenalty
Valid JSONFile fails JSON parse-25
name presentMissing-25
version presentMissing-10
contextFileName includes AGENTS.mdSingle-tool projects use only GEMINI.md; multi-tool should include AGENTS.md-3 (advisory; multi-tool nudge)

.gemini/commands/*.toml (Gemini slash commands — legacy/transitional, Tier 2-Antigravity)

Schema reference: nlpm:conventions-antigravity §4.

CheckConditionPenalty
Valid TOMLFile fails TOML parse-25
prompt field presentMissing required field-25
description field presentMissing (auto-generated from filename, but explicit is better)-3

.mcp.json (Claude Code — .mcp.json at repo root)

CheckConditionPenalty
Valid JSONFile fails JSON parse-25
Server command presentMCP server entry missing command field-15

.codex/config.toml (Codex configuration — Tier 2-Codex)

Schema reference: nlpm:conventions-codex §5.

CheckConditionPenalty
Valid TOMLFile fails TOML parse-25
Deprecated [features].codex_hooksShould be [features].hooks (renamed ~CLI 0.129)-5 (advisory)
Per-MCP command present[mcp_servers.<id>] table missing command field-15 each

.lsp.json (Claude Code LSP — Tier 2-Claude)

Schema details: nlpm:conventions-claude §12. Stable in 2026.

CheckConditionPenalty
Valid JSONFile fails JSON parse-25

monitors/monitors.json (Claude Code monitors — Tier 2-Claude)

Schema details: nlpm:conventions-claude §13. Stable in 2026.

CheckConditionPenalty
Valid JSONFile fails JSON parse-25

Settings Files (.claude/settings.json, .claude/settings.local.json)

CheckConditionPenalty
Valid JSONFile fails JSON parse-25
No hardcoded secretsContains API keys, tokens, or passwords-25
Permission mode sanitybypassPermissions enabled in a shared project settings file (not .local)-15
Recognized keysContains unknown top-level keys not in Claude Code schema-5 each, cap -15
Hook definitions validhooks key present — check event names valid and case-correct-10 per invalid

CLAUDE.md

RuleCheckConditionPenalty
R49File existsNo CLAUDE.md in plugin root-10
--Under 200 linesCLAUDE.md exceeds 200 lines-5
R38Actionable contentCLAUDE.md has no actionable guidance (just filler)-10
R33Build/run commandNo instructions for how to build or run the project-10
R34Test commandNo instructions for how to run tests-5
R35Architecture overviewNo structure/component description (what lives where)-5
R36Valid @ importsContains @ import syntax referencing a file that doesn't exist-10
R37No stale file referencesMentions files or functions that no longer exist in the repo-10
R38Actionability ratio>60% of content is description rather than instructions-5
--Prerequisites sectionNo section covering required tools, versions, or setup steps-5
R39No rule conflictsCLAUDE.md says X while a .claude/rules/ file says not-X-15

Memory Files

Applies to .md files located in ~/.claude/projects/*/memory/ directories.

RuleCheckPass (+0)Penalty
--Has YAML frontmatterPresent-15
--name in frontmatterPresent-10
--description in frontmatterPresent-10
--type in frontmatterPresent (user/feedback/project/reference)-5
--Content matches declared typeYes-10
--Referenced in MEMORY.md indexYes-5 (orphaned memory)
R37Stale contentNo references to removed files or functions-10

Agent Workflow Programs (project-root program.md-style files)

A new artifact type recognized 2026-05-28 (see nlpm:conventions §2 and auditor/exemplars/karpathy-autoresearch.md): a project-root Markdown file driving an autonomous agent loop, hybrid between a memory file (AGENTS.md-shaped context) and a slash command (numbered workflow with output format + error paths).

No type-specific penalty rows. This artifact type is scored as the UNION of:

  • Command rules R14–R17: numbered steps for multi-phase work, empty-input handling, output format, error paths.
  • Memory file rules R33–R39: build/run commands, architecture overview, no stale refs, instructive-not-descriptive.
  • Universal R01 (vague quantifiers) and R03 (positive framing).

Type-specific penalty rows are deferred until N ≥ 3 examples surface — the existing rules cover the artifact adequately as a hybrid, and inventing rows from N = 1 risks over-fitting (calibrated per the same discipline applied to multi-tool discovery deferrals).

Patterns this artifact type rewards (loaded on demand from nlpm:patterns):

  • P10 (numeric anchoring of subjective principles)
  • P11 (paired CAN/CANNOT contract)
  • P12 (autonomy instruction + rationale + fallback ladder)
  • P13 (vivid closing use-case)

All Artifact Types: Vague Quantifiers

RuleCheckConditionPenalty
R01Vague quantifierEach occurrence of: "appropriate", "relevant", "as needed", "sufficient", "adequate", "reasonable", "properly", "correctly", "some", "several", "various" without measurable criteria-2 each
R01Vague quantifier capTotal vague quantifier penaltymax -20

Mention-versus-use exclusion (added 2026-08-01, origin: xiaolai/cc-suite audit-family false positives; design reviewed via Codex consultation): do not count a vague term when it is presented as a literal token AND the containing clause explicitly instructs the reader or a tool to detect, flag, reject, replace, avoid, or report that term — audit tooling must be able to name the words it hunts (e.g. Flag uses of `some`, `several`, `various` without concrete criteria is R01's own job description, not a violation). Backtick or quotation formatting alone does NOT qualify: a term that still modifies an action, criterion, or requirement is counted even when backticked — handle errors `properly` remains a violation.


All Artifact Types: Vocabulary Drift (R51 — opt-in, disabled by default)

Applied only when R51: { enabled: true, vocabulary_skill: <path> } appears in .claude/nlpm.local.md. Without the opt-in, R51 contributes zero penalty regardless of artifact content. The configured vocabulary_skill must contain a registry.yaml listing canonical and deprecated terms; without it, R51 emits an advisory and contributes zero penalty.

RuleCheckConditionPenalty
R51Deprecated synonymEach occurrence of a term marked deprecated: in the project's registry.yaml, in the scope the artifact belongs to-2 each
R51Drift capTotal R51 penaltymax -10 per file
R51Missing registryenabled: true but vocabulary_skill: not set or points to a directory with no registry.yaml0 (advisory only)

Why opt-in: vocabulary discipline is high-leverage for projects with accumulated drift but premature for projects still discovering their domain. Each project decides when it has enough literary warrant (P6) to lock terms in. See analysis/vocabulary-design-principles.md for the six principles R51 operationalizes.

Registry-declaration exclusion (added 2026-08-01, origin: xiaolai/cc-suite vocabulary-skill self-reference; design reviewed via Codex consultation): the file that declares a deprecation must name the deprecated term to do so. Within the configured vocabulary_skill path, do not count a deprecated term where it occurs in the declaration that registers it or maps it to its replacement — registry.yaml deprecated: lists and the SKILL.md deprecation tables. The exclusion covers ONLY those declaration term fields: deprecated terms in surrounding prose inside the vocabulary_skill path are counted, and the path is not categorically exempt. The same mention-versus-use principle as R01's exclusion above, applied to R51.


Cross-Artifact (--plugin flag)

Applied when linting an entire plugin rather than individual files.

CheckConditionPenalty
Broken partial refsCommand references commands/shared/X.md that doesn't exist-20
Broken skill refsAgent references plugin:skill that isn't installed-20
Missing scriptsHook references script that doesn't exist-20
Orphaned filesAgent/command/skill file not referenced by anything-5 per file
ContradictionsTwo rules/instructions in same plugin directly contradict each other-15 per pair

Score Bands

RangeLabelMeaning
90–100ExcellentProduction-ready; minor or no findings
80–89GoodSolid; one or two non-critical gaps
70–79AdequateMeets threshold; noticeable gaps to address
60–69WeakBelow threshold; significant findings
<60RewriteFundamental problems; recommend rewriting from scratch

Default pass threshold: 70. Configurable in .claude/nlpm.local.md.


Calibration Examples

Four worked examples — Excellent Agent (95), Rewrite Agent (41), Excellent Rule (92), Weak Rule (40) — live in references/calibration-examples.md. Load that file on demand when scoring a borderline case (around band boundaries: 88-92, 68-72, 58-62) and you need an anchored reference.

The examples are not needed for routine scoring — the penalty tables above are self-contained. They were extracted from this file 2026-05-28 to keep the rubric under R05's 500-line body budget while preserving the calibration material verbatim.


Scope Note

This skill covers the NLPM scoring formula, penalty tables, score bands, and calibration examples. It does NOT cover:

  • Artifact schemas and valid field values → see nlpm:conventions (universal) and the tool-specific overlays nlpm:conventions-claude, nlpm:conventions-codex, nlpm:conventions-antigravity (the latter three created in PR-B; see analysis/multi-tool-design-2026-05.md)
  • Patterns and anti-patterns catalog → see nlpm:patterns
  • How to run the score command → see commands/score.md

Multi-tool scoring (PR-B landed 2026-05-25)

nlpm now scores artifacts across three tool ecosystems — Claude Code, Codex CLI, and Antigravity (which absorbs Gemini CLI on 2026-06-18). The tier classification in agents/scorer.md separates open-spec (Tier 1), Tier 1.5 open-spec corpora, and per-tool Tier 2 overlays (2-Claude / 2-Codex / 2-Antigravity).

  • Hooks are scored per tool (Claude / Codex / Antigravity tables above). The three tools' event vocabularies are not 1:1 mappable; no universal translation layer. See analysis/multi-tool-design-2026-05.md decision #4.
  • Codex-specific artifacts scored: .codex-plugin/plugin.json, .agents/plugins/marketplace.json, .codex/config.toml, agents/openai.yaml sidecars.
  • Antigravity-specific artifacts scored (advisory-only until spec stabilizes): gemini-extension.json, .gemini/commands/*.toml, Antigravity hook events.
  • Claude-specific additions in 2026: .lsp.json, monitors/monitors.json (validate JSON-parse only until detailed schemas land). New SKILL.md fields documented in nlpm:conventions-claude.

Known False Positive Patterns

The following findings have historically been reported by the scorer despite having no backing in this rubric. They MUST NOT be penalized:

Invalid findingWhy it is invalid
Missing namespace: on skillNot in the skill schema; conventions §5 does not list it
Missing inline hooks:/skills: registration blocks in plugin.jsonconventions §1 defines these as optional path strings
AskUserQuestion / Task / WebFetch flagged as undocumented toolBuilt-in per conventions §14
Agent missing skills: when omission is documented in CLAUDE.mdIntentional architectural choice
plugin.json missing engines: / minClaudeVersion: / main:All optional per conventions §1
plugin.json description shorter than sibling marketplace.json descriptionDesynchronization ≠ defect; only penalize if required field is absent

When in doubt: if a finding cannot be cited to a specific row in the penalty tables above, drop it.

Alternatives

Compare before choosing