You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-on to #143 (Package Entities). When packaging a notebook entry, the entities it references live in entry.days[].notes[].links[]. But links[] carries 18 possible resource types, not just entities. This issue scopes which of the other link types are package candidates, and which have webhook events (so they could also be packaged independently, à la #143 behavior 2).
The canonical link-type set
The set is a closed enum — EntryLink.type in the Benchling OpenAPI spec (test/openapi.yaml, EntryLink schema). All 18 tokens:
Note: many resources you'd expect are not linkable inline (no @-mention as an EntryLink): dna_oligo, rna_oligo, mixture, assay_run, assay_result, individual workflow_task. They reach notebooks via structured note parts / inventory tables instead.
What's actually in the wild (quilt-dtt tenant, 137 entries scanned)
Only three types observed: custom_entity (21), sql_dashboard (7, axdash_), link (120 — plain external URLs, no Benchling ID). So real-world density is low and entity-dominated, but the long tail matters for completeness.
Metadata-only pointers (low value to package as records): user, folder.
NOT packageable — no API exists: sql_dashboard / insights_dashboard. Dashboard definitions/results are only reachable via the read-only Warehouse (separate SQL surface), not REST. The closest path is manually creating a Dataset from a dashboard query (GET /datasets/{id}), which is not reachable from the axdash_ link ID. Recommend: skip dashboards; the entry already preserves the webURL deep link.
Uncertain: stage_entry (v2-alpha only), protocol (linkable but no read endpoint in stable spec) — verify against the deployed tenant's API version before relying on them.
Independently-eventable resources (could be packaged on their own, like #143 behavior 2)
Resources whose link type also has a creation/update webhook: entities (v2.entity.registered), entry, request, workflow task group. Inventory (container/box/plate/location) is packageable-on-reference but has no events, so it can only be captured via an entry, not independently.
For event-mapping completeness, these fire events but are not inline-linkable: assay_run (v2.assayRun.*), individual workflow_task (v2.workflowTask.*), workflow_output (v2.workflowOutput.*), automation transforms. (assay_result has a GET endpoint but no webhook.)
Summary
Follow-on to #143 (Package Entities). When packaging a notebook entry, the entities it references live in
entry.days[].notes[].links[]. Butlinks[]carries 18 possible resource types, not just entities. This issue scopes which of the other link types are package candidates, and which have webhook events (so they could also be packaged independently, à la #143 behavior 2).The canonical link-type set
The set is a closed enum —
EntryLink.typein the Benchling OpenAPI spec (test/openapi.yaml,EntryLinkschema). All 18 tokens:Note: many resources you'd expect are not linkable inline (no
@-mention as anEntryLink):dna_oligo,rna_oligo,mixture,assay_run,assay_result, individualworkflow_task. They reach notebooks via structured note parts / inventory tables instead.What's actually in the wild (quilt-dtt tenant, 137 entries scanned)
Only three types observed:
custom_entity(21),sql_dashboard(7,axdash_),link(120 — plain external URLs, no Benchling ID). So real-world density is low and entity-dominated, but the long tail matters for completeness.Package candidates — full table
typecustom_entitybfi_GET /custom-entities/{id}— yesv2.entity.registered(registration only)dna_sequenceseq_GET /dna-sequences/{id}— yesv2.entity.registeredaa_sequenceprtn_GET /aa-sequences/{id}— yesv2.entity.registeredbatchbat_GET /batches/{id}— yesv2.entity.registeredcontainercon_GET /containers/{id}— yes (inventory)boxbox_GET /boxes/{id}— yes (inventory)plateplt_GET /plates/{id}— yes (inventory)locationloc_GET /locations/{id}— yes (no webURL)entryetr_GET /entries/{id}— yesv2.entry.created,.updated.fields,.updated.reviewRecordrequestreq_GET /requests/{id}— yesv2.request.created,.updated.fields,.updated.statusworkflow(task group)wfgrp_GET /workflow-task-groups/{id}— yesv2.workflowTaskGroup.created,.mappingCompleted,.updated.watchersstage_entryetr_-likev2-alphaonly — uncertainv2-alpha.stageEntry.*protocoluserent_GET /users/{id}— metadata onlyfolder(legacy)lib_GET /folders/{id}— metadata onlysql_dashboard/insights_dashboardaxdash_link(external URL)webURLis the literal URLConclusions
custom_entity,dna_sequence,aa_sequence,batch,container,box,plate,location,entry,request,workflow(task group). Use:bulk-getvariants to batch-fetch.user,folder.sql_dashboard/insights_dashboard. Dashboard definitions/results are only reachable via the read-only Warehouse (separate SQL surface), not REST. The closest path is manually creating a Dataset from a dashboard query (GET /datasets/{id}), which is not reachable from theaxdash_link ID. Recommend: skip dashboards; the entry already preserves thewebURLdeep link.stage_entry(v2-alpha only),protocol(linkable but no read endpoint in stable spec) — verify against the deployed tenant's API version before relying on them.Independently-eventable resources (could be packaged on their own, like #143 behavior 2)
Resources whose link type also has a creation/update webhook: entities (
v2.entity.registered),entry,request,workflowtask group. Inventory (container/box/plate/location) is packageable-on-reference but has no events, so it can only be captured via an entry, not independently.For event-mapping completeness, these fire events but are not inline-linkable:
assay_run(v2.assayRun.*), individualworkflow_task(v2.workflowTask.*),workflow_output(v2.workflowOutput.*), automation transforms. (assay_resulthas a GET endpoint but no webhook.)Suggested scope
type → endpointdispatch map + dedup +:bulk-get.sql_dashboard/insights_dashboard/protocol/userfrom record-fetching; keep theirwebURLas a reference only.assay_run/assay_resultare a separate note-part mechanism, notlinks[].Grounding:
EntryLinkenum verified intest/openapi.yaml; tenant scan viaquilt-dtt(137 entries); event strings from docs.benchling.com/docs/events-reference.