You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(prerequisites): let a version detect declare a maximum, so bounded interpreters can be checked #6017
prerequisites.jsondetect.version accepts only min, so a plugin whose runtime supports a bounded range cannot declare it. explainer-video supports Python 3.12 and 3.13 only (scripts/pydeps.py PYTHONS), but the shared checker accepts any interpreter at or above 3.12, so on a host whose only python3 is 3.14 it reports Python ready while the install hook cannot run.
Fix
Add an optional max to lib/prerequisites.mjs validation and check (inclusive or exclusive to be decided), regenerate every copy through scripts/sync-shared-copies.sh, bump each carrying plugin, then declare the bound in plugins/explainer-video/prerequisites.json.
Verification
node scripts/check-declared-prerequisites.mjs and scripts/sync-shared-copies.sh --check-bump origin/main pass.
A Python 3.14-only host reports explainer-video's python row as outdated.
Routing: human-gated, work class C4 (structural). This extends the shared prerequisites schema contract and fans out to every plugin carrying a copy of the checker (65 tracked copies of prerequisites.mjs today), each needing a version bump. Contract changes with cross-cutting blast radius are C4, so a human approves the plan before an agent runs it.
Open decision: is the upper bound inclusive or exclusive? RECOMMENDED: exclusive (the version must be below the bound), so explainer-video declares 3.14 and every 3.13.x passes.
Basis: verified, lib/prerequisites.mjs:238-246 (compareVersions pads missing parts with 0), so an inclusive bound of 3.13 would mark 3.13.1 outdated; an inclusive bound only works if every declarer writes a full patch-level ceiling. Today's validation accepts only args, pattern, min (lib/prerequisites.mjs:112-118, docs/conventions/prerequisites/prerequisites.schema.json:75-83), and detectEntry checks only the floor (lib/prerequisites.mjs:356-362). explainer-video declares min: 3.12 while its installer supports only 3.12 and 3.13 (plugins/explainer-video/scripts/pydeps.py:30), so the bug in the summary is confirmed. Consider naming the key for its semantics (for example below) so nobody reads max as inclusive.
Agent Brief
Type: Feature Summary: Let a version detect in prerequisites.json declare an optional exclusive upper bound, and declare explainer-video's Python bound with it.
Current behavior: detect.version accepts args, pattern and a required min. The shared checker's detectEntry reports outdated only below min, so a host whose only Python is 3.14 reports explainer-video's Python as present although its install hook cannot run there.
Desired behavior:
detect.version accepts one optional upper-bound key (exclusive unless the decision above says otherwise), same dotted-number format as min, validated by the checker and the JSON schema.
A detected version at or above the bound reports a non-present status with a detail naming the supported range; a version inside the range reports present as today.
Entries without the key behave exactly as today.
explainer-video declares the bound so a 3.14-only host reports its Python row as not ready.
Key interfaces:
detect.version config shape: new optional bound key.
detectEntry() status for runtime/cli kinds: gains the above-bound case (reuse outdated or add a distinct status; state the choice in the PR).
The prerequisites convention doc and schema: document the key.
Acceptance criteria:
The repo's declared-prerequisites CI check passes.
The shared-copies sync check (with its bump check against origin/main) passes, with every carrying plugin regenerated and bumped.
Unit tests cover below min, inside the range, exactly at the bound, and above the bound.
A Python 3.14-only host reports explainer-video's Python row as not ready.
Out of scope:
Changing how candidates in detect.any are chosen (first found on PATH still wins).
Decision recorded. The owner approved applying independently verified recommendations (high-risk set, reviewed) on 2026-10-13.
Is the upper bound inclusive or exclusive, and what is the key called? → exclusive, key named below
Basis: lib/prerequisites.mjs:113,240,364; plugins/explainer-video/prerequisites.json:19-22
detect.version accepts only min, so explainer-video reports Python 3.14 as ready though it supports only 3.12 and 3.13. No max/below support on main.
This issue is split into 2 pieces, each sized for one lane PR. The exclusive-bound decision is recorded (key below, Decision recorded comment 2026-10-13) and #7183 merged 2026-10-13, so the sequencing hold is gone. The canonical checker change still fans out to 75 tracked prerequisites.mjs copies through sync-shared-copies, so it stays one attended run. Only the explainer-video declaration is lane work.
not filed: feat(prerequisites): accept an exclusive below bound on detect.version: allowlist: sync-shared-copies (canonical lib/prerequisites.mjs has 75 registered copies, each needing a bump or fragment)
not filed: fix(explainer-video): declare the Python 3.14 ceiling in prerequisites: depends on a child that is not filed
Filed pieces are sub-issues of this one, and the paced queue admits them to the lane. Unfiled pieces wait on the blocker shown. The owner approved this split in an attended backlog-shaping session on 2026-10-18.
Split into lane-ready sub-issues (owner decisions Q93-Q95, C12, 2026-10-24). The bound is the owner's 2026-10-13 decision: exclusive, key below. Neither part is on main yet.
Proposed work class: work-class: structural
Basis: automated intake triage; the lanes App applied this class.
Size: Large
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: #9684, #9685
Understood: add an optional upper bound to detect.version in the shared prerequisites checker so explainer-video can reject Python 3.14. A comment records the owner's decision (exclusive bound, key below) and splits the work into #9684 (checker change, synced copies, plugin bumps) and #9685 (explainer-video declares below: "3.14"). This issue now tracks those two. Nothing further is missing here.
Refinement. A read-only run explored this repository, searched its issues and pull requests, and read the allowed docs to draft what follows. On an issue a listed human filed, it counts as the issue's spec once posted, while unedited; it is still model text, so check it.
Intended outcome: This issue becomes a tracker: #9684 adds an exclusive below bound to detect.version, and #9685 declares below: "3.14" for explainer-video.
Should this issue stay open as a tracker only, with no lane work of its own, until #9684 and #9685 close?
RECOMMENDED: Yes: keep it as a tracker and close it once both children are merged, so no lane run duplicates their work. Basis: The 2026-10-24 comment moves all the work into #9684 and #9685. lib/prerequisites.mjs:116 still lists only args, pattern and min, so nothing is on main yet.
Sources read
context.json: the 2026-10-13 Decision recorded comment settles an exclusive bound with the key below.
context.json: the 2026-10-24 comment splits the work into #9684 and #9685, neither on main yet.
.base/lib/prerequisites.mjs:116: version keys are validated against args, pattern and min only.
.base/lib/prerequisites.mjs:409: the checker reports outdated only below min, with no upper-bound check.
Automated refinement by the lanes App. Answer with a comment whose first line is **Decision recorded.**.
Activity
kyle-sexton commentedon Oct 4, 2026
This was generated by AI during triage.
Routing: human-gated, work class C4 (structural). This extends the shared prerequisites schema contract and fans out to every plugin carrying a copy of the checker (65 tracked copies of
prerequisites.mjstoday), each needing a version bump. Contract changes with cross-cutting blast radius are C4, so a human approves the plan before an agent runs it.Open decision: is the upper bound inclusive or exclusive? RECOMMENDED: exclusive (the version must be below the bound), so explainer-video declares
3.14and every 3.13.x passes.Basis: verified, lib/prerequisites.mjs:238-246 (
compareVersionspads missing parts with 0), so an inclusive bound of3.13would mark 3.13.1 outdated; an inclusive bound only works if every declarer writes a full patch-level ceiling. Today's validation accepts onlyargs,pattern,min(lib/prerequisites.mjs:112-118, docs/conventions/prerequisites/prerequisites.schema.json:75-83), anddetectEntrychecks only the floor (lib/prerequisites.mjs:356-362). explainer-video declaresmin: 3.12while its installer supports only 3.12 and 3.13 (plugins/explainer-video/scripts/pydeps.py:30), so the bug in the summary is confirmed. Consider naming the key for its semantics (for examplebelow) so nobody readsmaxas inclusive.Agent Brief
Type: Feature
Summary: Let a version detect in
prerequisites.jsondeclare an optional exclusive upper bound, and declare explainer-video's Python bound with it.Current behavior:
detect.versionacceptsargs,patternand a requiredmin. The shared checker'sdetectEntryreportsoutdatedonly belowmin, so a host whose only Python is 3.14 reports explainer-video's Python as present although its install hook cannot run there.Desired behavior:
detect.versionaccepts one optional upper-bound key (exclusive unless the decision above says otherwise), same dotted-number format asmin, validated by the checker and the JSON schema.presentas today.Key interfaces:
detect.versionconfig shape: new optional bound key.detectEntry()status for runtime/cli kinds: gains the above-bound case (reuseoutdatedor add a distinct status; state the choice in the PR).Acceptance criteria:
origin/main) passes, with every carrying plugin regenerated and bumped.min, inside the range, exactly at the bound, and above the bound.Out of scope:
detect.anyare chosen (first found on PATH still wins).kyle-sexton commentedon Oct 13, 2026
Decision recorded. The owner approved applying independently verified recommendations (high-risk set, reviewed) on 2026-10-13.
Basis: lib/prerequisites.mjs:113,240,364; plugins/explainer-video/prerequisites.json:19-22
detect.version accepts only min, so explainer-video reports Python 3.14 as ready though it supports only 3.12 and 3.13. No max/below support on main.
Verification notes:
Verified by an independent fresh-context check (confirmed, risk high): gh issue view 6017 (OPEN, triage comment recommends exclusive); origin/main lib/prerequisites.mjs:108-116 (keys args, pattern, min), :238-248 (compareVersions pads with 0), :360-368; origin/main plugins/explainer-video/prerequisites.json python entry (min 3.12; degrade says 3.14 unsupported); git grep below/max in lib/prerequisites.mjs and schema: none; 74 tracked prerequisites.mjs copies; gh pr view 7183 OPEN draft
Admission to an agent lane stays with the work-class rules and owner ratification.
kyle-sexton commentedon Oct 18, 2026
This was generated by AI during backlog shaping.
This issue is split into 2 pieces, each sized for one lane PR. The exclusive-bound decision is recorded (key
below, Decision recorded comment 2026-10-13) and #7183 merged 2026-10-13, so the sequencing hold is gone. The canonical checker change still fans out to 75 tracked prerequisites.mjs copies through sync-shared-copies, so it stays one attended run. Only the explainer-video declaration is lane work.Filed pieces are sub-issues of this one, and the paced queue admits them to the lane. Unfiled pieces wait on the blocker shown. The owner approved this split in an attended backlog-shaping session on 2026-10-18.
kyle-sexton commentedon Oct 24, 2026
Split into lane-ready sub-issues (owner decisions Q93-Q95, C12, 2026-10-24). The bound is the owner's 2026-10-13 decision: exclusive, key
below. Neither part is on main yet.belowbound ondetect.version, regenerate every copy, bump carriers. Runs first.below: "3.14". Blocked by feat(prerequisites): accept an exclusive below bound on detect.version #9684.This was generated by AI.
github-actions commentedon Oct 25, 2026
The triage sweep dispatched intake triage for this issue (attempt 1 of 2).
github-actions commentedon Oct 25, 2026
Proposed work class: work-class: structural
Basis: automated intake triage; the lanes App applied this class.
Size: Large
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: #9684, #9685
Understood: add an optional upper bound to
detect.versionin the shared prerequisites checker so explainer-video can reject Python 3.14. A comment records the owner's decision (exclusive bound, keybelow) and splits the work into #9684 (checker change, synced copies, plugin bumps) and #9685 (explainer-video declaresbelow: "3.14"). This issue now tracks those two. Nothing further is missing here.Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Oct 25, 2026
Not admitted to the issue lane yet: Size large: the split into sub-issues at intake is pending (owner Q93).
melodic-automation-lanes commentedon Oct 25, 2026
Refinement. A read-only run explored this repository, searched its issues and pull requests, and read the allowed docs to draft what follows. On an issue a listed human filed, it counts as the issue's spec once posted, while unedited; it is still model text, so check it.
Intended outcome: This issue becomes a tracker: #9684 adds an exclusive
belowbound to detect.version, and #9685 declaresbelow: "3.14"for explainer-video.Dependencies
Related work
Open questions
RECOMMENDED: Yes: keep it as a tracker and close it once both children are merged, so no lane run duplicates their work. Basis: The 2026-10-24 comment moves all the work into #9684 and #9685. lib/prerequisites.mjs:116 still lists only args, pattern and min, so nothing is on main yet.
Sources read
below.Automated refinement by the lanes App. Answer with a comment whose first line is
**Decision recorded.**.