Skip to content

chore(tooling): align CLI tooling and verify packed consumers - #161

Merged
francoischalifour merged 11 commits into
mainfrom
fc/javascript-tooling
Oct 20, 2026
Merged

francoischalifour merged 11 commits into
mainfrom
fc/javascript-tooling

Conversation

@francoischalifour

@francoischalifour francoischalifour commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

What

Align CLI development tooling and expose a consistent root command interface, with focused validation of the actual npm package.

  • Add a private altertable-cli-workspace root command package with explicit frozen setup, canonical check, focused check:package, and root build/dev/typecheck/lint/format/test/Knip commands. CI runs bun run check --integration; both existing Knip modes remain required.
  • Use TypeScript 7.0.2 for typechecking, oxlint 1.86.0, oxlint-tsgolint 7.0.2003, and oxfmt 0.71.0. Enable sorted imports and shared formatting defaults while preserving package JSON key order. Retain strict checking and Node 24.18.0; pin Bun and its type declarations to 1.4.3.
  • Replace package dry runs with build, pack, extraction, and full generated-app consumer smoke against the extracted executable. Run that package gate once, correct fresh-checkout setup instructions, and reject conflicting --quick --integration flags before starting checks.

Why

Contributors and CI should use the same predictable commands, and package validation should exercise shipped bytes. Keep installation separate from verification without weakening consumer isolation or CLI runtime coverage.

The CLI remains Bun-native: preserve Bun builds/tests, coverage thresholds, the native compile matrix, Bun 1.1 runtime support, offline scaffolding, and release recovery/OIDC/provenance. Keep the starter/browser-test lockfiles independent. OpenAPI generation retains TypeScript 6.0.3's compiler API; an explicit compiler alias selects TypeScript 7 for typechecking. Most source changes are mechanical formatting/import sorting.

Verification

  • Frozen bun run setup and full bun run check --integration passed under Bun 1.4.3 and Node 24.18.0: 821 unit tests, 153 black-box tests, 42 browser tests, lakehouse integration, coverage, typechecks, lint/format, both Knip modes, generated-artifact drift, and extracted-package consumer smoke covering directory and app dev --file previews, SQL proxying, and shutdown.
  • The release contract, host macOS ARM64 native build/smoke, and final npm bundle scaffold smoke on Bun 1.1.0 passed. Other native platforms remain covered by the CI matrix. The supported npm runtime remains Bun >=1.1.0.
  • Fresh-checkout setup was checked in a source export with no dependencies; both conflicting flag orders were separately rejected before verification through the script and root command. The private root-name change passed frozen setup and manifest formatting checks without changing any lockfiles. Latest main is integrated without rewriting published history; the full verification above was rerun on that resolved tree.

Checklist

  • Scaffold import assertions updated; runtime/consumer checks exercised
  • Changelog skipped: development tooling and CI changes; no breaking runtime change

Related PRs

Use TypeScript 7.0.2 for CLI and black-box test typechecking, with an
explicit compiler alias so OpenAPI generation retains the working
TypeScript 6 JavaScript API. Align Oxc versions across the CLI and
isolated starter consumer.

Apply shared formatter defaults across existing source and update
scaffold import assertions for single quotes. Keep runtime tests and
coverage on Bun.

Validation: full canonical verification with integration, 42 browser
tests, generated artifact drift checks, and AST comparison of
formatter-only source changes.
Expose direct root scripts for the existing CLI workflow without
combining the independently locked starter and published-package tests
into workspaces. Move frozen development installs to an explicit setup
command and CI step so checking does not modify installed dependencies.
Pin CI Node from .node-version.

Replace npm package dry runs with tarball extraction and executable,
OpenAPI, and offline scaffold smoke checks from the extracted artifact.
Preserve full generated-app smoke coverage, native build orchestration,
Bun 1.1 runtime compatibility, and release recovery/provenance.

Validation: full scripts/verify.sh --integration, frozen setup, actual
npm tarball smoke, minimum Bun 1.1.0 scaffold smoke, and host native
compile/smoke. Other native platforms remain covered by the CI matrix.
Keep Knip 6.32.2 and both existing canonical verification checks. Add direct root commands for normal and production reachability analysis, and document them alongside the other development commands.

Validation: both root Knip commands pass with Bun 1.4.2 and Node 24.18.0; no additional exceptions or configuration changes are needed.
Make bun run check the full repository gate and have CI call it with the integration flag. Preserve quick verification through --quick and retain check:package as a full-gate alias.

Route both Knip modes through their root commands once each. Remove the separate bundle build because pack:check already builds before exercising the tarball.

Validation: bun run check --integration passes under Bun 1.4.2 and Node 24.18.0, including unit coverage, black-box tests, both Knip modes, 42 browser tests, packed consumers, and lakehouse integration.
Enable Oxfmt import sorting while preserving package JSON field order with sortPackageJson: false. Apply import grouping consistently to CLI source, development scripts, and isolated starter/browser consumers. Retain strict TypeScript checking and the generator compiler API exception.

Validation: full root integration check, generated artifact drift checks, both Knip modes, 42 browser tests, and host native compile/smoke pass.
Make root check:package build and validate the extracted npm artifact independently of the repository test suite. Run the full generated-app lifecycle against that artifact instead of checking only its scaffold.

Have the canonical gate call the focused package command once and remove the redundant raw-bundle smoke. Preserve offline scaffolding coverage, minimum Bun runtime compatibility, and native release checks.

Validation: standalone check:package passes without the integration mock; full check --integration, host native compile/smoke, and final Bun 1.1.0 bundle smoke pass.
Start the documented verification sequence with root setup so CLI, starter, and browser-test dependencies are installed before typechecking. Use the canonical root check commands.

Validation: exported fresh tracked source without node_modules, ran bun run setup, then ran the data-app typecheck, lint, formatting, and build checks successfully.
Reject --quick combined with --integration before starting verification. Previously the quick exit silently skipped the requested integration tests. Explain that --integration runs the full integration gate and show mutually exclusive modes in usage.

Validation: both flag orders fail immediately through the script and root command; default and each individual mode still reach verification. Bash syntax and diff checks pass.
Pin development, CI, and release builds to Bun 1.4.3 through the shared version file and package manager metadata. Update Bun declarations in the CLI and independently locked starter/browser consumers without changing published runtime requirements.

Validation: frozen setup and full root integration verification under Bun 1.4.3 with Node 24.18.0, host native release build/smoke, and final npm bundle scaffold smoke on Bun 1.1.0 all pass.
Use the agreed repository-workspace naming convention for the private root command package. Keep published package names and all independent consumer dependency graphs unchanged.

Validation: frozen root setup installs all three existing lockfiles without changes; root manifest formatting and diff checks pass.
francoischalifour added a commit to altertable-ai/altertable-js that referenced this pull request Oct 20, 2026
## What

Standardize SDK development and CI on Bun 1.4.3 workspace commands,
tsdown 0.23.1, and TypeScript 7.0.2, replacing Lerna, the custom dev
launcher, tsup, and TypeScript 5.

- Name the private root `altertable-js-workspace`, keeping published
package names unchanged.
- Share strict TypeScript/Vitest defaults and run builds, types, lint,
Knip, formatting, tests, and packed-consumer checks through `bun run
check`.
- Keep the snippet on SWC for ES5 output; declare its Chokidar watch
peer. Replace the obsolete native bundle-size dependency with built-in
gzip using the same six budgets.
- Qualify packed core/React artifacts through Node CJS/ESM imports,
browser ESM, provider JSX, typed funnel calls, and NodeNext/Bundler
resolution. Preserve zero core runtime dependencies and the browser
global.
- Gate trusted npm publishing on packed checks and request provenance,
retaining linked SDK versions and already-published retry handling.

## Why

Workspace commands, compiler settings, and verification had separate
owners, so local runs, agents, CI, and publishing could exercise
different paths. This makes their entry points consistent and checks the
artifacts consumers install, including fresh-install watch mode and
generated declarations.

## Compatibility

**BREAKING CHANGE:** React 16 now requires 16.14+ for the automatic JSX
transform; React 17–19 remain supported. Components retain JSX, named
imports, and inferred returns. Node selects CJS for React 16
interoperability and a shared singleton; browser bundlers select ESM.

Tsdown's TypeScript 7 declaration integration is experimental. Packed
type fixtures currently use TypeScript 7; these checks do not establish
support for older consumer compilers.

## Verification

The following checks passed under Bun 1.4.3 and Node 24.18.0:

- Private root rename: frozen install, formatting, and Knip passed with
unchanged dependency versions.
- Frozen install and `bun run check`: passed, including 699 tests, all
six size budgets, ES5/global checks, and packed React 16.14/current
runtime and type consumers.
- `bun run test:integration`: 10 tests passed against the local
Altertable mock.
- `bun run check:react-native minimum` and `current`: types and
iOS/Android Metro bundles passed.
- Clean isolated snippet installation: watcher started, emitted the
initial bundle, and rebuilt after an edit.

Native device execution and live npm/OIDC publishing were not run.

## Related PRs

- [Data app: align workspace tooling and
verification](altertable-ai/data-app#99)
- [CLI: align tooling and verify packed
consumers](altertable-ai/altertable-cli#161)

## Checklist

- [x] Tests added or updated
- [x] `CHANGELOG.md` updated
- [x] Breaking change noted in commit footer and changelog
Merge current main without rewriting published history. Preserve the new app dev --file route, source-specific profile validation, 0.72.0 runtime pins, and generated command references while applying the branch's formatting conventions.

Exercise --file directly in the packed and native app smoke instead of switching the directory preview script. Keep both directory and file preview, SQL proxy, and shutdown coverage.

Validation: full root integration gate passes under Bun 1.4.3 and Node 24.18.0 (821 unit, 153 black-box, 42 browser, and lakehouse integration tests); host native release verify/build/smoke and final Bun 1.1.0 scaffold smoke pass.
francoischalifour added a commit to altertable-ai/data-app that referenced this pull request Oct 20, 2026
Align data-app with the shared Altertable JavaScript toolchain while
preserving its seven published packages and browser, Node, and Bun
consumers. This replaces manual library/declaration bookkeeping, removes
installation from verification commands, and makes local and CI checks
share one entry point.

## Changes

- Adopt upstream tsdown 0.23.1 for ordinary library JavaScript and all
declarations, with native Bun workspace build scheduling. Keep Bun for
the adapter, self-contained Worker, and CSS/bootstrap/preview asset
injection.
- Add Knip 6.32.2; update oxlint to 1.86.0 and Oxfmt to 0.71.0. Align
repository/starter formatting, enable sorted imports, and preserve
package JSON ordering. Mechanical import sorting is isolated in commit
08969ee.
- Pin repository and local starter Bun to 1.4.3 with matching
`@types/bun` 1.4.3. Derive packed-consumer Bun typings from the
workspace development dependency. The private root package is
`data-app-workspace`; published package names are unchanged.
- Keep root typechecking and explicitly check all seven package build
configs with root TS7, preserving portable packages’ exclusion of Bun
globals. The manifest package retains TypeScript 5.9.3 as its runtime
compiler dependency.
- Run canonical `bun run check` in CI after browser setup, preserving
workflow validation and the lockfile guard. Add `test:watch` and starter
`lint:fix`; keep `check:package` focused on packed consumers and add
NodeNext resolution checks alongside bundler resolution.
- Preserve meaningful imported-type context in the generated API
reference instead of exposing bundled names such as `Tab$1`. Remove
private unused code without removing public exports.

Package boundaries, export paths, strict mode, lockstep versions, and
the existing Release Please/npm OIDC/provenance recovery flow remain
intact. Bun 1.4.3, Node 24.18.0, TypeScript 7.0.2, Vitest 4.1.11, and
oxlint-tsgolint 7.0.2003 remain pinned.

## Verification

- After integrating current `main` and preserving its manifest override
API, full `bun run check` passed under Bun 1.4.3 and Node 24.18.0: 74
test files / 968 tests, package typechecks, Knip, docs/styles/reference
checks, isolated packed consumers, and starter integration.
- `bun run check:workflows`, frozen install, and diff whitespace checks
passed.
- Additional probes under Bun 1.4.2 confirmed portable `Bun` usage fails
typechecking and Knip detects unused private code/dependencies while
preserving public entry exports. Incremental builds preserved
declarations; an AST comparison confirmed unchanged non-import syntax in
all 310 import-sorted source files.

Verification passed locally on macOS and in hosted CI after integrating
current `main`. Docker-backed gallery development, external URL checks,
and live release publication were not exercised.

## Related PRs

- [JavaScript SDK tooling
alignment](altertable-ai/altertable-js#218)
- [CLI tooling
alignment](altertable-ai/altertable-cli#161)
@francoischalifour
francoischalifour merged commit c8017a3 into main Oct 20, 2026
16 checks passed
@francoischalifour
francoischalifour deleted the fc/javascript-tooling branch October 20, 2026 09:45
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.

3 participants