NeonConductor uses three primary branches:
dev: integration branch for day-to-day workprev: staging branch for beta candidatesmain: stable branch for production releases
Expected promotion path: dev -> prev -> main.
Caution
Alpha channel (dev tags: vX.Y.Z-alpha.N)
Alpha builds are for evaluation and testing.
They can include unfinished features,
weaker stability guarantees,
and temporary security hardening gaps while development is in progress.
Do not use alpha builds for critical workloads or sensitive data handling.
Warning
Beta channel (prev tags: vX.Y.Z-beta.N)
Beta builds are closer to stable, but still pre-release.
Regressions, breaking behavior changes,
and late fixes are still possible.
Use beta when you want early validation before stable.
Note
Stable channel (main)
Stable builds are the most reliable channel in this project.
Bugs and regressions can still occur,
but the likelihood is lower than alpha and beta.
- PR to
dev,prev, ormaintouchingProject/**: review and checks run. - PR title validation runs only for PRs targeting
devand enforces semantic format:type: short lowercase subjectortype(scope): short lowercase subject. - PR type labels are auto-managed from the PR title (including
type: breakingwhen!is used). - New issues and PRs are auto-labeled with
status: needs-triagewhen nostatus:*label exists yet. - PR to
dev,prev, ormaintouchingProject/**:Changeset Checkruns. Changeset Checkvalidates non-doc changes. Docs-only changes inProject(for example markdown/docs paths) are skipped.Changeset Checkcomment includes changeset file inventories for base vs PR snapshots, PR delta (A/M/D/R), and total bump math (base,PR-only,post-merge).- Changes in
Project/.changeset/**always trigger changeset validation. - Merged same-repo PR to
maintouchingProject/.changeset/**runsChangeset Version, unless the PR is a release wrapper or cleanup-sync wrapper. - Merged PR to
mainthat changes bothProject/package.jsonandProject/CHANGELOG.md: stable build workflow runs and publishes. - Merged same-repo
hotfixPRs trigger adjacent-hop lane sync PRs so the fix can move through the remaining long-lived branches. - After stable consumes a hotfix changeset on
main, selective cleanup PRs remove only that consumed hotfix changeset fromprevanddevwhen the file identity still matches. - Push tag matching
v*-alpha.*orv*-beta.*: prerelease build workflow runs and publishes. - Create prerelease tags only when a publicly updatable build is needed: alpha (
dev) can be cut more frequently, while beta (prev) should be cut only when it meaningfully supports release validation. - Pre-release branch guard: alpha tag commit must be contained in
dev, beta tag commit must be contained inprev.
- Do not manually edit
Project/package.jsonversionin normal feature/fix/chore/docs PRs. - Pre-release workflows inject the tagged version at build time using
--config.extraMetadata.version. - Stable version bumps are generated by the
Changeset Versionworkflow and merged as a version PR. - Any manually edited
versionvalue outside the release automation flow should be treated as invalid and reverted.
- In local development mode, updater and release-channel switch features are disabled by default.
- This is expected behavior: update checks and channel downloads are intended for packaged builds.
- For explicit local updater testing only, set
UPDATER_ENABLED=1before launching the app. - Release automation publishes channel metadata to GitHub Pages from the
gh-pagesbranch underupdates/stable/,updates/beta/, andupdates/alpha/. - Before testing packaged auto-updates, enable GitHub Pages to serve from the
gh-pagesbranch.
Note
The window resize dimension overlay in development is caused by open DevTools, not by app window/title bar logic.
If you are an invited contributor with direct repo access:
- Open normal work PRs to
dev. - Use branch names in this format:
username/type/short-description. - Keep
short-descriptionlowercase kebab-case. - Use
username/hotfix/short-descriptionwhen the work must targetdev,prev, ormaindirectly as a release hotfix. - Direct
hotfixtargeting forprevormainis reserved for same-repo contributors with write access. hotfixis a branch-routing type only. Keep PR titles on the existing semantictype:format.- Use
type=protofor demo/testing/spike branches. protobranches are usually not merged.
Allowed type values:
-
build -
ci -
chore -
docs -
feat -
fix -
hotfix -
perf -
refactor -
test -
proto
Examples:
neonsy/feat/onboarding-flowneonsy/fix/window-crash-on-startupneonsy/hotfix/windows-installer-regressionneonsy/chore/update-eslint-configneonsy/docs/release-processneonsy/proto/new-sidebar-concept
Fork PRs are currently outside the enforced branch-flow automation and may be triaged manually. Request invited access first if you need the normal branch-flow path.
PR titles must follow:
type: short lowercase subjecttype(scope): short lowercase subject
Allowed PR title type values:
buildcichoredocsfeatfixperfrefactorreverttestui-ux
Optional PR title scope values:
- Any lowercase kebab-case scope is allowed (examples:
api,frontend,backend,electron,provider,agent,tools,infra,deps).
Breaking marker behavior:
- Use
!before:to mark breaking intent. - Example:
feat(api)!: remove legacy config format - Automation applies labels:
type: featureandtype: breaking. !affects release-note categorization only. Changesets still determine semver/version bump behavior.
- Tag permissions are enforced in GitHub repository rulesets, not by this repo's workflows.
- Configure a tag ruleset for
v*and restrict create/update/delete to release maintainers only. - External users should not have bypass permissions for tag rulesets.
- Create a feature/fix/docs/chore PR to
dev.
- If the PR changes non-doc files in
Project/**, include a changeset inProject/.changeset/. - Docs-only changes in
Project/**(markdown/docs paths) are exempt. - No stable release happens from
devPRs.
Hotfix exception:
- A same-repo contributor with write access may open
username/hotfix/short-descriptiondirectly todev,prev, ormain. - Any non-doc hotfix must include a changeset even when it targets
prevormaindirectly. - The hotfix changeset is treated as stable-release material and must be consumed exactly once on
main. - Automation opens adjacent-hop sync PRs so the hotfix can move across the other long-lived lanes.
- After
mainconsumes the hotfix changeset in the stable version flow, automation selectively cleans that consumed changeset fromprevanddevwithout touching unrelated promotion-flow changesets.
- Publish alpha from
dev.
- Create and push an alpha tag:
vX.Y.Z-alpha.N. - Do this only when a publicly updatable build is needed. On
dev, alpha tags can be created more often during active testing/iteration. - The tagged commit must be in
dev. - Prerelease workflow builds and publishes for all target OSes.
- Promote to
prev.
- Open PR from
devtoprev. - If
Project/**changed,Changeset Checkruns on the PR. - Docs-only changes are skipped by the check.
.changesetand non-doc code/config changes are validated.
- Publish beta from
prev.
- Create and push a beta tag:
vX.Y.Z-beta.N. - Do this only when a publicly updatable build is needed. On
prev, cut beta tags only when it makes release-validation sense. - The tagged commit must be in
prev. - Prerelease workflow builds and publishes for all target OSes.
- Promote to
main.
- Open PR from
prevtomain. - If
Project/**changed,Changeset Checkruns on this PR too. - Docs-only changes are skipped by the check.
.changesetand non-doc code/config changes are validated.
- Merge a same-repo PR into
mainwith pending.changesetfiles.
Changeset Versionworkflow runs on merged PR close event targetingmain.- This includes normal
prev -> mainpromotions, directhotfix -> mainmerges, and lane-sync PRs that carry a hotfix changeset intomain. - It runs
changeset versionand opens or updates a version PR.
- Merge the version PR.
- This updates
Project/package.jsonandProject/CHANGELOG.md. - The stable build workflow detects those file changes and publishes the stable release.
Versioning notes:
- For stable releases, do not manually edit version in
Project/package.json. It is owned by release automation (theChangeset Versionworkflow and version PRs). - For alpha/beta prereleases, the tag version is injected during publish via
--config.extraMetadata.version. - A direct
hotfix -> mainmerge only becomes a stable release when it includes a changeset and the generated stable version PR is merged.
- GitHub release-note categories are configured in
.github/release.yml. - Release note categories are driven by
type:*labels. - Each channel uses a single same-channel delta section:
- alpha:
Changes since previous alpha - beta:
Changes since previous beta(entries include merged PRs targetingdevand direct hotfix/sync entries targetingprev, filtered to PR merge commits contained in the tagged beta commit ancestry) - stable:
Changes since previous stable
- alpha:
- Promotion wrapper PRs (
dev -> prev,prev -> main) are excluded from grouped release-note entries. - Lane-sync wrappers and hotfix cleanup wrappers are excluded from grouped release-note entries, but lane-sync wrappers can resolve back to the origin hotfix PR so the fix still appears once in release notes.
- When no entries are resolved, release notes keep the custom no-entry line, generated fallback blocks (including
Full Changelog) are not injected. - Custom channel header text is preserved for alpha, beta, and stable notes.
| Label Title | When to use it |
|---|---|
ci: failing |
CI failed on default checks |
ci: flaky |
Intermittent CI failures observed |
ci: blocked |
CI cannot run due to missing secrets or env |
ci: passing |
All required checks passing |
automation: dependabot |
Automated PR opened by Dependabot |
automation: lane-sync |
Automation PR carrying a hotfix into another release lane |
automation: changeset-cleanup |
Automation PR removing hotfix changesets after stable consumption |
ignore-for-release |
Exclude PR from generated release notes |
| Label Title | When to use it |
|---|---|
release: hotfix |
Direct-lane hotfix PR intended for expedited release propagation |
| Label Title | When to use it |
|---|---|
type: bug |
Defect or regression |
type: feature |
New user-facing capability |
type: breaking |
Breaking change in behavior or interface |
type: enhancement |
Improvement to existing behavior |
type: chore |
Maintenance or refactor |
type: build |
Build system changes |
type: ci |
CI workflow or automation changes |
type: docs |
Documentation-only change |
type: dependencies |
Dependency updates or lockfile changes |
type: refactor |
Code structure changes without behavior change |
type: test |
Tests added or updated |
type: performance |
Performance or cost improvements |
type: ui-ux |
UI, UX, interaction, or visual design changes |
type: style |
Formatting or style-only changes |
type: revert |
Reverts a previous change |
type: question |
Clarification or discussion |
type: security |
Security-related issue |
| Label Title | When to use it |
|---|---|
scope: agent-core |
Agent lifecycle, state, prompts, policies |
scope: orchestration |
Planning, routing, scheduling, coordination |
scope: tools |
Tool registry, execution, adapters |
scope: memory |
Memory store, embeddings, retrieval |
scope: ui |
Desktop UI and interaction surfaces |
scope: api |
Internal or external APIs |
scope: integrations |
External services and providers |
scope: infra |
Build, CI, deployment, scripts |
scope: docs |
Docs specific to a PR’s area |
scope: tests |
Test-only changes |
scope: dependencies |
Package updates and lockfiles |
| Label Title | When to use it |
|---|---|
priority: p0 |
Must fix immediately |
priority: p1 |
High priority, near-term |
priority: p2 |
Normal priority |
priority: p3 |
Low priority |
severity: s0 |
System-wide or data-loss impact |
severity: s1 |
Major user impact |
severity: s2 |
Minor or localized impact |
| Label Title | When to use it |
|---|---|
status: needs-triage |
New, unreviewed |
status: triaged |
Initial triage completed |
status: noted |
Reviewed by a contributor |
status: confirmed |
Issue/behavior confirmed by maintainers |
status: needs-reproduction |
Needs a reliable reproduction case |
status: reproducible |
Reliable reproduction steps captured |
status: needs-info |
Blocked on reporter details |
status: accepted |
Approved to work on |
status: in-progress |
Actively being worked |
status: blocked |
External dependency or hard block |
status: on-hold |
Paused pending decision or timing |
status: ready-for-review |
Implementation done, needs review |
status: done |
Completed and verified |
status: duplicate |
Duplicate of an existing issue |
status: wontfix |
Closed without planned changes |