fix: close the mechanical audit issues - #196
Merged
Merged
Conversation
The supported-versions table named 0.2.x while the repository is at 0.78.18, so it claimed support for releases eleven minors behind and none of the ones that exist. Replace it with the policy the project can actually keep: latest release only, no backports, no maintenance branches. The row points at VERSION rather than naming a number, so it cannot drift again on the next release. Adds the one-line reason there are no backports — this is content, not a runtime. Closes #186 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
The gallery grid concatenates 51 examples and 26 showcase pieces, then labelled all 77 with the example noun: the count chip read "77 examples", every showcase card carried aria-label "<name> example detail page" and a "View example" link, each showcase detail page titled itself "<name> — Examples" and claimed "Rendered headless by the example itself", and the landing page offered to "Browse all 51 examples in the gallery" for a page holding 77 cards. The two categories are distinct everywhere else in the repository; the site was the last place conflating them. Derive the noun per entry from the `showcase` tag instead of hardcoding it (`kind_noun`), and split the counts: - count chip and its live-updating JS: "51 examples, 26 showcase pieces" - card aria-label and card link: "example" or "showcase piece" per card - showcase detail pages title as "— Showcase —" and credit "the showcase piece itself" - gallery title "Examples Gallery" -> "Examples and Showcase"; description now says showcase pieces share the grid and carry the tag - landing CTA names both counts - search placeholder, chip toolbar, and empty-state text no longer say "examples" for a grid holding both - the generator's summary line prints the breakdown Verified against the generated HTML, not the source JSON: 51 "example" and 26 "showcase piece" nouns on the index, correct titles on a showcase detail page and an example detail page, no residual "Examples Gallery" string, and dotted-path alt text still intact. Closes #187 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
label-sync.yml covered skills, rules, snippets, templates, docs, and .github but not examples/ or showcase/ — the two directories that carry the bulk of content work. A PR adding an example got no path label at all unless it also touched a README, and showcase PRs were labelled `documentation` for their README alone. Add both branches in the same shape as the existing ones. The `examples` and `showcase` labels have been created on the repository (green and purple); every label this workflow can now apply — skills, rules, snippets, templates, examples, showcase, documentation, ci — exists, so the `gh label create --force` fallback in the apply step stays a fallback rather than the thing that silently invents grey labels. Closes #188 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
docs/new-example-prompt.md required every example to produce a deliberate render and wire gallery metadata and assets, with no exception. Eight of the 59 examples ship no render, no gallery.json entry, and no hero asset — an established, deliberate category the authoring prompt did not acknowledge, so the prompt described a rule the repository does not follow. CLAUDE.md stated it more strongly still: "their renders ship in the site gallery", of all 59. State the exception in both, keyed to a criterion rather than a list of the eight so it stays true as the set changes: an example is check-only when its witness is a data or state fact that no scene redesign can make visible — a datablock name, an RNA attribute's presence, a post-exit sidecar, a topology count, export metadata — so the render would be identical whether the API held or broke. The existing "redesign the scene until failure would be visible" instruction is the test to attempt first; the exception is for contracts that are invisible, not renders that are hard. CLAUDE.md now says 51 of 59 ship a render, and records that a check-only example wires only the plugin manifest entry, the smoke catalog row, and its README. Verified on disk: exactly eight examples have no gallery.json entry (coincident-vert-weld, eval-mesh-datablock-name, exit-pre-sidecar, gn-bundle-roundtrip, mesh-automasking-settings, ngon-triangulate, unapplied-scale-gltf, vse-linear-modifiers); all eight have a tests/smoke/catalog.json row, none takes --output, and each carries at least one falsifier flag. Smoke coverage is unaffected. Closes #146 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
The overview claimed the content is consumed by "any MCP-capable client". There is no MCP server in this repository and never has been: Cursor and Claude Code read the files directly from a checkout. The line promised a capability that does not exist, which is a defect rather than a wording preference — a reader evaluating the project would go looking for a server to register. Describe the real mechanism instead: Cursor applies rules/*.mdc by scope glob and takes skills by name; Claude Code reads skills/ and rules/ from the workspace or a referenced checkout; any agent that can read workspace files works the same way. `pages.yml` also path-filters on a `mcp-tools.json` that has never existed in this repository's history — it comes from the shared fleet site builder, which supports tool repos that do ship an MCP server. Filed separately rather than edited here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
The quick start hands the reader a `blender --background --python ...` command without ever saying where `blender` comes from or which versions the repository supports. The supported-versions table is further down the page and links nowhere. Add one bullet above the run command: the LTS download link, which of 5.2 and 4.5 is primary, and the macOS app-bundle path that trips people up when `blender` is not on PATH. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
The falsifier is this repository's central convention — it is what makes a green example run evidence rather than decoration — and it appeared only in CLAUDE.md, CONTRIBUTING.md, and the PR template. A reader evaluating the project from the README never met the word, so the examples read as scripts that happen to print OK. Add a short section above Showcase: what a falsifier is, that it changes input so a real assertion fails rather than skipping the check, that all 59 examples carry one, and the concrete bmesh-gear case (`--no-extrude` breaks the closed-form topology match and exits 3). Names the three flags that are commonly mistaken for falsifiers and links to CONTRIBUTING.md for the exit-code model. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Seven commits, one per audit item. Documentation, site-generator, and workflow changes only — no example or showcase script, assertion, exit code, or falsifier was touched, and
LICENSE,VERSION,CHANGELOG.md,release.yml,pages.ymlpath filters, and the smoke matrix/cron are untouched.Lands under the
main-integrityruleset added in #194.fb333e0SECURITY.mdclaimed 0.2.x at v0.78.187c4ad68f8a3e5elabel-sync.ymlignoredexamples/andshowcase/5a57d9da9c2fc7112586b9be9113#186 — security support table
Named
0.2.xwhile the repo is at0.78.18, so it claimed support for releases eleven minors behind and none that exist. Replaced with the policy the project can keep: latest release only, no backports, no maintenance branches, plus the one-line reason (this is content, not a runtime). The supported row points atVERSIONrather than naming a number, so it cannot drift again.#187 — the gallery noun
The grid concatenates 51 examples and 26 showcase pieces, then labelled all 77 with the example noun. Found and fixed, all of it verified in the generated HTML rather than the source JSON:
77 examples→ now51 examples, 26 showcase pieces, in both the static span and the live-updating JSaria-label="<name> example detail page"and aView examplelink → now per-card, derived from theshowcasetag via a newkind_noun()helper<name> — Examplesand creditedRendered headless by the example itself→ now— Showcase —andthe showcase piece itselfExamples Gallery→Examples and Showcase; back label followsBrowse all 51 examples in the galleryfor a page holding 77 cards → now names both countsaria-label, and empty-state copy no longer say "examples" for a grid holding both77 detail pages (51 examples, 26 showcase pieces)Verification on the regenerated output, per the CLAUDE.md gate:
Dotted-path alt text re-checked against the PR #68 regression:
bmesh.ops.create_grid(...)still renders intact in card alts.#188 — label-sync
Added
examples/andshowcase/branches in the same shape as the existing ones. Both labels created on the repository (examplesgreen,showcasepurple); every label the workflow can now apply — skills, rules, snippets, templates, examples, showcase, documentation, ci — was confirmed to exist, so thegh label create --forcefallback stays a fallback instead of quietly inventing grey labels.#146 — check-only examples
docs/new-example-prompt.mdrequired a render from every example with no exception;CLAUDE.mdwent further and said "their renders ship in the site gallery" of all 59. Eight examples ship none.Both now state the exception keyed to a criterion, not a list, so it stays true as the set changes: an example is check-only when its witness is a data or state fact that no scene redesign can make visible — a datablock name, an RNA attribute's presence, a post-exit sidecar, a topology count, export metadata — so the render would be identical whether the API held or broke. The existing "redesign the scene until failure would be visible" line is the test to attempt first. The exception is for contracts that are invisible, not renders that are hard.
Verified on disk rather than taken from the issue — exactly eight examples have no
gallery.jsonentry:All eight hold a
tests/smoke/catalog.jsonrow, none takes--output, each carries at least one falsifier. Smoke coverage is unaffected.The MCP claim
The overview said the content is consumed by "any MCP-capable client". There is no MCP server here and never has been. Replaced with the real mechanism: Cursor applies
rules/*.mdcby scope glob and takes skills by name; Claude Code readsskills/andrules/from the workspace or a referenced checkout.mcp-tools.jsonis not removed-feature residue —git log --all -- mcp-tools.jsonis empty, so it has never existed here. It is fleet-template scaffolding:scripts/site/build_site.py:274reads it optionally and returns[]when absent. Thepages.ymlpath-filter reference is inert (a filter on a file that cannot change never matches) and is filed as #195 rather than edited here, sincepages.ymlpath filters were out of scope.Falsifiers in the README
Added a section above Showcase: what a falsifier is, that it changes input so a real assertion fails rather than skipping the check, that all 59 examples carry one, and the concrete
bmesh-gear --no-extrudecase (breaks the closed-form topology match, exits 3). Names--api,--check-pixels, and--outputas the flags commonly mistaken for falsifiers, and links toCONTRIBUTING.md#exit-codes.Where to get Blender
One bullet above the run command: the LTS download link, which of 5.2 and 4.5 is primary, and the macOS app-bundle path for when
blenderis not on PATH.Evidence status
Everything above is established by inspection and by running the generator locally. No Blender run was required — no example script changed. The generated gallery was rebuilt with
python scripts/build_gallery.pyand read character by character as the CLAUDE.md gate requires. Smoke on this PR proves the 59 examples still pass unchanged.Closes #186
Closes #187
Closes #188
Closes #146
Refs #195
🤖 Generated with Claude Code