Skip to content

content-moderator, saas-tracker: AppKit 0.40 -> 0.91.3; build without their tables - #305

Open
mikehelmick wants to merge 5 commits into
databricks:mainfrom
mikehelmick:deps/appkit-0.91.2-showcase
Open

mikehelmick wants to merge 5 commits into
databricks:mainfrom
mikehelmick:deps/appkit-0.91.2-showcase

Conversation

@mikehelmick

@mikehelmick mikehelmick commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #303 → #304. Merge those first; the change here is the last commit, content-moderator, saas-tracker: AppKit 0.40 -> 0.91.3; build without their tables.

Summary

Moves content-moderator and saas-tracker from AppKit 0.40.0 to 0.91.3. These two were left behind when the other AppKit templates moved to 0.87 (#287), because a fresh deploy couldn't build:

  • Their analytics queries read UC catalogs over Lakebase tables that the app creates on first start (content_moderation.content_moderation.*, saas_tracker.saas_tracker.*).
  • prebuild ran appkit generate-types --wait (blocking mode). There, a missing table is a SQL error, and AppKit always fails the build on SQL errors, with no fallback to committed types.

Changes

  • prebuild runs typegen non-blocking (--wait removed). Non-blocking typegen never queries the warehouse at build time. predev still generates real types locally once the tables exist.
  • AnalyticsPage.tsx declares its overview row type (ContentOverviewRow, SpendOverviewRow) and casts the hook's data to it. The client then compiles whether the generated result type is real or degraded (unknown).
  • AppKit 0.40.0 → 0.91.3, with zod aligned to AppKit's 4.6.7. Leaving it at 4.1.13 produced a nested copy that broke postinstall.
  • Direct dependencies brought up to the same level as the other AppKit templates. These two missed npm templates: direct dependency bumps (OTel 2.x, jest 30, react-router, sharp) — 0 criticals #282 and npm templates: refresh dependencies, clear critical/high advisories #299 while they were held back, so they carried 1 critical (vitest) and 3 high (react-router, sharp) findings. They get the same rules: minor/patch only, patch-only for 0.x, a 7-day cooldown, and sharp 0.35.5 to match the siblings. They also get AppKit templates: clear the last npm audit moderates (minimatch) #304's scoped minimatch override. AppKit 0.91.3 already fixes echarts, yaml and qs, so no overrides are needed for those.
  • package-lock.json is now committed, as for every other npm template. Neither app had one before.

Validation

  • npm audit: 1 critical / 3 high / 6 moderate → 0 findings in each. A plain npm ci passes, and the lockfiles use only registry.npmjs.org URLs.
  • npm run build with no warehouse configured (so no tables) succeeds in both. That's exactly what failed before.
  • On the shared template-e2e-test app (rerun on 0.91.3 across all 12 AppKit templates: force-build 12/12, deploy 12/12):
    --val-force-build  validate_templates.py::test_validate_template[content-moderator] PASSED
    --val-force-build  validate_templates.py::test_validate_template[saas-tracker] PASSED
    deploy + serve     validate_templates.py::test_validate_template[content-moderator] PASSED
    deploy + serve     validate_templates.py::test_validate_template[saas-tracker] PASSED
    

Follow-up: .github/dependabot.yml doesn't list these two directories. Now that they have lockfiles, they can be added.

This pull request and its description were written by Isaac.

mikehelmick and others added 2 commits November 9, 2026 10:20
…ides

AppKit 0.91.2 ships the dependency fixes from databricks/appkit#720
(dompurify 3.4.17, zod 4.6.7, js-yaml 4.3.2, OTel auto-instrumentations
0.81.2), so the overrides added in databricks#299 for versions AppKit pinned are no
longer needed:
- removed: dompurify, zod, js-yaml, @opentelemetry/propagator-jaeger
- @opentelemetry/core override 2.8.0 -> 2.12.0 (six appkit-* templates),
  matching AppKit's OTel set and its own scaffold
- systeminformation 5.33.16 kept (matches the AppKit scaffold)

Ten templates: the six appkit-* plus agentic-support-console,
inventory-intelligence, rag-chat and vacation-rentals. content-moderator
and saas-tracker stay on 0.40 (typegen needs their tables first).

Lockfiles updated incrementally. npm audit stays 0 critical / 0 high and
moderates drop 30 -> 13 per template; plain npm ci passes.

Co-authored-by: Isaac <no-reply@databricks.com>
The server build bundled every npm dependency (noExternal: /.*/). With
AppKit 0.91.2 and its OTel 2.12 set, the bundled CommonJS modules
initialize out of order and the app crashes on startup:

  ReferenceError: Cannot access 'require_SemanticAttributes' before
  initialization

Use the same build as the sibling showcase apps (vacation-rentals,
agentic-support-console, rag-chat): unbundle the server and keep
node_modules packages external. The Apps runtime installs dependencies
from package.json, so nothing needs to be bundled.

Co-authored-by: Isaac <no-reply@databricks.com>
mikehelmick and others added 3 commits November 10, 2026 09:25
AppKit 0.91.3 bumps its echarts (6.1.0), yaml (2.9.1) and express (4.22.3,
qs 6.16.x) pins (databricks/appkit#724), clearing those moderate npm audit
findings without template overrides. The 7 moderates left per template are
all minimatch via the dev-only typescript-eslint.

Co-authored-by: Isaac <no-reply@databricks.com>
With AppKit 0.91.3, the 7 moderate findings left per template all trace to
minimatch 10.x (GHSA-g3hv-75wg-m249, DoS) via typescript-eslint 8.72.1, the
latest release, which needs minimatch ^10. The fix exists only in
minimatch 11, so override it for @typescript-eslint/typescript-estree only.
typescript-eslint is a dev-only lint dependency; `npm run lint` output is
unchanged with the override.

npm audit: 7 moderate -> 0 findings in all 10 templates.

Co-authored-by: Isaac <no-reply@databricks.com>
… their tables

Both apps read UC catalogs over Lakebase tables that the app creates on
first start. Their prebuild ran `appkit generate-types --wait` (blocking),
where a missing table is a SQL error that always fails the build, so a
fresh deploy could never build and these two were left on AppKit 0.40.

- prebuild runs typegen non-blocking (no --wait). It never queries the
  warehouse at build time; predev still generates real types locally.
- AnalyticsPage types its overview row explicitly, so the client compiles
  whether the generated result type is real or degraded (`unknown`).
- @databricks/appkit(-ui) 0.40.0 -> 0.91.3, zod aligned to 4.6.7.
- Direct dependencies refreshed to the same level as the other AppKit
  templates (databricks#282/databricks#299: minor/patch, patch-only for 0.x, 7-day cooldown;
  sharp 0.35.5), plus the scoped minimatch override from databricks#304.
- Commit package-lock.json, as every other npm template does.

npm audit: 1 critical / 3 high / 6 moderate -> 0 findings in each.

Co-authored-by: Isaac <no-reply@databricks.com>
@mikehelmick
mikehelmick force-pushed the deps/appkit-0.91.2-showcase branch from 16355e1 to a8a819f Compare November 10, 2026 17:58
@mikehelmick mikehelmick changed the title content-moderator, saas-tracker: AppKit 0.40 -> 0.91.2; build without their tables content-moderator, saas-tracker: AppKit 0.40 -> 0.91.3; build without their tables Nov 10, 2026
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