@ai-matrx/records 0.30.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -49,6 +49,8 @@ __export(react_exports, {
49
49
  RULE_NODE_KINDS: () => RULE_NODE_KINDS,
50
50
  RULE_USES: () => RULE_USES,
51
51
  RecordsProvider: () => RecordsProvider,
52
+ STAGE_RULE_ENFORCEMENT: () => STAGE_RULE_ENFORCEMENT,
53
+ STAGE_RULE_ON_FAIL: () => STAGE_RULE_ON_FAIL,
52
54
  STORAGE_MODES: () => STORAGE_MODES,
53
55
  STORE_DOORS: () => STORE_DOORS,
54
56
  STORE_KNOBS: () => STORE_KNOBS,
@@ -189,6 +191,7 @@ var RULE_NODE_KINDS = [
189
191
  { node: "parent_field", evaluated_by: "W1-RULE-APPLY" },
190
192
  { node: "present", evaluated_by: "W1-RULE" },
191
193
  { node: "previous", evaluated_by: "PIPELINES" },
194
+ { node: "sibling_count", evaluated_by: "STAGE-RULES" },
192
195
  { node: "stage_count", evaluated_by: "PIPELINES" },
193
196
  { node: "sub", evaluated_by: "W1-RULE" }
194
197
  ];
@@ -516,7 +519,9 @@ var STORE_DOORS = [
516
519
  { name: "pin_agent_cells", args: "p_new jsonb, p_old jsonb, p_agent_keys text[]", returns: "jsonb", security: "invoker" },
517
520
  { name: "pipeline_board", args: "p_organization_id uuid, p_table_id uuid, p_measure text DEFAULT NULL::text", returns: "TABLE(stage_key text, stage_label text, stage_position integer, cards bigint, total numeric, wip_limit integer, over_limit boolean)", security: "definer" },
518
521
  { name: "pipeline_declare", args: "p_organization_id uuid, p_table_id uuid, p_spec jsonb", returns: "jsonb", security: "definer" },
522
+ { name: "pipeline_gate_preview", args: "p_organization_id uuid, p_table_id uuid, p_stage text, p_gate jsonb", returns: "jsonb", security: "definer" },
519
523
  { name: "pipeline_move", args: "p_organization_id uuid, p_record_id uuid, p_to text, p_also jsonb DEFAULT '{}'::jsonb, p_expected_version integer DEFAULT NULL::integer", returns: "jsonb", security: "definer" },
524
+ { name: "pipeline_pending", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "definer" },
520
525
  { name: "pipeline_read", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "definer" },
521
526
  { name: "pipeline_transition_refusal", args: "p_organization_id uuid, p_record_id uuid, p_to text", returns: "jsonb", security: "definer" },
522
527
  { name: "portal_admits", args: "p_organization_id uuid, p_user_id uuid DEFAULT NULL::uuid", returns: "boolean", security: "definer" },
@@ -583,6 +588,7 @@ var STORE_DOORS = [
583
588
  { name: "record_carrying_edges", args: "p_id uuid, p_data_class text, p_data jsonb, p_deleted_at timestamp with time zone", returns: "TABLE(container_id uuid, item_id uuid, edge_role text)", security: "invoker" },
584
589
  { name: "record_delete", args: "p_organization_id uuid, p_record_id uuid", returns: "timestamp with time zone", security: "definer" },
585
590
  { name: "record_history", args: "p_organization_id uuid, p_record_id uuid, p_limit integer DEFAULT 200, p_offset integer DEFAULT 0", returns: "TABLE(version integer, occurred_at timestamp with time zone, operation text, operation_label text, actor jsonb, changes jsonb, migration_id uuid, undoable boolean)", security: "definer" },
591
+ { name: "record_platform_keys", args: "", returns: "text[]", security: "invoker" },
586
592
  { name: "record_relation_edges", args: "p_organization_id uuid, p_id uuid, p_table_id uuid, p_data_class text, p_data jsonb, p_deleted_at timestamp with time zone", returns: "TABLE(target_id uuid, edge_role text, field_id uuid, ord integer)", security: "invoker" },
587
593
  { name: "record_reparent", args: "p_organization_id uuid, p_record_id uuid, p_parent_id uuid", returns: "void", security: "definer" },
588
594
  { name: "record_resolve", args: "p_organization_id uuid, p_id uuid", returns: "jsonb", security: "definer" },
@@ -591,6 +597,7 @@ var STORE_DOORS = [
591
597
  { name: "record_restore_version", args: "p_organization_id uuid, p_record_id uuid, p_version integer", returns: "jsonb", security: "definer" },
592
598
  { name: "record_restore_version", args: "p_organization_id uuid, p_record_id uuid, p_version integer, p_author jsonb", returns: "jsonb", security: "definer" },
593
599
  { name: "record_scope_context", args: "p_organization_id uuid, p_record_id uuid, p_relations integer DEFAULT 12, p_history integer DEFAULT 15, p_siblings integer DEFAULT 8", returns: "jsonb", security: "definer" },
600
+ { name: "record_stage_pending", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "definer" },
594
601
  { name: "record_state_as_of", args: "p_record_id uuid, p_at timestamp with time zone", returns: "TABLE(state jsonb, replayed boolean)", security: "definer" },
595
602
  { name: "record_table", args: "p_organization_id uuid, p_record_id uuid", returns: "uuid", security: "definer" },
596
603
  { name: "record_update", args: "p_organization_id uuid, p_record_id uuid, p_patch jsonb, p_expected_version integer DEFAULT NULL::integer", returns: "integer", security: "definer" },
@@ -654,6 +661,8 @@ var STORE_DOORS = [
654
661
  { name: "size_refusal", args: "p_organization_id uuid, p_data jsonb", returns: "text", security: "invoker" },
655
662
  { name: "source_next_pointer", args: "p_sources jsonb", returns: "text", security: "invoker" },
656
663
  { name: "source_pointer", args: "p_sources jsonb, p_source jsonb", returns: "text", security: "invoker" },
664
+ { name: "stage_rule_enforcement", args: "p_organization_id uuid", returns: "text", security: "invoker" },
665
+ { name: "stage_rule_on_fail_kinds", args: "", returns: "TABLE(behaviour text, note text)", security: "invoker" },
657
666
  { name: "stamp_value_envelopes", args: "p_data jsonb, p_actor text, p_on_behalf_of text, p_at timestamp with time zone", returns: "jsonb", security: "invoker" },
658
667
  { name: "storage_modes", args: "", returns: "text[]", security: "invoker" },
659
668
  { name: "store_is_open", args: "p_organization_id uuid DEFAULT NULL::uuid", returns: "boolean", security: "invoker" },
@@ -664,6 +673,7 @@ var STORE_DOORS = [
664
673
  { name: "subscriptions", args: "p_organization_id uuid, p_table_id uuid DEFAULT NULL::uuid", returns: "TABLE(rule_id uuid, name text, table_id uuid, saved_view_id uuid, cadence text, schedule text, quiet_hours jsonb, channel text, recipient_user_id uuid, event_key text, muted boolean, mine boolean, i_may_mute boolean, last_sent_at timestamp with time zone, next_digest_at timestamp with time zone)", security: "definer" },
665
674
  { name: "table_capacity", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "definer" },
666
675
  { name: "table_carries_its_rows", args: "p_user_id uuid, p_table_id uuid, p_required permission_level DEFAULT 'viewer'::permission_level", returns: "boolean", security: "definer" },
676
+ { name: "table_column_source", args: "p_organization_id uuid, p_table_id uuid", returns: "text", security: "invoker" },
667
677
  { name: "table_contents", args: "p_organization_id uuid, p_table_id uuid", returns: "TABLE(record_id uuid, kind text, goes_at integer)", security: "invoker" },
668
678
  { name: "table_declare", args: "p_organization_id uuid, p_spec jsonb", returns: "uuid", security: "definer" },
669
679
  { name: "table_has_a_visible_record", args: "p_user uuid, p_organization_id uuid, p_table_id uuid", returns: "boolean", security: "definer" },
@@ -678,6 +688,7 @@ var STORE_DOORS = [
678
688
  { name: "tables_at_home", args: "p_organization_id uuid, p_home_ids uuid[]", returns: "TABLE(table_id uuid, home_record_id uuid, kind text)", security: "definer" },
679
689
  { name: "tables_described_without_asking", args: "", returns: "TABLE(function_name text, identity_args text, why text)", security: "invoker" },
680
690
  { name: "trg_associations_bump_visibility", args: "", returns: "trigger", security: "definer" },
691
+ { name: "undeclared_keys", args: "p_organization_id uuid, p_table_id uuid, p_data jsonb", returns: "text[]", security: "invoker" },
681
692
  { name: "validate_custom_fields", args: "p_token text, p_organization_id uuid, p_values jsonb", returns: "void", security: "invoker" },
682
693
  { name: "validate_value_envelope", args: "p_organization_id uuid, p_fields custom.record[], p_data jsonb", returns: "void", security: "invoker" },
683
694
  { name: "validate_values", args: "p_organization_id uuid, p_fields custom.record[], p_values jsonb, p_record_type text DEFAULT NULL::text", returns: "void", security: "invoker" },
@@ -778,6 +789,7 @@ var STORE_KNOBS = [
778
789
  { key: "sandbox_message_bytes", value: "65536", type: "integer" },
779
790
  { key: "sandbox_org_components", value: "true", type: "boolean" },
780
791
  { key: "signup_provisioning_guard", value: "false", type: "boolean" },
792
+ { key: "stage_rule_enforcement", value: '"refuse"', type: "enum" },
781
793
  { key: "system_enabled", value: "false", type: "boolean" },
782
794
  { key: "table_record_ceiling", value: "150000", type: "integer" },
783
795
  { key: "value_max_bytes", value: "100000", type: "integer" },
@@ -787,19 +799,20 @@ var STORE_REFUSAL_CODES = [
787
799
  { code: "02000", raised_by: "_checklist_instantiate,checklist_declare,checklist_run,checklist_step_complete,checklist_step_refusal,checklist_template_shape,conversation_scope_bind,dashboard_delete,dashboard_run,doc_letterhead,doc_render_body,doc_render_document,doc_render_read,doc_sign,doc_signature_intact,doc_signature_read,doc_template_delete,doc_template_read,doc_template_save,enrich_pin,entity_field_retire,entity_field_update,entity_record_read,entity_value_write,external_history_event,external_rows,external_stub_upsert,external_writes_set,io_restore,migrate_delete,migrate_extract_parent,migrate_merge,migrate_reclass,migrate_rename,migrate_reparent,migrate_retype,migrate_split,migrate_undo,organization_clear,portal_card,portal_declare,portal_invite,portal_preview,portal_principal_bind,portal_revoke,read_record,record_delete,record_restore,record_restore_preview,record_table,record_update,relation_uncarry,share_access,share_grant,share_lane_set,share_people,share_revoke,sign_request_cancel,sign_request_create,sign_request_remind,sign_request_unchanged,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_assign,work_record_states,work_set_state" },
788
800
  { code: "0A000", raised_by: "checklist_step_complete,external_rows,external_source_declare,external_write_through,promote_field,promoted_index_expr,promoted_query_sql,promoted_read,rule_eval,work_assign" },
789
801
  { code: "22003", raised_by: "context_resolve" },
790
- { code: "22004", raised_by: "_entity_custom_fields_guard,_value_envelope,actor_word,agg_assert_key,agg_sql,anon_capture,anon_token_issue,anon_write,assert_client_may_reach,booking_declare,capture_submit,checklist_declare,context_resolve,dashboard_block_normalize,dashboard_declare,dashboard_window_sql,doc_render_write,doc_sign,doc_signature_write,doc_template_save,enrich_land,enrich_normalize,external_history_event,external_rows,external_source_declare,external_stub_upsert,external_write_through,external_writes_set,field_history,form_declare,form_submit,home_add,io_comment_write,io_import_begin,io_infer_column,io_outbox_drain,io_restore,migrate_choice_keys,migrate_purge,migrate_reclass,migrate_split,migrate_undo,organization_clear,organization_contents,pipeline_declare,portal_declare,portal_invite,portal_principal_bind,provenance_retention_days,provenance_write,query_across_homes,query_by_coordinates,query_rollup,record_delete,record_reparent,record_resolve,record_restore,record_update,record_write,record_write_many,relation_carry,relation_own,rule_declare,share_grant,sign_request_create,sign_request_sign,subscription_declare,table_declare,value_restore,view_declare,work_approval_decide,work_approval_request,work_template_declare" },
802
+ { code: "22004", raised_by: "_entity_custom_fields_guard,_value_envelope,actor_word,agg_assert_key,agg_sql,anon_capture,anon_token_issue,anon_write,assert_client_may_reach,booking_declare,capture_submit,checklist_declare,context_resolve,dashboard_block_normalize,dashboard_declare,dashboard_window_sql,doc_render_write,doc_sign,doc_signature_write,doc_template_save,enrich_land,enrich_normalize,external_history_event,external_rows,external_source_declare,external_stub_upsert,external_write_through,external_writes_set,field_history,form_declare,form_submit,home_add,io_comment_write,io_import_begin,io_infer_column,io_outbox_drain,io_restore,migrate_choice_keys,migrate_purge,migrate_reclass,migrate_split,migrate_undo,organization_clear,organization_contents,pipeline_declare,pipeline_gate_preview,portal_declare,portal_invite,portal_principal_bind,provenance_retention_days,provenance_write,query_across_homes,query_by_coordinates,query_rollup,record_delete,record_reparent,record_resolve,record_restore,record_update,record_write,record_write_many,relation_carry,relation_own,rule_declare,share_grant,sign_request_create,sign_request_sign,subscription_declare,table_declare,value_restore,view_declare,work_approval_decide,work_approval_request,work_template_declare" },
791
803
  { code: "22007", raised_by: "dashboard_window_sql" },
792
804
  { code: "22012", raised_by: "rule_eval" },
793
805
  { code: "22023", raised_by: "_booking_availability,_entity_custom_fields_guard,_value_envelope,_work_shape_guard,actor_word,agg_assert_key,agg_sql,anon_token_issue,booking_declare,containment_parent,dashboard_block_normalize,dashboard_window_sql,doc_render_body,doc_render_write,doc_signature_write,enrich_declare,enrich_land,enrich_normalize,enrich_pin,entity_value_write,external_history_event,external_source_declare,external_stub_upsert,external_write_through,field_history,io_export,io_import_begin,io_import_finish,io_import_plan,io_import_report,io_proposal_accept,migrate_merge,migrate_reclass,my_levels,organization_clear,page_size,pin_agent_cells,pipeline_move,portal_declare,provenance_write,query_by_coordinates,query_rollup,record_update,record_write_many,relation_carry,rule_eval,rule_members,share_grant,share_lane_set,sign_request_create,sign_request_sign,subscription_declare,table_rules,visibility_as_of,work_approval_request,work_list,work_slot_hold" },
794
806
  { code: "23503", raised_by: "_booking_availability,_checklist_instantiate,_containment_guard,_field_document_for,_pipeline_stage_key,_record_rule_uses,agg_digest_assemble,anon_publish,anon_rate_take,anon_token_issue,anon_write,assert_organization_wall,booking_cancel,booking_confirm,booking_declare,booking_hold,booking_reschedule,capture_publish,checklist_declare,checklist_steps_table,comment_write,dashboard_declare,delete_rule,doc_sign,doc_template_save,enrich_declare,enrich_due,enrich_land,form_declare,form_submit,home_add,inbound_declare,inbound_mail_land,inbound_set,io_comment_write,io_import_begin,io_import_finish,io_import_report,io_import_rows,io_proposal_accept,migrate_demote,migrate_promote,pipeline_board,pipeline_declare,pipeline_move,pipeline_read,pipeline_transition_refusal,promote_field,promote_table,record_applicability,record_reparent,relation_carry,relation_own,resolve_first_match,rule_applies,rule_declare,rule_eval,rule_members,rule_run,sign_request_create,subscription_mute,subscription_preview,view_declare,work_set_state,work_take_assignment,work_template_instantiate" },
795
807
  { code: "23505", raised_by: "_unique_rule_holds,doc_sign,doc_signature_write,entity_field_declare,field_declare,home_add,inbound_declare,io_proposal_accept,relation_carry,relation_own,share_grant,sign_request_cancel,sign_request_create,work_approval_decide,work_slot_hold" },
796
- { code: "23514", raised_by: "_checklist_instantiate,_checklist_step_guard,_containment_guard,_dated_values_guard,_derived_fields,_entity_custom_fields_guard,_field_class_guard,_field_document_for,_field_shape_guard,_field_type_parity_guard,_merge_field_shape_guard,_merge_field_temporal_guard,_promoted_field_cap_guard,_record_rule_uses,_resolve_choice_words,_rule_shape_guard,_rule_topology_guard,_store_relation_edge_names_its_field,_table_shape_guard,_value_envelope,_work_shape_guard,_workdoors_approval_guard,assert_entity_is_organization_scoped,capture_publish,capture_sheet_declare,checklist_declare,checklist_step_complete,doc_sign,doc_signature_write,doc_template_save,entity_field_declare,entity_field_retire,entity_field_update,entity_records_find,entity_table,field_declare,field_retire,field_update,home_add,io_import_rows,migrate_merge,relation_carry,relation_own,sign_request_create,sign_request_sign,table_declare,validate_value_envelope,validate_values,work_set_state,work_slots_declare,work_take_assignment,work_template_instantiate" },
808
+ { code: "23514", raised_by: "_checklist_instantiate,_checklist_step_guard,_claimed_column_guard,_containment_guard,_dated_values_guard,_derived_fields,_entity_custom_fields_guard,_field_class_guard,_field_document_for,_field_shape_guard,_field_type_parity_guard,_merge_field_shape_guard,_merge_field_temporal_guard,_promoted_field_cap_guard,_record_rule_uses,_resolve_choice_words,_rule_shape_guard,_rule_topology_guard,_store_relation_edge_names_its_field,_table_columns_word_guard,_table_shape_guard,_undeclared_key_guard,_value_envelope,_work_shape_guard,_workdoors_approval_guard,assert_entity_is_organization_scoped,capture_publish,capture_sheet_declare,checklist_declare,checklist_step_complete,doc_sign,doc_signature_write,doc_template_save,entity_field_declare,entity_field_retire,entity_field_update,entity_records_find,entity_table,field_declare,field_retire,field_update,home_add,io_import_rows,migrate_merge,relation_carry,relation_own,sign_request_create,sign_request_sign,table_declare,validate_value_envelope,validate_values,work_set_state,work_slots_declare,work_take_assignment,work_template_instantiate" },
797
809
  { code: "40001", raised_by: "has_visibility_at" },
798
810
  { code: "42501", raised_by: "_doc_render_immutable,_doc_signature_immutable,_field_definition_write,_field_write_door,_rule_definition_write,_store_door,anon_capture,anon_inbound_land,anon_publish,anon_token_issue,anon_token_verify,anon_write,assert_client_may_change,assert_client_may_open,assert_client_may_reach,assert_may_know_table,assert_organization_admin,assert_store_door,booking_confirm,booking_declare,booking_hold,capture_submit,checklist_run,comment_write,conversation_scope_bind,conversation_scope_unbind,enrich_declare,enrich_due,enrich_land,enrich_normalize,entity_field_declare,entity_field_retire,entity_field_update,entity_value_write,external_write_through,form_declare,form_submit,inbound_mail_land,io_comment_resolve,io_comment_write,io_import_begin,io_import_finish,io_restore,migrate_purge,migrate_reclass,my_levels,organization_clear,portal_declare,portal_invitation,portal_invite,portal_principal_bind,promote_table,query_visibility_parity,read_record,read_records,record_table,share_grant,subscription_mute,subscription_preview,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_person" },
799
811
  { code: "42703", raised_by: "entity_table,portal_declare" },
800
812
  { code: "53400", raised_by: "anon_rate_take,delete_cascade_closure,enrich_due,enrich_land,promote_field" },
801
813
  { code: "54001", raised_by: "record_delete" },
802
- { code: "PT409", raised_by: "record_update" }
814
+ { code: "PT409", raised_by: "record_update" },
815
+ { code: "PT428", raised_by: "_record_rule_uses" }
803
816
  ];
804
817
  var ENTITY_TOKENS = [
805
818
  "access_delta_probe",
@@ -1463,6 +1476,7 @@ var ENTITY_TOKENS = [
1463
1476
  "plan_node_artifact",
1464
1477
  "plan_node_step",
1465
1478
  "plan_profile",
1479
+ "platform_action_request",
1466
1480
  "platform_actor_session",
1467
1481
  "platform_actor_token",
1468
1482
  "platform_actor_token_event",
@@ -1964,6 +1978,14 @@ var DOORS = {
1964
1978
  pipelineTransitionRefusal: "pipeline_transition_refusal",
1965
1979
  pipelineMove: "pipeline_move",
1966
1980
  tableStageField: "table_stage_field",
1981
+ // STAGE-RULES. A gate can refuse or it can hand the change to the approvals queue; the
1982
+ // closed list is the store's, the knob is the organization's, and what is WAITING on a
1983
+ // card has to be askable or a card that did not move looks like a card nobody dragged.
1984
+ stageRuleOnFailKinds: "stage_rule_on_fail_kinds",
1985
+ stageRuleEnforcement: "stage_rule_enforcement",
1986
+ recordStagePending: "record_stage_pending",
1987
+ pipelinePending: "pipeline_pending",
1988
+ pipelineGatePreview: "pipeline_gate_preview",
1967
1989
  ruleMembers: "rule_members",
1968
1990
  ruleMembership: "rule_membership",
1969
1991
  ruleRun: "rule_run",
@@ -1985,6 +2007,10 @@ var DOORS = {
1985
2007
  // VISITOR's three (`booking_public`, `booking_hold`, `booking_confirm`) are
1986
2008
  // deliberately absent: they are server-lane and a browser never calls them.
1987
2009
  bookings: "bookings",
2010
+ // The OWNER's side of a booking page, and the door that had no client method at
2011
+ // all until 2026-09-21: without it the only way to get a booking page was to ask
2012
+ // an agent, which made the agent the ONLY path rather than the faster one.
2013
+ bookingDeclare: "booking_declare",
1988
2014
  // PRODUCTS row 9 — "pull my spreadsheet in". W4-IO built `io_import_open` and
1989
2015
  // `io_import_rows`; lane IMPORT gave a run an IDENTITY (the file's sha-256, so
1990
2016
  // a re-import doubles nothing), a duplicate key, a policy, per-row outcomes
@@ -2117,6 +2143,13 @@ var DOORS = {
2117
2143
  // the summary it would send right now without sending it.
2118
2144
  subscriptionDeclare: "subscription_declare",
2119
2145
  subscriptionPreview: "subscription_preview",
2146
+ // A SUBSCRIPTION IS OVER A SAVED VIEW, so a person who has never saved one has
2147
+ // nothing to subscribe to. These two are the saved-view pair (lane DIGESTS'
2148
+ // `digests_a_saved_view_has_a_door.sql`), unreachable from this client until
2149
+ // 2026-09-21: `views` lists this Table's, `viewDeclare` writes one. A LIST IS A
2150
+ // DOOR, never a grant on `platform.saved_view` behind it.
2151
+ views: "views",
2152
+ viewDeclare: "view_declare",
2120
2153
  // The cadence CATALOGUE a person's screen may ask for. `agg_subscription_cadences`
2121
2154
  // above is the notifier's own and holds no client grant; this door delegates to
2122
2155
  // it, so a picker and the digest runner can never offer different words.
@@ -2282,7 +2315,17 @@ var BY_SQLSTATE = {
2282
2315
  // the grants not copied, land here.
2283
2316
  PGRST202: "store_not_served",
2284
2317
  PGRST205: "store_not_served",
2285
- PGRST301: "door"
2318
+ PGRST301: "door",
2319
+ // PT428 — NOT A FAILURE, and the release gate's live census is what found it
2320
+ // missing: the store raises it and this package answered `internal`, which is
2321
+ // the one classification that tells a screen nothing. A stage gate whose
2322
+ // `on_fail` is `require_approval` files the request and leaves the record
2323
+ // where it was; the transaction is rolled back to the pipeline's own block, so
2324
+ // "nothing was written" is a fact rather than a promise. Landed by lane
2325
+ // STAGE-RULES; mapped here by STAGE-RULES-2 the day after, when the census
2326
+ // caught it — the sixth time that census has been the thing that found a
2327
+ // refusal class rather than a person guessing one.
2328
+ PT428: "needs_approval"
2286
2329
  };
2287
2330
  var MAPPED_SQLSTATES = Object.keys(BY_SQLSTATE);
2288
2331
  function parseDetail(details) {
@@ -2461,16 +2504,17 @@ function createRecordsClient(config) {
2461
2504
  if (!door.ok) return err(door.error);
2462
2505
  const { document, hidden } = unfold(door.data);
2463
2506
  let computed = [];
2507
+ let computedUnavailable = null;
2464
2508
  if (withComputed) {
2465
2509
  const provenance = await callDoor(
2466
2510
  DOORS.computedProvenance,
2467
2511
  { p_organization_id: org, p_record_id: record_id },
2468
2512
  "recordRead.computed"
2469
2513
  );
2470
- if (!provenance.ok) return err(provenance.error);
2471
- computed = provenance.data ?? [];
2514
+ if (provenance.ok) computed = provenance.data ?? [];
2515
+ else computedUnavailable = provenance.error;
2472
2516
  }
2473
- return ok({ record_id, document, hidden, computed });
2517
+ return ok({ record_id, document, hidden, computed, computedUnavailable });
2474
2518
  },
2475
2519
  async list({ table_id, limit = 50, offset = 0 }) {
2476
2520
  const door = await callDoor(
@@ -2809,6 +2853,41 @@ function createRecordsClient(config) {
2809
2853
  "tableStageField"
2810
2854
  );
2811
2855
  },
2856
+ async stageRuleOnFailKinds() {
2857
+ return callDoor(
2858
+ DOORS.stageRuleOnFailKinds,
2859
+ {},
2860
+ "stageRuleOnFailKinds"
2861
+ );
2862
+ },
2863
+ async stageRuleEnforcement() {
2864
+ return callDoor(
2865
+ DOORS.stageRuleEnforcement,
2866
+ { p_organization_id: org },
2867
+ "stageRuleEnforcement"
2868
+ );
2869
+ },
2870
+ async recordStagePending({ record_id }) {
2871
+ return callDoor(
2872
+ DOORS.recordStagePending,
2873
+ { p_organization_id: org, p_record_id: record_id },
2874
+ "recordStagePending"
2875
+ );
2876
+ },
2877
+ async pipelinePending({ table_id }) {
2878
+ return callDoor(
2879
+ DOORS.pipelinePending,
2880
+ { p_organization_id: org, p_table_id: table_id },
2881
+ "pipelinePending"
2882
+ );
2883
+ },
2884
+ async pipelineGatePreview({ table_id, stage, gate }) {
2885
+ return callDoor(
2886
+ DOORS.pipelineGatePreview,
2887
+ { p_organization_id: org, p_table_id: table_id, p_stage: stage, p_gate: gate },
2888
+ "pipelineGatePreview"
2889
+ );
2890
+ },
2812
2891
  async ruleMembers({ rule_id }) {
2813
2892
  return callDoor(
2814
2893
  DOORS.ruleMembers,
@@ -2837,6 +2916,30 @@ function createRecordsClient(config) {
2837
2916
  "bookings"
2838
2917
  );
2839
2918
  },
2919
+ async bookingDeclare(args) {
2920
+ return callDoor(
2921
+ DOORS.bookingDeclare,
2922
+ {
2923
+ p_organization_id: org,
2924
+ p_table_id: args.table_id,
2925
+ p_title: args.title,
2926
+ p_questions: args.questions,
2927
+ // AN EMPTY OBJECT IS NOT A MISTAKE. The store owns every default, so a
2928
+ // page declared with no availability comes back Monday-to-Friday,
2929
+ // nine-to-five, in the organization's own zone — and the screen draws
2930
+ // what came BACK rather than what it sent.
2931
+ p_availability: args.availability ?? {},
2932
+ p_presentation: args.presentation ?? {},
2933
+ p_submission_cap: args.submission_cap ?? null,
2934
+ p_quarantine_rule_id: args.quarantine_rule_id ?? null,
2935
+ p_notify_rule_id: args.notify_rule_id ?? null,
2936
+ p_form_id: args.form_id ?? null,
2937
+ p_slug: args.slug ?? null,
2938
+ p_home_id: args.home_id ?? null
2939
+ },
2940
+ "bookingDeclare"
2941
+ );
2942
+ },
2840
2943
  async formDeclare(args) {
2841
2944
  return callDoor(
2842
2945
  DOORS.formDeclare,
@@ -3261,6 +3364,20 @@ function createRecordsClient(config) {
3261
3364
  "subscriptionPreview"
3262
3365
  );
3263
3366
  },
3367
+ async views(args) {
3368
+ return callDoor(
3369
+ DOORS.views,
3370
+ { p_organization_id: org, p_table_id: args?.table_id ?? null },
3371
+ "views"
3372
+ );
3373
+ },
3374
+ async viewDeclare({ table_id, spec }) {
3375
+ return callDoor(
3376
+ DOORS.viewDeclare,
3377
+ { p_organization_id: org, p_table_id: table_id, p_spec: spec },
3378
+ "viewDeclare"
3379
+ );
3380
+ },
3264
3381
  async subscriptionMute({ rule_id, muted }) {
3265
3382
  return callDoor(
3266
3383
  DOORS.subscriptionMute,
@@ -4490,6 +4607,8 @@ function looksLikeAnId(value) {
4490
4607
 
4491
4608
  // src/pipeline.ts
4492
4609
  var PIPELINE_RULE_KINDS = ["moves", "requires", "who", "limit", "entry"];
4610
+ var STAGE_RULE_ON_FAIL = ["refuse", "require_approval"];
4611
+ var STAGE_RULE_ENFORCEMENT = ["refuse", "warn"];
4493
4612
  function mayDrag(level) {
4494
4613
  return level === "editor" || level === "admin" || level === "owner";
4495
4614
  }