Repository navigation
chore: reconcile issue forms and add SECURITY.md and labels - #76
aryanjasala wants to merge 8 commits into
Conversation
One bug report form and one feature request form replace bug.md, bug.yml, enhancement.yml and feature.yml: bug.yml already covered bug.md, and enhancement.yml and feature.yml had identical bodies. The internal estimate field is gone; config.yml turns off blank issues and sends security reports to private vulnerability reporting. The task and epic templates and CODEOWNERS are unchanged.
labels.yml records the label set shared across the rtCamp framework repositories and a proposed Scope set for the skeleton; the repository has no labels yet. release.yml groups generated release notes by those labels and leaves out Dependabot.
composer create-project installs the Packagist dist archive, so a new .gitattributes export-ignores CODEOWNERS, SECURITY.md, the issue forms, labels.yml and release.yml. Init cleanup is off in this skeleton, so the git clone route is documented as a known gap instead of changing the init contract.
Turn init cleanup on with the same starter-only files .gitattributes keeps out of composer create-project: .gitattributes, CODEOWNERS, the bug and feature issue forms and their config.yml, labels.yml, release.yml and SECURITY.md. A git clone no longer carries them into a client plugin, as theme-elementary already does. Copilot files, workflows, the task and epic templates and the pull request template stay.
Feature requests set the org issue type but carried no label, and release notes filed features under BC: Additive only. Add Type: Feature to the shared label set, apply it from the feature form, and list it first under Features in release.yml.
release-please writes each GitHub release's notes from the merged pull request titles, so .github/release.yml, which only shapes GitHub's generated notes, is never read here. The labels stay for triage.
There was a problem hiding this comment.
Warning
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Copilot review overview
3 open issues
What changed in this PR
Prepares the starter repository for external contributors by consolidating GitHub issue forms, adding a security policy and shared label definitions, and ensuring these repo-only maintenance files are excluded from generated plugin copies.
Changes:
- Consolidates issue templates into a single bug form and a single feature form, and disables blank issues with a security contact link.
- Adds
SECURITY.mdand a shared.github/labels.ymllabel set for triage consistency across framework repos. - Adds export-ignore + init cleanup targets to keep starter-only repository files out of
composer create-projectoutputs.
| File | Description |
|---|---|
| docs/initialization.md | Updates initialization docs to reflect expanded cleanup scope. |
| bin/scaffold.config.js | Expands init cleanup targets to remove repo-only files from git clones on init. |
| SECURITY.md | Adds a security policy and vulnerability reporting guidance. |
| .github/labels.yml | Defines shared + repo-specific label taxonomy to be applied via gh. |
| .github/ISSUE_TEMPLATE/feature.yml | Reworks feature request issue form and aligns it to shared labels. |
| .github/ISSUE_TEMPLATE/enhancement.yml | Removes overlapping enhancement template. |
| .github/ISSUE_TEMPLATE/config.yml | Disables blank issues and adds a private security reporting link. |
| .github/ISSUE_TEMPLATE/bug.yml | Reworks bug report issue form and aligns it to shared labels. |
| .github/ISSUE_TEMPLATE/bug.md | Removes redundant legacy bug template. |
| .gitattributes | Adds export-ignore rules to exclude repo-only files from dist exports. |
Review effort: Lite
Init cleanup also runs on --reinit, "Re-run full setup" and --clean, and deletes each target. A project's own CODEOWNERS, SECURITY.md, .gitattributes or issue forms live at the same paths as the skeleton's, so the next re-run would delete them. Those targets now apply only before init writes .wp-scaffold.json; the skeleton-named release paths stay unconditional. Also adds tests/js/starter-files.test.js, which fails when an export-ignore path in .gitattributes is missing from the cleanup targets (and is itself skeleton-only), and lists release-please's autorelease labels in labels.yml so a later prune can't remove the label it tags releases by.
There was a problem hiding this comment.
Warning
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Copilot review overview
4 open issues
Theexport-ignorerule for/.github/release-startermay not exclude files within that… · New GitHub Issue Forms don’t (historically) support a top-leveltype:key in the form YAML schema. If… · New Same issue as inbug.yml: the top-leveltype:key is not part of the standard Issue Forms… · New This parsing assumes eachexport-ignoreentry maps 1:1 to a literal cleanup target path. If… · New
3 resolved since last review
Review effort: Lite
| /.github/ISSUE_TEMPLATE/feature.yml export-ignore | ||
| /.github/labels.yml export-ignore | ||
| /SECURITY.md export-ignore | ||
| /.github/release-starter export-ignore |
| description: If something isn't working as expected | ||
| name: Bug report | ||
| description: Something in the plugin-elementary skeleton is broken or behaves unexpectedly. | ||
| type: Bug |
| title: '[Feature Request]: ' | ||
| name: Feature request | ||
| description: Suggest a new capability, or an improvement to an existing one, for the skeleton. | ||
| type: Feature |
| const ignored = fs | ||
| .readFileSync( path.join( root, '.gitattributes' ), 'utf8' ) | ||
| .split( '\n' ) | ||
| .map( ( line ) => line.trim() ) | ||
| .filter( ( line ) => /\sexport-ignore$/.test( line ) ) | ||
| .map( ( line ) => line.split( /\s+/ )[ 0 ].replace( /^\//, '' ) ); |
Adi-ty
left a comment
There was a problem hiding this comment.
Approving. Please run the labels.yml sync at merge so the forms' Type: labels exist.
The firstSetup check in bin/scaffold.config.js is a good workaround for now. We'll follow up in wp-tooling, continuing rtCamp/wp-tooling#68:
- Recovering from a failed init: the engine writes
.wp-scaffold.jsonbefore cleanup runs, so if a first init fails partway, the skeleton's files stay behind and a re-run treats the plugin as already set up. The engine will undo the steps it has already applied, so running init again is a clean first setup. - Keeping project files on
--reinitand--clean: the engine will support deletions that run on first setup only, so the starters don't need this check.


Description
Gets the starter ready for outside contributors, as the Q3 plan asks for all five public framework repositories: one bug form and one feature form instead of four overlapping templates, a security policy, the shared label set and grouped release notes. None of these files end up in a plugin created from the starter.
Technical Details
bug.ymlalready coveredbug.md, andenhancement.ymlhad the same body asfeature.yml, so there is now one bug form and one feature form (with a "new feature or improvement" dropdown). The internal "estimated time in hours" field is gone.config.ymlturns off blank issues and points security reports to private vulnerability reporting. The task and epic templates and the existing CODEOWNERS are unchanged.SECURITY.md, modelled on wp-primitives': the latest 1.x release andmainare supported; copies offeatures-plugin-skeleton, the earlier repository, are not..github/labels.yml: the shared set (Type: *includingType: Feature,Priority: P0-P3,Status: *,BC: *,dependencies,good first issue,help wanted) and a proposedScope: *set for the starter. The repository has no labels today..github/release.yml. Since ci: release the skeleton with release-please #66 release-please writes each release's notes from the merged PR titles, so GitHub's generated-notes config would never be read. The labels are for triage..gitattributesexport-ignores CODEOWNERS,SECURITY.md, the issue forms,labels.yml, main's.github/release-starter/andrelease-starter.yml(and itself), socomposer create-projectnever copies them. Init cleanup is already on in main (ci: release the skeleton with release-please #66, for the release-starter paths); the repository files join those 2 incleanup.targets, so a git clone loses them on init too, as theme-elementary does. Copilot files, the other workflows, the task and epic templates and the PR template stay.docs/initialization.mddescribes the new cleanup step; noCHANGELOG.mdentry (release-please writes it).Critical: blocks milestone). The live labels still have dashes, so the next label sync updates their descriptions.Checklist
bug.mdandenhancement.ymlremovedSECURITY.mdpoints to private vulnerability reporting (on for this repository)labels.ymladded (norelease.yml: release-please writes the notes).gitattributeskeeps the starter-only files out ofcomposer create-project.github/release-starter/andrelease-starter.yml, which main added with cleanup already on (ci: release the skeleton with release-please #66)..gitattributesexport-ignores the same list.yamllint;bin/scaffold.config.jspasses the repo's lint-staged checksScreenshots
N/A
To-do
labels.ymlto the repository withgh label create --forceafter merge (it is data; merging changes no label).documentation.yml, which ships into client plugins but only runs in this repository (listed indocs/internal/maintenance.md).Fixes/Covers issue
N/A. Q3 plan, Workstream 7 (public repo basics).