Thanks for considering a contribution. This file describes the Git Flow the project follows and the rules that every change must respect.
main ────●────●────●────●─────●──────────────●─────────► (production / tagged releases)
▲ ▲ ▲ ▲ ▲ ▲
│ │ │ │ │ │
└────┴────┴────┴─────┴──────────────┘
│
develop ────●────●────●─────●───●──────────────●─────────► (integration)
▲ ▲ ▲ ▲ ▲ ▲
│ │ │ │ │ │
feature/ feature/ feature/ feature/
login payments search settings
(merge to develop, never to main directly)
| Branch | Role | Who pushes | Merges into |
|---|---|---|---|
main |
Production. Every commit is a tagged release. | Maintainer (via merge from develop) | — |
develop |
Integration branch. Features land here first. | Anyone via PR from feature branches | main (at release time) |
feature/<slug> |
Single feature or bug fix. Branched from develop. |
Author | develop (via PR) |
bugfix/<slug> |
Same as feature/ but for fixes. Branched from develop. |
Author | develop (via PR) |
hotfix/<slug> |
Emergency fix branched directly from main. |
Maintainer | main AND develop |
mainis sacred. Direct pushes tomainare not allowed. Every change reachesmainby mergingdevelopinto it (or, for emergencies only, ahotfix/branch into bothmainanddevelop).- All feature work branches from
develop. Never frommain. Never from another feature branch. - Every change opens a PR. No direct pushes to
developeither. - CODEOWNERS review is required. See
.github/CODEOWNERS— owners must approve before merge. Enable in repo settings → Branches → Protection rules → "Require review from Code Owners". - Per-fix version bump in
package.json. Pre-1.0 used patch bumps (0.0.1→0.0.2) on every fix. Post-1.0 follows strict semver:- patch (
1.0.0→1.0.1): bug fix, no behavior change for users - minor (
1.0.0→1.1.0): new feature, backwards-compatible - major (
1.0.0→2.0.0): breaking change to commands, settings, webview message protocol, orCaseFileBundleshape
- patch (
- Tests must pass.
npm testis green before any merge. - Stale branches deleted. After a feature PR is merged, the source branch is deleted both locally and on the remote.
git checkout develop
git pull origin develop
git checkout -b feature/<slug>
# … work …
git push -u origin feature/<slug>
# Open a PR against `develop` via GitHubAfter PR approval + green CI:
# Merge via the GitHub UI (or `gh pr merge --squash`)
# Then locally:
git checkout develop
git pull origin develop
git branch -d feature/<slug> # delete local
git push origin --delete feature/<slug> # delete remoteWhen develop has accumulated enough for a release:
git checkout develop
git pull origin develop
# Bump version in package.json (semver):
npm version minor # or major / patch
# Open a PR develop → main on GitHub, get approval, merge with --no-ff.
# After merge:
git checkout main
git pull origin main
git tag v$(node -p "require('./package.json').version")
git push origin main --tagsgit checkout main
git checkout -b hotfix/<slug>
# … fix …
npm version patch
git push -u origin hotfix/<slug>
# Open PR hotfix → main, merge.
# Then merge main back into develop so develop has the fix too:
git checkout develop
git pull origin develop
git merge main
git push origin develop# Build + run the unit suite
npm test
# Build the .vsix and install into local VS Code
./scripts/install.sh
# Open the extension in dev mode
# Open VS Code on this repo, press F5 — opens an Extension Development Host- TypeScript strict mode. No
anywithout a// reviewed: <why>comment. - Max ~300 lines per file. Split before you grow past it.
- Subprocesses via
child_process.execFile/spawnwith arg arrays. Neverexec/shell: true/execSync. - Webview HTML through the
escapeHtmlhelper. CSP is strict; no inline event handlers. - LLM keys go in
vscode.SecretStorageonly. Never insettings.json, logs, or exported reports. - Tests use Node's built-in
node --testrunner. No Jest, no Vitest.
See .platform/conventions/ for the long form of each rule.
Open an issue at https://github.com/da0101/test-inspector/issues with:
- Test Inspector version (from VS Code Extensions panel)
- VS Code version + OS
- A short reproduction (which project framework, what verdict was wrong, etc.)
- The relevant snippet from the
Test InspectorOUTPUT channel - If LLM-related: which provider + model
Be the kind of reviewer you'd want on your own PR.