chore(conventions): add ecosystem-commands contract; record concern-named config seam - #96
Conversation
…amed config seam Versioned cross-plugin contract for consumer-declared per-ecosystem build/test/lint command surfaces (.claude/ecosystems/<eco>.yaml): schema, resolution ladder application, canonical-verb vs context-binding boundary, task-runner deferral with revisit triggers. Playbook seam 2 gains the concern-named folder rule for multi-plugin-consumed config. Co-Authored-By: Claude <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_8813cd49-be75-48bb-9835-202165202822) |
|
Claude finished @kyle-sexton's task in 2m 32s —— View job PR Review
This is a clean documentation-only PR introducing a versioned cross-plugin contract. The architecture decisions are sound and well-motivated. Two correctness issues and two minor gaps are below. Medium:
|
…po-tolerance note Co-Authored-By: Claude <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_b0a54d7d-9c13-4671-92bd-a06203ee75d1) |
|
Claude finished @kyle-sexton's task in 2m 7s —— View job PR Review
This amendment commit addresses three of the four findings from the initial review. Notes on what landed and what remains: Fixed:
|
There was a problem hiding this comment.
Stale comment
Risk: low. Not approving: Cursor Bugbot completed with a skip (usage limit reached) and did not produce a clean automated review. Human review is needed before merge; no reviewers were assigned because no suitable reviewers were identified outside the PR author.
Sent by Cursor Approval Agent: Pull Request Router and Approver
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_85aefcb7-42cf-4054-96e3-6bde96521af3) |
|
Claude finished @kyle-sexton's task in 1m 49s —— View job PR Review
The latest push is a merge-from-main commit ( Still open (Medium): Array merge semantics for overlay resolution
"Additive per key" and "overrides key-by-key" remain in tension for array-typed fields (
Confirmed fixed (from prior rounds)
Observations (no action required)
|
There was a problem hiding this comment.
Stale comment
Risk: low. Not approving because Cursor Bugbot completed with skip status and did not provide a clean automated review signal. Human review is needed before merge; no reviewers were assigned because no suitable reviewers outside the PR author were identified.
Sent by Cursor Approval Agent: Pull Request Router and Approver
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_a733a01c-3c4f-404f-a7c9-ba7a5fe8cd03) |
|
Claude finished @kyle-sexton's task in 2m 7s —— View job PR Review
This is the fourth review cycle. The HEAD ( Still open (Medium): Array merge semantics unspecified for overlay resolution
"Additive per key" and "overrides key-by-key" still describe incompatible behaviors for array-typed fields ( Proposed fix — one sentence after line 55:
Confirmed fixed (from prior rounds)
Observations (no action required)
|
There was a problem hiding this comment.
Stale comment
Risk: low. Not approving because Cursor Bugbot completed with skip status and did not provide a clean automated review signal. Human review is needed before merge; no reviewers were assigned because no suitable reviewers were identified outside the PR author.
Sent by Cursor Approval Agent: Pull Request Router and Approver
There was a problem hiding this comment.
Risk: low. Not approving because Cursor Bugbot completed with skip status (usage limit reached) and did not provide a clean automated review signal. Human review is needed before merge; no reviewers were assigned because no appropriate reviewers were found outside the PR author.
Sent by Cursor Approval Agent: Pull Request Router and Approver
…#4364) ## Summary `/gaming:dlss5 assess` only refused on anti-cheat, so a game the mod cannot change (a 2D title such as Stardew Valley) still came back `eligible`. This adds a `not-a-candidate` verdict for a game tree with no DLSS, FSR 2+ or XeSS DLL, and `apply` refuses it before any write. There is no override flag. ## Fix - `Invoke-Dlss5Mod.ps1`: one `Find-Upscalers` finder, used by `assess` and by `apply`'s pre-write refusal gates. It matches exact names from upstream OptiScaler's `OptiScaler/DllNames.h` (commit `3bae321`, 2026-06-11): - DLSS: `nvngx_dlss.dll`. - FSR: `ffx_fsr2_api_x64.dll`, `ffx_fsr2_api_dx12_x64.dll`, `ffx_fsr3upscaler_x64.dll`, `amd_fidelityfx_dx12.dll`, `amd_fidelityfx_loader_dx12.dll`, `amd_fidelityfx_upscaler_dx12.dll`, `amd_fidelityfx_vk.dll`. - XeSS: `libxess.dll`, `libxess_dx11.dll`. - Frame generation, ray reconstruction and `nvngx_dlssnr.dll` do not count. The old `nvngx_dlss*.dll` glob matched the NR runtime itself. - The scan root is the Steam `common` folder. For a non-Steam Unreal game it is the install root above `<Project>\Binaries\Win64`, where `Engine\Plugins` holds the upscaler plugins. - The `assess` JSON field `dlss` is replaced by `upscalers` (`family`, `file`, `version`). - Verdict order: `refused`, then `unknown` (no exe), then `not-a-candidate`, then `unknown` (no free proxy), then `eligible`. - The 32-bit check is left out on purpose. Only wilsjo2's README states a 64-bit requirement, so it appears as a labeled single-source note and never as a refusal. - `SKILL.md`: the router explains the verdict in plain words, using Stardew Valley as the example. `not-a-candidate` is added to the apply stop list and the refusal list. The static-link gap is listed under Gotchas. - New `reference/candidate-selection.md` covers: - requirements - detected names and the known gaps - non-candidates and the user-driven upscaler-mod path - engine notes: verifier-confirmed items, plus labeled single-source or conditional items - trusted and untrusted config sources: guide issues authored by FlashAust are untrusted, and #85 records a failed attempt to bypass the NGX registry signature check - why the Cyberpunk proxy stays `dxgi.dll` rather than `dbghelp.dll` - `tuning-guide.md`: a row for NR that looks inert. It says to try the other White point source and cites both conflicting reports (wilsjo2 #34 and #96). - `upstream-watch.md` and `fork-comparison.md`: - wilsjo2's newest prerelease is `v0.8.91`. - Releases from `v0.8.5` ship `SHA256SUMS.txt`. - #56 is open with no maintainer reply. - The pins are unchanged. - No safety gate was weakened: the anti-cheat refusal, per-game confirmation, the no-overwrite rule, `setup_windows.bat` never running, `AutoCapture=false`, and the provider-neutral runtime source are all unchanged. Version 0.1.1 -> 0.2.0. ## Verification - `Invoke-Dlss5Mod.test.sh`: `SELFTEST OK`. New assertions: - A fixture holding only non-upscaler DLLs (`nvngx_dlssnr`, `nvngx_dlssg`, `nvngx_dlssd`, `libxess_fg`, `amd_fidelityfx_framegeneration_dx12`) gets `not-a-candidate`, and `apply` refuses it with the tree byte-identical and no state dir. - FSR-only and XeSS-only fixtures are `eligible`. - A non-Steam Unreal fixture finds DLSS under `Engine\Plugins`. - `scripts/check-changed-skills.sh origin/main`: dlss5 PASS, 0 errors, 0 warnings. - The following all pass or report clean on the changed files: markdownlint-cli2, typos, `check-changelog-parity.sh --check-bump` and `--check-preserved`, `check-shell-portability.sh`, and an em-dash grep. ## Related Closes #4361 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>


Codifies the ecosystem-commands design gate (interview-resolved 2026-07-12; consensus of 3 independent design reviews).
What
docs/conventions/ecosystem-commands/— versioned cross-plugin contract: consumers declare per-ecosystem build/test/lint command surfaces in.claude/ecosystems/<eco>.yaml(drop-in folder,*.local.yamloverlays, user-global → team → local additive resolution); JSON Schema; worked examples; CHANGELOG.docs/MIGRATION-PLAYBOOK.mdseam 2 — new rule: multi-plugin-consumed tracked config uses a concern-named folder (.claude/<concern>/**) with its contract recorded underdocs/conventions/<concern>/(hook-telemetry template).Why
Three divergent encodings of the same command surface exist today (implementation /build table, /lint table, review-toolkit ecosystem-specialist inline defaults) with no consumer-declared source to defer to. Follow-up retrofit/cutover issues land in the medley tracker.
Refs melodic-software/medley#1390
Note
Low Risk
Documentation and schema only; execution behavior is unchanged until plugins adopt the contract in follow-up work.
Overview
Introduces a versioned cross-plugin contract so consumer repos declare per-ecosystem build/test/lint commands in
.claude/ecosystems/<eco>.yamlinstead of each plugin keeping its own tables.docs/conventions/ecosystem-commands/documents the contract: JSON Schema (ecosystem.schema.json), layered resolution (user-global → team →*.local.yaml), the canonical verb vs context-binding split (verbs live here; lefthook/CI keep staged/full-scope bindings and reference these files), plugin resolution ladder behavior, tolerant reading / optional strict validation, and deferred task-runner SSOT with revisit triggers. Worked examples cover bash, dotnet, and python.docs/MIGRATION-PLAYBOOK.mdextends extensibility seam 2: when tracked config is consumed by more than one plugin, use a concern-named folder (.claude/<concern>/**) and record the contract underdocs/conventions/<concern>/, withecosystem-commandsas the first instance.No plugin or consumer code changes in this PR—follow-up retrofit/cutover is tracked separately.
Reviewed by Cursor Bugbot for commit db9eb2d. Bugbot is set up for automated code reviews on this repo. Configure here.