Skip to content

ci: add next branch support for pre-release workflow#77

Draft
miguelramos wants to merge 204 commits intomainfrom
next
Draft

ci: add next branch support for pre-release workflow#77
miguelramos wants to merge 204 commits intomainfrom
next

Conversation

@miguelramos
Copy link
Copy Markdown
Member

  • CI now runs on both main and next branches (push + PR)
  • Release workflow publishes pre-releases on next branch:
    • Uses workspace bump --prerelease next for semver versions (e.g., 1.0.0-next.0)
    • Publishes with --tag next so npm install defaults to stable
    • Stable releases on main unchanged
  • Enables v1.0.0 development on next without breaking 0.x users

- CI now runs on both main and next branches (push + PR)
- Release workflow publishes pre-releases on next branch:
  - Uses workspace bump --prerelease next for semver versions (e.g., 1.0.0-next.0)
  - Publishes with --tag next so npm install defaults to stable
  - Stable releases on main unchanged
- Enables v1.0.0 development on next without breaking 0.x users
@miguelramos miguelramos self-assigned this Feb 12, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 12, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: dc5d6d4d-8527-4644-9b6b-bb85f1d9f5df

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch next

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

- CLAUDE.md: add Branch Strategy section (next for v1.0.0, main for 0.x)
- AGENTS.md: add branch strategy note to session completion workflow
- CONTRIBUTING.md: update PR target branch guidance (next vs main)
Miguel Ramos added 10 commits February 12, 2026 14:17
Add getTimeline(): TimelineEntry[] and clearTimeline(): number to the
OpenApiServer interface and implementation. These methods expose the
internal timeline array so the multi-spec orchestrator can serve
per-spec timeline data via the aggregated internal API and WebSocket
commands.

- getTimeline() returns the timeline array (most recent last)
- clearTimeline() empties the array and returns count of cleared entries
- Backward-compatible: existing consumers unaffected

Closes: vite-qq9.1.1
Closes: vite-qq9.1.2
Add autoConnect?: boolean option to WebSocketHubOptions. When false,
addClient() registers the client but skips the automatic 'connected'
event. Default true (backward-compatible).

This is used by the multi-spec orchestrator which sends its own
connected event with spec metadata (SpecInfo[]).

Closes: vite-qq9.1.3
Add SpecInfo interface to protocol.ts with fields: id, title, version,
proxyPath, color, endpointCount, schemaCount. This represents a single
OpenAPI spec instance in a multi-spec setup and is used by the
orchestrator's connected event and DevTools spec selector.

Exported through websocket/index.ts and core/index.ts.

Closes: vite-qq9.1.4
Add multi-spec protocol types to protocol.ts:

- MultiSpecServerEvent: spec-aware server events with specId field,
  plus a connected event that includes SpecInfo[] for all available specs
- MultiSpecClientCommand: client commands with spec context, including
  global commands (get:specs, get:registry) and spec-scoped commands
  (get:store, set:store, etc. with required specId)

These types are used by the orchestrator's multi-spec WebSocket wrapper.
The existing single-spec types remain unchanged.

Closes: vite-qq9.1.5
Apply biome formatting fixes to index.ts, websocket/index.ts, and
protocol.ts (indentation and trailing comma consistency).

Closes: vite-qq9.1.6
- Add WebSocket broadcast in clearTimeline() to match existing patterns
  in internal-api.ts and command-handler.ts
- Add missing event types to MultiSpecServerEvent: handler:reloaded,
  seed:reloaded, simulation:active (parity with ServerEvent)
- Document get:specs as orchestrator-only command not in
  CLIENT_COMMAND_TYPES
- Change getTimeline() return type to readonly TimelineEntry[] for
  compile-time mutation safety
- Add tests for autoConnect option (5 tests in hub.test.ts)
- Add tests for getTimeline() and clearTimeline() (6 tests in
  server.test.ts)
github-actions Bot and others added 10 commits February 12, 2026 14:18
Rewrite packages/server/src/types.ts with the new specs: SpecConfig[]
configuration shape for v1.0.0 multi-spec support:

- Define SpecConfig interface (spec, id?, proxyPath?, handlersDir?, seedsDir?, idFields?)
- Define OpenApiServerOptions with specs array (breaking: spec -> specs)
- Define ResolvedSpecConfig with proxyPathSource tracking (auto/explicit)
- Define ResolvedOptions with specs: ResolvedSpecConfig[]
- Define ValidationError class with Appendix B error codes
- Define ValidationErrorCode union type for all 8 error codes
- Implement resolveOptions() with SPECS_EMPTY and SPEC_NOT_FOUND validation
- Export new types from index.ts (SpecConfig, ResolvedSpecConfig, ValidationError, ValidationErrorCode)
- Add temporary 'as any' compatibility shims in plugin.ts and banner.ts (rewritten in Task 1.7)
- Update playground vite.config.ts to use new specs[] format
- Rewrite unit tests: 44 tests covering ValidationError, validation, defaults, per-spec config, multi-spec, formats

Closes: vite-qq9.2.1, vite-qq9.2.2, vite-qq9.2.3, vite-qq9.2.4, vite-qq9.2.5, vite-qq9.2.6
The previous pattern '!package.json' only excluded the root package.json.
Changed to '!**/package.json' to exclude all nested package.json files,
fixing the CI lint failure on packages/core/package.json.
- types.test.ts: Replace duplicate resolveOptions calls (expect+try/catch)
  with single-call expectValidationError helper
- types.ts: Include spec index and id in SPEC_NOT_FOUND error message
  for debuggability; extract validateSpecs to reduce cognitive complexity
- banner.ts: Read proxyPath from specs[0] instead of undefined
  options.proxyPath; remove @ts-expect-error
- Remove @internal tags from publicly exported ResolvedSpecConfig and
  ResolvedOptions (they are intentionally exported for advanced use cases)
- Document proxyPathSource field's deferred usage in Task 1.7 orchestrator
- Update banner extractBannerInfo JSDoc to document non-empty specs precondition
- Replace misleading '/api' banner fallback with '(pending resolution)'
- Add test: non-object spec entry throws SPEC_NOT_FOUND
- Add test: first-error-only behavior with multiple invalid specs
- Add test: ValidationError.code type enforcement via @ts-expect-error
- Add test: autoConnect:false + command handling integration
Miguel Ramos added 2 commits March 3, 2026 17:45
Move the duplicated buildSeedMapFromStore() utility from both
orchestrator.ts and hot-reload.ts into seeds.ts, which already
houses seed-related utilities. Both files now import from the
shared location, eliminating verbatim code duplication.
The extraction of buildSeedMapFromStore() to seeds.ts requires the
test mock to pass through the actual implementation so it can read
from the mock store objects during test execution.
github-actions Bot and others added 4 commits March 3, 2026 17:45
- @websublime/vite-plugin-open-api-core: 0.14.0-next.12 → 0.14.0-next.13
- @websublime/vite-plugin-open-api-server: 0.24.0-next.11 → 0.24.0-next.12
Track completion status of all epics and document bug fixes applied
post-implementation. Epics 1-3 completed, Epics 4-6 pending.
Move beads storage from per-project embedded Dolt (.beads/dolt/) to
central Dolt server at localhost:3307 (~/.dolt-data/beads-db/).
Server config now comes from BEADS_DOLT_SERVER_* env vars in ~/.zshrc
instead of metadata.json.
Miguel Ramos added 2 commits March 9, 2026 11:04
Implement multi-spec metadata management for the DevTools UI:

- Specs Pinia store (stores/specs.ts): state (specs, activeSpecFilter),
  computed (specMap, specIds, activeSpec, isFiltered), actions (setSpecs,
  setFilter, toggleFilter, getColor with '#94a3b8' fallback)
- useSpecs composable (composables/useSpecs.ts): thin convenience wrapper
  with getSpecColor, specLabel, isActiveSpec helpers
- SpecInfo interface defined locally to keep devtools-client decoupled
  from core package, with sync comment noting canonical source
- 29 store tests + 17 composable tests, all passing
- Updated stores/index.ts and composables/index.ts exports

Ref: BEAD vite-open-api-server-d6w.1
… SpecInfo type

Addresses CodeRabbit review findings: setFilter/toggleFilter now reject
nonexistent spec IDs, setSpecs clears stale filters, and SpecInfo is
re-exported from the composables barrel.
github-actions Bot and others added 4 commits March 9, 2026 11:04
- @websublime/vite-plugin-open-api-server: 0.24.0-next.12 → 0.24.0-next.13
- @websublime/vite-plugin-open-api-core: 0.14.0-next.13 → 0.14.0-next.14
Add reusable spec filter chips (SpecFilter.vue) and spec badge
(SpecBadge.vue) for multi-spec UI differentiation. SpecFilter reads
from the specs Pinia store and renders toggle chips with colored dots
and spec IDs. SpecBadge renders an inline colored dot indicator.

Includes component tests for both components (17 tests) and installs
@vue/test-utils as a dev dependency.

Refs: vite-open-api-server-d6w.2
Each package now owns its vitest.config.ts and test script.
Root test command delegates to packages via pnpm -r run test.
Fixes CI failure where devtools-client .vue files couldn't be parsed
without @vitejs/plugin-vue in the root config.
Deduplicate the identical createMockSpec helper from SpecBadge and
SpecFilter tests into a shared helpers/mockSpec.ts module.
github-actions Bot and others added 3 commits March 9, 2026 15:54
- @websublime/vite-plugin-open-api-core: 0.14.0-next.14 → 0.14.0-next.15
- @websublime/vite-plugin-open-api-server: 0.24.0-next.13 → 0.24.0-next.14
- Update ConnectedEventData to include optional specs array
- Add 'get:specs' to ClientCommandType union
- Add SimulationConfig interface for set:simulation commands
- Populate specs store from connected event (lazy Pinia access)
- Request initial get:registry and get:timeline per-spec on connect
- Add 10 typed command wrappers: getSpecs, getRegistry, getTimeline,
  clearTimeline, getStore, setStore, clearStore, setSimulation,
  clearSimulation, reseed — all accepting specId parameter
- Extend UseWebSocketReturn interface with new command wrappers
- Add Pinia setup (setActivePinia) to test beforeEach
- Add 22 new tests covering: specs store population, initial data
  requests, all command wrappers, specId passthrough in events

Ref: vite-open-api-server-d6w.3
github-actions Bot and others added 8 commits March 9, 2026 17:43
- @websublime/vite-plugin-open-api-server: 0.24.0-next.14 → 0.24.0-next.15
- @websublime/vite-plugin-open-api-devtools: 0.8.5 → 0.9.0-next.0
- @websublime/vite-plugin-open-api-core: 0.14.0-next.15 → 0.14.0-next.16
- petstore-app: 0.1.0 → 0.2.0-next.0
… simulation stores

Registry: per-spec registries Map, specId on EndpointEntry, setRegistryData(specId, data),
filteredEndpoints/groupedBySpec/globalStats computeds, spec-filtered views via specsStore.

Timeline: specId on TimelineEntry, addRequest(request, specId), setTimelineData(data, specId),
clearTimeline(specId?) for per-spec clearing, spec-filtered counts and computeds.

Models: schemasBySpec Map, specId on SchemaInfo, spec-scoped fetch URLs (/_api/{specId}/store),
fetchSchemas(specId), selectSchemaByName(specId, name), handleStoreUpdate/handleReseedComplete
with specId, filtered schemas computed.

Simulation: specId on ActiveSimulation, createSimulationFromPreset(specId, path, presetId),
activeSimulations/count/simulationsByType respect activeSpecFilter, globalCount for unfiltered.

All existing functionality preserved. Page files will be updated in subsequent beads (d6w.5-8).
- Rewrite registry, timeline, models, simulation test suites for per-spec data
- Fix non-null assertion in registry.ts groupedBySpec computed
- Extract updateSchemaCount helper in models.ts to reduce cognitive complexity
- All 434 tests pass, zero Biome warnings
…ility

Pass specId from specsStore to store method calls in RoutesPage,
TimelinePage, ModelsPage, and SimulatorPage. Each call site has a
TODO referencing the proper bead (d6w.5-8) for full multi-spec page rework.
Replace duplicated seed loop in createOpenApiServer with a call to
populateStoreFromSeeds so both bootstrap and hot-reload use the same
single-sourced routine.
- petstore-app: 0.2.0-next.0 → 0.2.0-next.1
- @websublime/vite-plugin-open-api-core: 0.14.0-next.16 → 0.14.0-next.17
- @websublime/vite-plugin-open-api-devtools: 0.9.0-next.0 → 0.9.0-next.1
- @websublime/vite-plugin-open-api-server: 0.24.0-next.15 → 0.24.0-next.16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant