Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
8a3596b
chore: apply adm 3 instance properties
artiphishle Aug 5, 2026
6c259d9
chore: capture adm 3 lint diagnostics
artiphishle Aug 5, 2026
32277c1
chore: capture adm 3 validation failure
github-actions[bot] Aug 5, 2026
a5a73f5
fix: correct adm 3 implementation syntax
artiphishle Aug 5, 2026
b513daf
chore: capture adm 3 validation failure
github-actions[bot] Aug 5, 2026
194c6a8
chore: pause adm 3 helper workflow
artiphishle Aug 5, 2026
f1f82c2
fix: restore instance properties model tests
artiphishle Aug 5, 2026
dbf0954
fix: restore metadata-driven Properties page
artiphishle Aug 5, 2026
876b812
refactor: keep Properties metadata contract structural
artiphishle Aug 5, 2026
a78c0e4
test: clarify read-only node alias boundary
artiphishle Aug 5, 2026
8645e1b
docs: clarify instance Properties ownership
artiphishle Aug 5, 2026
dfd030b
docs: clarify Studio consumption boundaries
artiphishle Aug 6, 2026
a47ca53
chore: validate adm 3 implementation
artiphishle Aug 6, 2026
12ad7d9
chore: capture adm 3 validation output
artiphishle Aug 6, 2026
3111f8f
chore: capture adm 3 validation failure
github-actions[bot] Aug 6, 2026
5d8fe99
test: keep injected metadata fixture structural
artiphishle Aug 6, 2026
44b7b33
fix: restore main index before adm 3 exports
artiphishle Aug 6, 2026
b5f0c60
fix: format after Paradox regeneration
artiphishle Aug 6, 2026
75d6c12
chore: capture adm 3 knip output
artiphishle Aug 6, 2026
93f516f
chore: capture adm 3 knip failure
github-actions[bot] Aug 6, 2026
4cab8eb
refactor: remove obsolete raw property formatter
artiphishle Aug 6, 2026
3bcc772
feat: add metadata-driven instance properties
github-actions[bot] Aug 6, 2026
45d35d6
chore: finalize ADM 3 against ZORA 2.9.3
artiphishle Aug 6, 2026
7b9e5d7
fix: make ADM 3 finalizer workflow parse-safe
artiphishle Aug 6, 2026
0b60b80
chore: remove temporary ADM 3 finalizer workflow
artiphishle Aug 6, 2026
fe61159
chore(deps): update ZORA
artiphishle Aug 6, 2026
ac76a37
test: cover released ZORA Heading authoring metadata
artiphishle Aug 6, 2026
91dfe09
test: load ZORA metadata from serializable subpath
artiphishle Aug 6, 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/neat-instance-properties.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@ankhorage/studio': patch
---

Replace the raw Properties prop dump with a metadata-driven instance authoring model backed by the released ZORA authoring authority registry.
3 changes: 2 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.11.4](././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.11.11](././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 Down Expand Up @@ -34,6 +34,7 @@ Manage Studio development and projects through the Ankh CLI.
- [cloneWithNewIds sequence](././paradox/diagrams/sequences/clone-with-new-ids.mmd)
- [createNodeFromCatalogEntry sequence](././paradox/diagrams/sequences/create-node-from-catalog-entry.mmd)
- [findNodeById sequence](././paradox/diagrams/sequences/find-node-by-id.mmd)
- [resolveStudioInstancePropertyGroups sequence](././paradox/diagrams/sequences/resolve-studio-instance-property-groups.mmd)
- [updateNodeInTree sequence](././paradox/diagrams/sequences/update-node-in-tree.mmd)
- [validateInsertRecipe sequence](././paradox/diagrams/sequences/validate-insert-recipe.mmd)
- [validateNodePlacement sequence](././paradox/diagrams/sequences/validate-node-placement.mmd)
Expand Down
4 changes: 2 additions & 2 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 32 additions & 0 deletions docs/instance-properties.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Metadata-driven instance Properties

`/ankh/properties/{nodeId}` is the canonical per-node authoring surface.

The page consumes the released ZORA component metadata registry at the concrete app/UI composition
boundary. Package-neutral Studio helpers receive a structural metadata registry from their caller
and never import or recreate concrete ZORA metadata.

Only props classified with:

```ts
{
authoring: {
authority: 'instance';
}
}
```

become fields. Theme-owned props and props without authoring metadata are intentionally absent.

The initial editor set supports strings, numbers, booleans, and declared enum choices. Unsupported
future authoring types remain explicit rather than falling back to arbitrary JSON or string editors.

Node identity such as the node ID, component type, and optional alias remains read-only context. It
is not treated as component prop metadata.

Property changes update the selected node through the existing canonical manifest mutation and
persistence flow. Studio does not create a second unsaved Properties model.

This narrows the architectural gap between `apps/studio` and generated Ankhorage apps: both consume
the same manifest nodes and package-owned component metadata, while Studio adds only the authoring
interaction.
6 changes: 5 additions & 1 deletion 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"
},
"./propertiesAuthoringModel": {
"types": "./dist/propertiesAuthoringModel.d.ts",
"import": "./dist/propertiesAuthoringModel.js"
},
"./manifestSync": {
"types": "./dist/manifestSync.d.ts",
"import": "./dist/manifestSync.js"
Expand Down Expand Up @@ -240,7 +244,7 @@
"@ankhorage/supabase-auth": "^1.1.2",
"@ankhorage/supabase-vault": "^0.2.4",
"@ankhorage/templates": "^3.0.0",
"@ankhorage/zora": "^2.9.1",
"@ankhorage/zora": "^2.9.3",
"@ankhorage/zora-chess": "^0.1.2",
"@ankhorage/zora-tabletop": "^0.0.5",
"@fastify/cors": "^11.2.0",
Expand Down
8 changes: 4 additions & 4 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.
40 changes: 39 additions & 1 deletion paradox/diagrams/architecture-overview.mmd
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,20 @@ graph TD
module_src_hooks_useWorkspaceActions_ts --> module_src_core_constants_ts
module_src_host_auth_projectAuthHealthService_ts["src/host/auth/projectAuthHealthService.ts"]
package__ankhorage_studio -.-> module_src_host_auth_projectAuthHealthService_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_host_orchestrator_projectManager_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_host_secrets_projectSecretService_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_projectAuthHealth_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_projectAuthRuntimeDiagnostics_ts
module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts["src/host/auth/projectAuthRuntimeDiagnostics.test.ts"]
package__ankhorage_studio -.-> module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts
module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts --> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
module_src_host_auth_projectAuthRuntimeDiagnostics_ts["src/host/auth/projectAuthRuntimeDiagnostics.ts"]
package__ankhorage_studio -.-> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_host_orchestrator_infraRuntime_ts
module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_host_orchestrator_projectPaths_ts
module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthHealth_ts
module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthRuntimeDiagnostics_ts
module_src_host_createStudioHost_ts["src/host/createStudioHost.ts"]
package__ankhorage_studio -.-> module_src_host_createStudioHost_ts
module_src_host_createStudioHost_ts --> module_src_host_orchestrator_infraRuntime_ts
Expand All @@ -187,6 +198,9 @@ graph TD
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_templateRegistry_index_ts
module_src_host_generatedOAuthLifecycle_e2e_test_ts["src/host/generatedOAuthLifecycle.e2e.test.ts"]
package__ankhorage_studio -.-> module_src_host_generatedOAuthLifecycle_e2e_test_ts
module_src_host_generatedOAuthLifecycle_e2e_test_ts --> module_src_host_layout_templates_auth_oauth_ts
module_src_host_hostLifecycle_smoke_test_ts["src/host/hostLifecycle.smoke.test.ts"]
package__ankhorage_studio -.-> module_src_host_hostLifecycle_smoke_test_ts
module_src_host_hostLifecycle_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts
Expand Down Expand Up @@ -273,10 +287,16 @@ graph TD
module_src_host_layout_templates_auth_adapter_test_ts --> module_src_host_layout_templates_auth_adapter_ts
module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_adapter_ts
module_src_host_layout_templates_auth_callback_test_ts["src/host/layout/templates/auth/callback.test.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_callback_test_ts
module_src_host_layout_templates_auth_callback_test_ts --> module_src_host_layout_templates_auth_callback_ts
module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_callback_ts
module_src_host_layout_templates_auth_callback_ts --> module_src_host_layout_templates_utils_routes_ts
module_src_host_layout_templates_auth_callback_ts --> module_src_host_layout_utils_escapeStringLiteral_ts
module_src_host_layout_templates_auth_oauth_test_ts["src/host/layout/templates/auth/oauth.test.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_oauth_test_ts
module_src_host_layout_templates_auth_oauth_test_ts --> module_src_host_layout_templates_auth_oauth_ts
module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_oauth_ts
module_src_host_layout_templates_auth_oauth_ts --> module_src_host_layout_auth_resolveAuthLayoutPlan_ts
Expand Down Expand Up @@ -579,6 +599,13 @@ graph TD
module_src_projectAuthHealth_ts["src/projectAuthHealth.ts"]
package__ankhorage_studio -.-> module_src_projectAuthHealth_ts
module_src_projectAuthHealth_ts --> module_src_authSettings_ts
module_src_projectAuthRuntimeDiagnostics_test_ts["src/projectAuthRuntimeDiagnostics.test.ts"]
package__ankhorage_studio -.-> module_src_projectAuthRuntimeDiagnostics_test_ts
module_src_projectAuthRuntimeDiagnostics_test_ts --> module_src_projectAuthHealth_ts
module_src_projectAuthRuntimeDiagnostics_test_ts --> module_src_projectAuthRuntimeDiagnostics_ts
module_src_projectAuthRuntimeDiagnostics_ts["src/projectAuthRuntimeDiagnostics.ts"]
package__ankhorage_studio -.-> module_src_projectAuthRuntimeDiagnostics_ts
module_src_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthHealth_ts
module_src_projectIdentity_test_ts["src/projectIdentity.test.ts"]
package__ankhorage_studio -.-> module_src_projectIdentity_test_ts
module_src_projectIdentity_test_ts --> module_src_projectIdentity_ts
Expand All @@ -600,6 +627,11 @@ graph TD
package__ankhorage_studio -.-> module_src_projectSecretUsage_ts
module_src_projectWorkspaceContracts_ts["src/projectWorkspaceContracts.ts"]
package__ankhorage_studio -.-> module_src_projectWorkspaceContracts_ts
module_src_propertiesAuthoringModel_test_ts["src/propertiesAuthoringModel.test.ts"]
package__ankhorage_studio -.-> module_src_propertiesAuthoringModel_test_ts
module_src_propertiesAuthoringModel_test_ts --> module_src_index_ts
module_src_propertiesAuthoringModel_ts["src/propertiesAuthoringModel.ts"]
package__ankhorage_studio -.-> module_src_propertiesAuthoringModel_ts
module_src_root_test_ts["src/root.test.ts"]
package__ankhorage_studio -.-> module_src_root_test_ts
module_src_root_ts["src/root.ts"]
Expand Down Expand Up @@ -708,6 +740,11 @@ graph TD
module_src_studioAdminRouteModel_ts["src/studioAdminRouteModel.ts"]
package__ankhorage_studio -.-> module_src_studioAdminRouteModel_ts
module_src_studioAdminRouteModel_ts --> module_src_index_ts
module_src_studioRuntimeApi_test_ts["src/studioRuntimeApi.test.ts"]
package__ankhorage_studio -.-> module_src_studioRuntimeApi_test_ts
module_src_studioRuntimeApi_test_ts --> module_src_studioRuntimeApi_ts
module_src_studioRuntimeApi_ts["src/studioRuntimeApi.ts"]
package__ankhorage_studio -.-> module_src_studioRuntimeApi_ts
module_src_studioSelectionModel_knip_test_ts["src/studioSelectionModel.knip.test.ts"]
package__ankhorage_studio -.-> module_src_studioSelectionModel_knip_test_ts
module_src_studioSelectionModel_knip_test_ts --> module_src_studioSelectionModel_ts
Expand Down Expand Up @@ -800,6 +837,7 @@ graph TD
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthHealth_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectSecretApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_studioRuntimeApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_AuthAdminSession_tsx
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
Expand All @@ -814,8 +852,8 @@ graph TD
package__ankhorage_studio -.-> module_src_ui_admin_pages_PropertiesAdminPage_tsx
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_core_StudioContext_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_manifestState_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_propertiesAuthoringModel_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_ui_admin_adminPageUtils_ts
module_src_ui_admin_pages_SecretsAdminPage_test_ts["src/ui/admin/pages/SecretsAdminPage.test.ts"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_SecretsAdminPage_test_ts
module_src_ui_admin_pages_SecretsAdminPage_tsx["src/ui/admin/pages/SecretsAdminPage.tsx"]
Expand Down
Loading
Loading