@ai-matrx/records 0.30.0 → 0.36.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",
@@ -2282,7 +2304,17 @@ var BY_SQLSTATE = {
2282
2304
  // the grants not copied, land here.
2283
2305
  PGRST202: "store_not_served",
2284
2306
  PGRST205: "store_not_served",
2285
- PGRST301: "door"
2307
+ PGRST301: "door",
2308
+ // PT428 — NOT A FAILURE, and the release gate's live census is what found it
2309
+ // missing: the store raises it and this package answered `internal`, which is
2310
+ // the one classification that tells a screen nothing. A stage gate whose
2311
+ // `on_fail` is `require_approval` files the request and leaves the record
2312
+ // where it was; the transaction is rolled back to the pipeline's own block, so
2313
+ // "nothing was written" is a fact rather than a promise. Landed by lane
2314
+ // STAGE-RULES; mapped here by STAGE-RULES-2 the day after, when the census
2315
+ // caught it — the sixth time that census has been the thing that found a
2316
+ // refusal class rather than a person guessing one.
2317
+ PT428: "needs_approval"
2286
2318
  };
2287
2319
  var MAPPED_SQLSTATES = Object.keys(BY_SQLSTATE);
2288
2320
  function parseDetail(details) {
@@ -2461,16 +2493,17 @@ function createRecordsClient(config) {
2461
2493
  if (!door.ok) return err(door.error);
2462
2494
  const { document, hidden } = unfold(door.data);
2463
2495
  let computed = [];
2496
+ let computedUnavailable = null;
2464
2497
  if (withComputed) {
2465
2498
  const provenance = await callDoor(
2466
2499
  DOORS.computedProvenance,
2467
2500
  { p_organization_id: org, p_record_id: record_id },
2468
2501
  "recordRead.computed"
2469
2502
  );
2470
- if (!provenance.ok) return err(provenance.error);
2471
- computed = provenance.data ?? [];
2503
+ if (provenance.ok) computed = provenance.data ?? [];
2504
+ else computedUnavailable = provenance.error;
2472
2505
  }
2473
- return ok({ record_id, document, hidden, computed });
2506
+ return ok({ record_id, document, hidden, computed, computedUnavailable });
2474
2507
  },
2475
2508
  async list({ table_id, limit = 50, offset = 0 }) {
2476
2509
  const door = await callDoor(
@@ -2809,6 +2842,41 @@ function createRecordsClient(config) {
2809
2842
  "tableStageField"
2810
2843
  );
2811
2844
  },
2845
+ async stageRuleOnFailKinds() {
2846
+ return callDoor(
2847
+ DOORS.stageRuleOnFailKinds,
2848
+ {},
2849
+ "stageRuleOnFailKinds"
2850
+ );
2851
+ },
2852
+ async stageRuleEnforcement() {
2853
+ return callDoor(
2854
+ DOORS.stageRuleEnforcement,
2855
+ { p_organization_id: org },
2856
+ "stageRuleEnforcement"
2857
+ );
2858
+ },
2859
+ async recordStagePending({ record_id }) {
2860
+ return callDoor(
2861
+ DOORS.recordStagePending,
2862
+ { p_organization_id: org, p_record_id: record_id },
2863
+ "recordStagePending"
2864
+ );
2865
+ },
2866
+ async pipelinePending({ table_id }) {
2867
+ return callDoor(
2868
+ DOORS.pipelinePending,
2869
+ { p_organization_id: org, p_table_id: table_id },
2870
+ "pipelinePending"
2871
+ );
2872
+ },
2873
+ async pipelineGatePreview({ table_id, stage, gate }) {
2874
+ return callDoor(
2875
+ DOORS.pipelineGatePreview,
2876
+ { p_organization_id: org, p_table_id: table_id, p_stage: stage, p_gate: gate },
2877
+ "pipelineGatePreview"
2878
+ );
2879
+ },
2812
2880
  async ruleMembers({ rule_id }) {
2813
2881
  return callDoor(
2814
2882
  DOORS.ruleMembers,
@@ -4490,6 +4558,8 @@ function looksLikeAnId(value) {
4490
4558
 
4491
4559
  // src/pipeline.ts
4492
4560
  var PIPELINE_RULE_KINDS = ["moves", "requires", "who", "limit", "entry"];
4561
+ var STAGE_RULE_ON_FAIL = ["refuse", "require_approval"];
4562
+ var STAGE_RULE_ENFORCEMENT = ["refuse", "warn"];
4493
4563
  function mayDrag(level) {
4494
4564
  return level === "editor" || level === "admin" || level === "owner";
4495
4565
  }