Repository navigation
feat(prerequisites): accept an exclusive below bound on detect.version #9684
Copy link
Copy link
Closed
Copy link
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.Refactors, migrations, contract changes; cross-cutting and hard to reverse.
Description
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 optionalbelow(same dotted-number format asmin), refusebelowat or undermin, and report a detected version at or abovebelowasoutdatedwith a detail naming the supported range (>= <min>, < <below>). Entries withoutbelowbehave as today.docs/conventions/prerequisites/prerequisites.schema.jsonanddocs/conventions/prerequisites/README.md: document the key.lib/prerequisites.test.mjs: cases belowmin, inside the range, exactly atbelow, abovebelow, andbelow <= minrefused.- Regenerate every copy with
scripts/sync-shared-copies.shand 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.jsonprints at least one line in each file. -
node --test lib/prerequisites.test.mjsexits 0, and its output names a test for a version exactly atbelow. -
bash scripts/sync-shared-copies.sh --checkexits 0. -
bash scripts/sync-shared-copies.sh --check-bump origin/mainexits 0. -
node scripts/check-declared-prerequisites.mjsexits 0. -
bash scripts/affected-tests.sh --runexits 0.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.Refactors, migrations, contract changes; cross-cutting and hard to reverse.
Type
Fields
No fields configured for Feature.
Activity
github-actions commentedon Oct 24, 2026
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
belowtodetect.versioninprerequisites.json. It uses the same dotted-number format asmin. It is refused when at or undermin. A detected version at or abovebelowis reported asoutdatedwith 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.
melodic-automation-lanes commentedon Oct 24, 2026
Left out of admission: already agent-ready, so work-unblock removed
admission-deferred.