Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
75c472b
feat: define binding authoring model contracts
artiphishle Aug 10, 2026
5a0e9ab
feat: resolve bindable component metadata
artiphishle Aug 10, 2026
8c91a28
feat: add canonical binding registry mutations
artiphishle Aug 10, 2026
5b51711
feat: resolve binding schema compatibility
artiphishle Aug 10, 2026
b299d00
feat: enumerate canonical binding operations
artiphishle Aug 10, 2026
7c65fe5
feat: expand binding diagnostics contracts
artiphishle Aug 10, 2026
0754f9a
feat: diagnose authored component bindings
artiphishle Aug 10, 2026
6f4e6c8
feat: expose binding authoring model
artiphishle Aug 10, 2026
fbe5d7f
test: cover canonical binding authoring model
artiphishle Aug 10, 2026
b0c5d4b
ci: validate ADM 6 model branch
artiphishle Aug 10, 2026
c5dcb03
fix: narrow binding schema types safely
artiphishle Aug 10, 2026
e083263
ci: format ADM 6 model sources
artiphishle Aug 10, 2026
ae83716
style: format ADM 6 binding model
artiphishle Aug 10, 2026
31f08b2
feat: add binding editor draft helpers
artiphishle Aug 10, 2026
04b290b
feat: add binding admin styles
artiphishle Aug 10, 2026
889aaf5
feat: add property binding editor
artiphishle Aug 10, 2026
9228580
feat: add event binding composer
artiphishle Aug 10, 2026
7547f83
feat: add property bindings card
artiphishle Aug 10, 2026
060f16c
feat: add event bindings card
artiphishle Aug 10, 2026
5f7a8c3
feat: add binding diagnostics card
artiphishle Aug 10, 2026
ad390bd
feat: add contextual binding admin page
artiphishle Aug 10, 2026
c7a6d15
chore: wire ADM 6 contextual binding surface
artiphishle Aug 10, 2026
2d6a966
chore: add ADM 6 wiring script
artiphishle Aug 10, 2026
21dbef8
chore: simplify ADM 6 wiring workflow
artiphishle Aug 10, 2026
84a2e8f
feat: wire contextual binding authoring
artiphishle Aug 10, 2026
c07d8d4
test: cover contextual bindings app bar action
artiphishle Aug 10, 2026
cf7b470
test: cover contextual binding routes
artiphishle Aug 10, 2026
bb1e637
test: cover bindings admin page boundary
artiphishle Aug 10, 2026
8352261
test: cover canonical binding manifest round trip
artiphishle Aug 10, 2026
839d8f3
test: cover canonical binding mutation variants
artiphishle Aug 10, 2026
1aaca39
fix: stabilize and extend event input authoring
artiphishle Aug 10, 2026
5038685
fix: diagnose nested event input paths
artiphishle Aug 10, 2026
9332a43
chore: add ADM 6 changeset
artiphishle Aug 10, 2026
0f1b0ef
docs: document canonical binding authoring
artiphishle Aug 10, 2026
784a50b
ci: verify ADM 6 code
artiphishle Aug 10, 2026
ed04b00
refactor: key binding operations by canonical refs
artiphishle Aug 10, 2026
d3a4688
refactor: use canonical operation keys in property bindings
artiphishle Aug 10, 2026
523d21e
refactor: use canonical operation refs in event composer
artiphishle Aug 10, 2026
66388d2
fix: guard event binding removal state
artiphishle Aug 10, 2026
1b2406d
fix: type contextual bindings route state
artiphishle Aug 10, 2026
3208053
fix: type ZORA binding metadata registry
artiphishle Aug 10, 2026
b9ad1e5
test: import ZORA metadata from narrow entrypoint
artiphishle Aug 10, 2026
169cc88
ci: verify ADM 6 targeted acceptance
artiphishle Aug 10, 2026
210e5ea
test: isolate binding model from ZORA module startup
artiphishle Aug 10, 2026
94b4dbd
refactor: keep binding diagnostics authoring-only
artiphishle Aug 10, 2026
2ada325
refactor: validate binding refs from canonical operation options
artiphishle Aug 10, 2026
79bf453
refactor: diagnose bindings from normalized operation catalog
artiphishle Aug 10, 2026
a9c32dd
test: diagnose bindings from operation options
artiphishle Aug 10, 2026
0f3efbf
test: avoid operation display-order assumptions
artiphishle Aug 10, 2026
bfca4c0
docs: clarify binding reference diagnostics
artiphishle Aug 10, 2026
85ed101
chore: remove temporary ADM 6 verifier
artiphishle Aug 10, 2026
b733e12
chore: remove targeted ADM 6 verifier
artiphishle Aug 10, 2026
6b7ff9a
test: use a typed binding persistence manifest
artiphishle Aug 10, 2026
bacc68d
ci: verify final ADM 6 code
artiphishle Aug 10, 2026
9ca4316
chore: remove final ADM 6 verifier
artiphishle Aug 11, 2026
5bc82a5
chore(lint): fix
artiphishle Aug 11, 2026
6b999f1
fix: satisfy binding editor destructuring lint
artiphishle Aug 11, 2026
34e86ee
docs: update
artiphishle Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/adm-6-binding-authoring.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@ankhorage/studio': minor
---

Restore contextual component binding authoring with ZORA-owned bindable metadata, canonical manifest data bindings, uniform external/generated operation selection, schema-aware response paths, event payload input mapping, and binding diagnostics while keeping execution in Runtime.
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

# @ankhorage/studio

![license: MIT](././paradox/badges/license.svg) ![npm: v0.12.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
![license: MIT](././paradox/badges/license.svg) ![npm: v0.13.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)

Standalone Studio authoring package for Ankhorage apps.

Expand All @@ -30,12 +30,20 @@ Manage Studio development and projects through the Ankh CLI.
- [Module relationships](././paradox/diagrams/module-relationships.mmd)
- [Export graph](././paradox/diagrams/export-graph.mmd)
- [addNodeToTree sequence](././paradox/diagrams/sequences/add-node-to-tree.mmd)
- [appendStudioEventBinding sequence](././paradox/diagrams/sequences/append-studio-event-binding.mmd)
- [assessStudioBindingCompatibility sequence](././paradox/diagrams/sequences/assess-studio-binding-compatibility.mmd)
- [buildInsertCatalogEntries sequence](././paradox/diagrams/sequences/build-insert-catalog-entries.mmd)
- [cloneWithNewIds sequence](././paradox/diagrams/sequences/clone-with-new-ids.mmd)
- [collectStudioResponsePaths sequence](././paradox/diagrams/sequences/collect-studio-response-paths.mmd)
- [createNodeFromCatalogEntry sequence](././paradox/diagrams/sequences/create-node-from-catalog-entry.mmd)
- [diagnoseStudioComponentBindings sequence](././paradox/diagrams/sequences/diagnose-studio-component-bindings.mmd)
- [findNodeById sequence](././paradox/diagrams/sequences/find-node-by-id.mmd)
- [removeStudioEventBinding sequence](././paradox/diagrams/sequences/remove-studio-event-binding.mmd)
- [removeStudioPropBinding sequence](././paradox/diagrams/sequences/remove-studio-prop-binding.mmd)
- [resolveStudioInstancePropertyGroups sequence](././paradox/diagrams/sequences/resolve-studio-instance-property-groups.mmd)
- [resolveStudioSchemaValueMeta sequence](././paradox/diagrams/sequences/resolve-studio-schema-value-meta.mmd)
- [updateNodeInTree sequence](././paradox/diagrams/sequences/update-node-in-tree.mmd)
- [upsertStudioPropBinding sequence](././paradox/diagrams/sequences/upsert-studio-prop-binding.mmd)
- [validateInsertRecipe sequence](././paradox/diagrams/sequences/validate-insert-recipe.mmd)
- [validateNodePlacement sequence](././paradox/diagrams/sequences/validate-node-placement.mmd)
- [validateProjectCreationInput sequence](././paradox/diagrams/sequences/validate-project-creation-input.mmd)
27 changes: 27 additions & 0 deletions docs/binding-authoring.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Binding authoring

Studio exposes one contextual binding surface at `/ankh/bindings/:nodeId`. It is opened from the selected component through the Studio AppBar and is intentionally separate from the Properties editor.

## Ownership

Studio owns authoring UX and manifest mutation only. Canonical binding shapes come from `@ankhorage/contracts`, bindable component props/events and event payload metadata come from ZORA, and binding execution remains in `@ankhorage/runtime`.

Studio does not maintain a second endpoint registry, event schema registry, or binding executor.

## Property/data bindings

The editor only exposes properties declared in `ZORA_BINDABLE_COMPONENT_META`. Authored bindings persist in `manifest.dataBindings` and support the canonical literal, state, context, and operation-result sources.

Operation-result bindings enumerate normalized `manifest.dataSources` uniformly, so external and generated APIs use the same authoring path. Response paths are derived from canonical operation response schemas and compared against ZORA bindable value metadata.

## Event/action bindings

The editor only exposes events declared by ZORA binding metadata. Events can target canonical actions or canonical data-source operations.

Known event payload fields are surfaced from ZORA. Action payload fields come from Studio's existing action authoring metadata, while operation request inputs come from canonical operation request schemas. Inputs can use literal values or event payload paths, including nested paths beneath object/record payload fields.

## Diagnostics

Studio resolves operation references against the same normalized operation catalog used by the authoring selectors. Missing operation references, response paths, required operation inputs, incompatible response/input values, unknown bindable props/events, and unavailable actions are surfaced as authoring diagnostics.

Diagnostics never execute operations and do not reproduce Runtime execution logic. Runtime remains the only execution owner.
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@
"types": "./dist/manifestState.d.ts",
"import": "./dist/manifestState.js"
},
"./bindingAuthoringModel": {
"types": "./dist/bindingAuthoringModel.d.ts",
"import": "./dist/bindingAuthoringModel.js"
},
"./propertiesAuthoringModel": {
"types": "./dist/propertiesAuthoringModel.d.ts",
"import": "./dist/propertiesAuthoringModel.js"
Expand Down
6 changes: 3 additions & 3 deletions paradox/badges/npm.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
75 changes: 75 additions & 0 deletions paradox/diagrams/architecture-overview.mmd
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,38 @@ graph TD
module_src_authSettings_test_ts --> module_src_authSettings_ts
module_src_authSettings_ts["src/authSettings.ts"]
package__ankhorage_studio -.-> module_src_authSettings_ts
module_src_bindingAuthoringContracts_ts["src/bindingAuthoringContracts.ts"]
package__ankhorage_studio -.-> module_src_bindingAuthoringContracts_ts
module_src_bindingAuthoringModel_test_ts["src/bindingAuthoringModel.test.ts"]
package__ankhorage_studio -.-> module_src_bindingAuthoringModel_test_ts
module_src_bindingAuthoringModel_test_ts --> module_src_bindingAuthoringModel_ts
module_src_bindingAuthoringModel_ts["src/bindingAuthoringModel.ts"]
package__ankhorage_studio -.-> module_src_bindingAuthoringModel_ts
module_src_bindingDiagnosticsModel_ts["src/bindingDiagnosticsModel.ts"]
package__ankhorage_studio -.-> module_src_bindingDiagnosticsModel_ts
module_src_bindingDiagnosticsModel_ts --> module_src_bindingAuthoringContracts_ts
module_src_bindingDiagnosticsModel_ts --> module_src_bindingOperationModel_ts
module_src_bindingDiagnosticsModel_ts --> module_src_bindingSchemaModel_ts
module_src_bindingManifestPersistence_test_ts["src/bindingManifestPersistence.test.ts"]
package__ankhorage_studio -.-> module_src_bindingManifestPersistence_test_ts
module_src_bindingManifestPersistence_test_ts --> module_src_core_studioManifestDraftModel_ts
module_src_bindingManifestPersistence_test_ts --> module_src_index_ts
module_src_bindingManifestPersistence_test_ts --> module_src_manifestSync_ts
module_src_bindingMetadataModel_ts["src/bindingMetadataModel.ts"]
package__ankhorage_studio -.-> module_src_bindingMetadataModel_ts
module_src_bindingMetadataModel_ts --> module_src_bindingAuthoringContracts_ts
module_src_bindingMutationAcceptance_test_ts["src/bindingMutationAcceptance.test.ts"]
package__ankhorage_studio -.-> module_src_bindingMutationAcceptance_test_ts
module_src_bindingMutationAcceptance_test_ts --> module_src_bindingAuthoringModel_ts
module_src_bindingMutationModel_ts["src/bindingMutationModel.ts"]
package__ankhorage_studio -.-> module_src_bindingMutationModel_ts
module_src_bindingOperationModel_ts["src/bindingOperationModel.ts"]
package__ankhorage_studio -.-> module_src_bindingOperationModel_ts
module_src_bindingOperationModel_ts --> module_src_bindingAuthoringContracts_ts
module_src_bindingOperationModel_ts --> module_src_bindingSchemaModel_ts
module_src_bindingSchemaModel_ts["src/bindingSchemaModel.ts"]
package__ankhorage_studio -.-> module_src_bindingSchemaModel_ts
module_src_bindingSchemaModel_ts --> module_src_bindingAuthoringContracts_ts
module_src_canvasDragModel_public_test_ts["src/canvasDragModel.public.test.ts"]
package__ankhorage_studio -.-> module_src_canvasDragModel_public_test_ts
module_src_canvasDragModel_public_test_ts --> module_src_canvasDragModel_ts
Expand Down Expand Up @@ -847,6 +879,7 @@ graph TD
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_studioAdminRouteModel_ts
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_ApisAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_AuthAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_BindingsAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_OverviewAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_PropertiesAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_SecretsAdminPage_tsx
Expand Down Expand Up @@ -926,6 +959,48 @@ graph TD
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthCredentialFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthHealthFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthSessionModel_ts
module_src_ui_admin_pages_bindings_bindingAdminStyles_ts["src/ui/admin/pages/bindings/bindingAdminStyles.ts"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx["src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx
module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx --> module_src_bindingAuthoringModel_ts
module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
module_src_ui_admin_pages_bindings_bindingEditorModel_ts["src/ui/admin/pages/bindings/bindingEditorModel.ts"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_bindingEditorModel_ts
module_src_ui_admin_pages_bindings_bindingEditorModel_ts --> module_src_bindingAuthoringModel_ts
module_src_ui_admin_pages_bindings_EventBindingComposer_tsx["src/ui/admin/pages/bindings/EventBindingComposer.tsx"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_bindingAuthoringModel_ts
module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_index_ts
module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_pages_bindings_bindingEditorModel_ts
module_src_ui_admin_pages_bindings_EventBindingsCard_tsx["src/ui/admin/pages/bindings/EventBindingsCard.tsx"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_EventBindingsCard_tsx
module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_bindingAuthoringModel_ts
module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx["src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx
module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_bindingAuthoringModel_ts
module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_pages_bindings_bindingEditorModel_ts
module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx["src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx
module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_bindingAuthoringModel_ts
module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx
module_src_ui_admin_pages_BindingsAdminPage_tsx["src/ui/admin/pages/BindingsAdminPage.tsx"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_BindingsAdminPage_tsx
module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_bindingAuthoringModel_ts
module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_core_StudioContext_ts
module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_index_ts
module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_manifestState_ts
module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx
module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_EventBindingsCard_tsx
module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx
module_src_ui_admin_pages_DataSourceCatalogCard_tsx["src/ui/admin/pages/DataSourceCatalogCard.tsx"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_DataSourceCatalogCard_tsx
module_src_ui_admin_pages_DataSourceCatalogCard_tsx --> module_src_ui_admin_pages_ExternalApiAdminPrimitives_tsx
Expand Down
Loading
Loading