Skip to content

feat(prerequisites): accept an exclusive below bound on detect.version #9684

Description

@kyle-sexton

Part of #6017

Problem

detect.version in prerequisites.json accepts only args, pattern and min (lib/prerequisites.mjs:116, keysErrors(v, ["args", "pattern", "min"], vw)), so a plugin whose runtime supports a bounded range cannot declare its ceiling.

Scope

The owner decided the bound on 2026-10-13 (#6017 comment): exclusive, key named below.

  • lib/prerequisites.mjs: accept an optional below (same dotted-number format as min), refuse below at or under min, and report a detected version at or above below as outdated with a detail naming the supported range (>= <min>, < <below>). Entries without below behave as today.
  • docs/conventions/prerequisites/prerequisites.schema.json and docs/conventions/prerequisites/README.md: document the key.
  • lib/prerequisites.test.mjs: cases below min, inside the range, exactly at below, above below, and below <= min refused.
  • Regenerate every copy with scripts/sync-shared-copies.sh and give each carrying plugin its bump or changelog fragment.

Out of scope: declaring the bound in any plugin (the explainer-video slice does that), upper bounds for non-version detect kinds.

Done when

  • git grep -n '"below"' lib/prerequisites.mjs docs/conventions/prerequisites/prerequisites.schema.json prints at least one line in each file.
  • node --test lib/prerequisites.test.mjs exits 0, and its output names a test for a version exactly at below.
  • bash scripts/sync-shared-copies.sh --check exits 0.
  • bash scripts/sync-shared-copies.sh --check-bump origin/main exits 0.
  • node scripts/check-declared-prerequisites.mjs exits 0.
  • bash scripts/affected-tests.sh --run exits 0.

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.
    admission-deferredReady for the issue lane; work-unblock admits it when queued work is under the queued cap
    on Oct 24, 2026
  2. github-actions commented on Oct 24, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: structural
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Low
    Uncertainty: Known
    Flags: none

    Understood: add an optional exclusive upper bound below to detect.version in prerequisites.json. It uses the same dotted-number format as min. It is refused when at or under min. A detected version at or above below is reported as outdated with the supported range. The schema, README and tests are updated, and shared copies are regenerated with a bump or changelog fragment for each carrying plugin. The owner already decided the bound's semantics and key name, and the done-when checks are concrete. No duplicates spotted.

    Automated triage, applied by the lanes App.

  3. melodic-automation-lanes commented on Oct 24, 2026

    @melodic-automation-lanes
    Contributor

    Left out of admission: already agent-ready, so work-unblock removed admission-deferred.

  4. removed
    admission-deferredReady for the issue lane; work-unblock admits it when queued work is under the queued cap
    on Oct 24, 2026
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

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions