Conversation
…tScaffold, and scaffolding Xavier loop: iteration 1 — Phase 1 (Schema Definitions & Type Generation) Co-authored-by: Isaac Signed-off-by: Atila Fassina <atila@fassina.eu>
…te manifest emission Xavier loop: iteration 2 — Phase 2 (Origin Computation & Sync Enrichment) Co-authored-by: Isaac Signed-off-by: Atila Fassina <atila@fassina.eu>
…, and postScaffold Xavier loop: iteration 3 — Phase 3 (Semantic Validation) Co-authored-by: Isaac Signed-off-by: Atila Fassina <atila@fassina.eu>
…ostScaffold steps Xavier loop: iteration 4 — Phase 4 (Core Plugin Manifest Annotations) Co-authored-by: Isaac Signed-off-by: Atila Fassina <atila@fassina.eu>
…t for origin support JSON Schema Draft-07 additionalProperties:false blocks allOf composition. Inlined both defs in template schema so origin validates correctly. Xavier loop: iteration 5 — Phase 5 (Integration & Backpressure) Co-authored-by: Isaac Signed-off-by: Atila Fassina <atila@fassina.eu>
There was a problem hiding this comment.
Pull request overview
This PR upgrades the AppKit plugin manifest ecosystem to a v2.0 template manifest format to support smarter databricks apps init scaffolding, including field discovery metadata, post-scaffold user instructions, computed field origins, and semantic (cross-field) validation during plugin validate.
Changes:
- Bump template plugin manifest version to
2.0and add a top-levelscaffoldingdescriptor. - Extend plugin/template schemas with
discovery(CLI command-based value discovery) andpostScaffoldsteps; generate/propagate computedorigininto template manifests during sync. - Add semantic validation (dependsOn cycles/dangling refs,
<PROFILE>placeholder, discovery/origin coherence, postScaffold structure) and associated tests/docs updates.
Reviewed changes
Copilot reviewed 20 out of 20 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| template/appkit.plugins.json | Updates template manifest to v2.0 and annotates built-in plugins with discovery/origin/postScaffold plus scaffolding descriptor. |
| packages/shared/src/schemas/template-plugins.schema.json | Expands template manifest schema to support v2.0 and scaffolding descriptor; inlines field/requirement defs for origin. |
| packages/shared/src/schemas/plugin-manifest.schema.json | Adds discovery to resource fields and postScaffold to plugin manifests. |
| packages/shared/src/schemas/plugin-manifest.generated.ts | Updates generated TS types to include discovery/postScaffold types. |
| packages/shared/src/plugin.ts | Re-exports new generated types (DiscoveryDescriptor, PostScaffoldStep). |
| packages/shared/src/cli/commands/plugin/validate/validate.ts | Runs semantic validation and formats semantic errors/warnings in CLI output. |
| packages/shared/src/cli/commands/plugin/validate/validate-manifest.ts | Implements semantic validation rules and issue formatting. |
| packages/shared/src/cli/commands/plugin/validate/validate-manifest.test.ts | Adds test coverage for new semantic validation behavior. |
| packages/shared/src/cli/commands/plugin/sync/sync.ts | Computes/injects origin, bumps template manifest to v2.0, and adds scaffolding descriptor on write. |
| packages/shared/src/cli/commands/plugin/sync/sync.test.ts | Adds unit tests for origin computation. |
| packages/shared/src/cli/commands/plugin/manifest-types.ts | Adds scaffolding descriptor types and exports new manifest-related types. |
| packages/appkit/src/plugins/lakebase/manifest.json | Adds discovery descriptors and postScaffold steps to the lakebase built-in plugin manifest. |
| packages/appkit/src/plugins/genie/manifest.json | Adds schema reference, discovery descriptor, and postScaffold steps to genie plugin manifest. |
| packages/appkit/src/plugins/files/manifest.json | Adds discovery descriptor and postScaffold steps to files plugin manifest. |
| packages/appkit/src/plugins/analytics/manifest.json | Adds discovery descriptor and postScaffold steps to analytics plugin manifest. |
| docs/static/schemas/template-plugins.schema.json | Publishes updated template plugins schema for docs site. |
| docs/static/schemas/plugin-manifest.schema.json | Publishes updated plugin manifest schema for docs site. |
| docs/static/appkit-ui/styles.gen.css | Updates generated UI styles (tailwind output) used by docs UI. |
| docs/docs/api/appkit/Interface.ResourceFieldEntry.md | Documents the new discovery field on ResourceFieldEntry. |
| docs/docs/api/appkit/Interface.PluginManifest.md | Documents the new postScaffold field on PluginManifest. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…r-template xavier loop: iteration 1 — Phase 1 complete
|
@atilafassina this one looks ok and evolution, however little heavy code-wise (let me post comments from isaac about these) and mixing concepts little bit. What do you think of this: Alternatives worth weighing Zod as single source of truth (my default for a TS-first ecosystem):
TS-authored manifests compiled to JSON:
Split concerns into two files:
|
keugenek
left a comment
There was a problem hiding this comment.
Overall direction looks right — v2.0 versioning via if/then is correct and co-located manifest.json per plugin is the right locality. A few shape-level concerns worth addressing before or soon after this lands. Happy to chat on any of them.
| } | ||
| } | ||
| }, | ||
| "discoveryDescriptor": { |
There was a problem hiding this comment.
cliCommand is a string template with a <PROFILE> placeholder plus a jq path in selectField. The only validation is "contains <PROFILE>" — nothing checks the CLI output shape, so paginated or wrapped responses ({warehouses:[...]}) will fail at runtime. Consider {resourceKind, select, display} and letting the CLI own the command.
| * Injects computed `origin` onto every resource field in all plugins. | ||
| * Mutates the plugins object in place for efficiency. | ||
| */ | ||
| function enrichFieldsWithOrigin( |
There was a problem hiding this comment.
origin is derived from other fields then serialized back, which is why validateDiscoveryOrigin has to warn about inconsistent states. Computing at read time would remove both the enrichment step and that validator.
| }, | ||
| "additionalProperties": false | ||
| }, | ||
| "scaffoldingDescriptor": { |
There was a problem hiding this comment.
rules.never[] / rules.must[] are LLM prompts inside the schema. No validator can check what actually matters (agent behavior), and the schema file becomes part prompt. Worth splitting into a sibling scaffold.prompts.md.
| @@ -98,10 +120,330 @@ | |||
| "$ref": "plugin-manifest.schema.json#/$defs/resourceType" | |||
| }, | |||
| "resourceFieldEntry": { | |||
There was a problem hiding this comment.
Per commit eb65776, resourceFieldEntry / resourceRequirement were inlined instead of resolving $ref. The plugin and template schemas will drift. Better to fix the ref resolver (e.g. bundle via @apidevtools/json-schema-ref-parser at publish).
| @@ -0,0 +1 @@ | |||
| {"sessionId":"f1aff2d6-c2fa-41a1-9596-0670b1e35bda","pid":6435,"acquiredAt":1775737052293} No newline at end of file | |||
There was a problem hiding this comment.
Accidental commit — add to .gitignore.
This branch evolves the plugin manifest system from v1.0 to v2.0, adding three major capabilities to support smarter scaffolding by the databricks apps init CLI.
Schema Extensions (commit 4c42edd)
listing warehouses). Supports cliCommand (with placeholder), selectField/displayField for interactive selection, dependsOn for
inter-field ordering, and a shortcut for single-value fast paths.
Origin Computation & Scaffolding Descriptor (commit 7fe3d74)
computeOrigin()derives origin from field properties:- local only →
platform- value present →
static- resolve present →
cli- user input → user.
enrichFieldsWithOrigin()injects computed origin into every resource field at sync time.(never/must).
Semantic Validation (commit b905167)
Four new cross-field validators added to appkit plugin validate:
dependsOncycle detection — DFS-based check for circular dependencies between discovery fields.dependsOndangling reference — errors if a field references a non-existent sibling.<PROFILE>placeholder — ensures every cliCommand includes the placeholder.postScaffoldstructural validation — verifies array structure and non-empty instructions.Core Plugin Annotations (commit d8cbbf4)
Annotates all four built-in plugin manifests (analytics, files, genie, lakebase) with:
postScaffoldsteps (e.g. "Create a SQL warehouse", "Enable Lakebase")Schema Fix (commit eb65776)
Inlines
resourceFieldEntryandresourceRequirementdefinitions in the template schema so origin and discovery are properly represented without$refresolution issues.Test Results
Run 1