Skip to content

pv lint --gate shapes: the GLOBAL NoFocus decline prints no report — by_shape/declines exist only on the per-shape path (#3610 follow-up) #4100

Closed as not planned

Description

@noahgift

The problem

pv lint <dir> --gate shapes --format json refuses in two ways, and only one of them prints its evidence:

corpus path exit stdout
one armed shape at zero focus, beside a shape that graded something (shapes-one-empty) per-shape vacuity (#3610) 2 full JSON: verdict, by_shape, declines
every shape at zero focus (a lone zero-focus contract, or a directory whose shapes are ALL vacuous) global decline() → ShapesOutcome::NoFocus 2 empty; stderr is only decline: NoFocus

Measured with pv built from #3622's head f663d39e4, on a directory holding only ontology.yaml and empty-shape.yaml from tests/fixtures/ont/shapes-one-empty/:

exit=2   stderr: decline: NoFocus   stdout: 0 bytes

PMAT-3610 says all three answers must emit a parseable report with by_shape, and the file's own comment names the consumer: infra's SLK gate parses stdout whatever the exit code. On the second path that consumer gets nothing, so it scores the run UNMEASURED and can't name the shape.

The test that claimed to cover this did not

At #3622's head, the "lone-contract venue" tests used json-missing-ref. That fixture exits 3 (entity.ref … cannot be read, i.e. ExtractFailed) before decline() runs, and ont_extract_json.rs:128 asserts exactly that. So assert_ne!(code, 0) and extra().is_null() held for the wrong reason. #3622 replaces the fixture with a real all-vacuous corpus and records the asymmetry against this issue.

Done when

  • The global NoFocus decline prints the same JSON document the per-shape path does: verdict: Unknown(NoFocus), by_shape with every <shape>=0, and declines naming each shape.
  • The recorded-asymmetry test in shapes_vacuity.rs fails, as its message says it will, and is replaced by an assertion of the report.

Found by the #3622 re-review: all three lanes cited the fixture, and two cited the missing report. The exit-3 behaviour was re-measured by hand.

Not verified, recorded for whoever takes this: one lane says plain-text pv lint renders an armed vacuity as a green ✓ with no shape named. I could not reproduce that on the fixture, because validation fails first.

Activity

  1. added this to the 0.72.0 milestone on Sep 24, 2026
  2. noahgift commented on Sep 24, 2026

    @noahgift
    MemberAuthor

    triage 2026-09-24 (aprender-dd, issues owner; proposal #4159, approved by the cop aprender-cf): milestoned to 0.72.0 — unmilestoned tooling → carry to 0.72.0 (lightest of 0.71–0.74; its debt-ratchet slice). It was (no milestone).

  3. added
    kind:codeWork is a code change (derived rule, #4159)
    on Sep 24, 2026
  4. modified the milestones: 0.72.0, backlog on Sep 24, 2026
  5. noahgift commented on Sep 24, 2026

    @noahgift
    MemberAuthor

    triage 2026-09-24 (aprender-dd; #4159, cop ruling): moved 0.72.0 → backlog. It has no release theme or epic, and operator rule 2026-09-24: "tickets go without an epic" to backlog, "no stray tickets allowed". It had been load-balanced into 0.72.0 as tooling carry earlier today.

  6. added
    P2Medium priority
    and removed
    P0Critical priority
    on Oct 14, 2026
  7. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    P0 to P2 (2026-10-14 P0 triage): P0 now means it blocks the next release or carries the operator's own words on it; this issue does neither, and its milestone is backlog.

  8. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    Folded into #5308 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it. Pushed branch: 76/4100-nofocus-report, PMAT-4100-pv-lint-nofocus-report.

    Agent: aprender-clerk

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

    P2Medium prioritykind:codeWork is a code change (derived rule, #4159)owner:aprender-a7owner sessionsize:MK̂ 3-4 h

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions