@ai-matrx/records 0.58.14 → 0.58.16

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,82 @@
1
1
  # Changelog — @ai-matrx/records
2
2
 
3
+ ## 0.58.16
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/records/v0.58.15..npm/records/v0.58.16 -- apps/shared/records`).
7
+ No source changes intended and no consumer action required.
8
+
9
+ ## Unreleased — lane SUITE-HEALTH-3 (2026-09-25)
10
+
11
+ * **Retired: `custom.context_resolve(p_organization_id, p_bindings, p_scope_slug)`** — the
12
+ three-argument overload was a "retired shape" whose whole body forwarded to
13
+ `custom.context_resolve(p_bindings)`, ignoring its organization and slug. It is revoked, removed
14
+ from `platform.client_callable_door` and dropped (inverse kept:
15
+ `matrx-frontend/migrations/inverse/suitehealth3_the_retired_context_resolve_shape_is_gone_down.sql`).
16
+ `store.generated.ts` no longer lists it. *Consumer action:* none — every caller already uses the
17
+ one-argument door (`RecordStore.context_resolve`).
18
+ * **`client.tablesLiveWhere` / `custom.where_tables_live` answers `record` for an older table the
19
+ person may not open** (the older store's own read rule for her, or the one ladder on its copy) —
20
+ exactly what an id nobody minted answers — so the door is no longer an existence oracle. A person
21
+ who may open the table is answered as before. *Consumer action:* none; `record` then leads to the
22
+ store's own not-found answer, as for any unknown id.
23
+ * **The copy fence's refusal names the table only to a caller `custom.assert_client_may_open`
24
+ admits to the copy** (it used to name it to every caller with no signed-in person, including a
25
+ visitor's public form); everyone else reads "this table". The write is refused either way.
26
+ * **`custom.read_records_in_view_order` pages through `custom.page_size`** — a page past the
27
+ organization's ceiling (default 1000) or below one row is refused with 22023 and the ceiling in
28
+ DETAIL, instead of being silently clamped to 500 or 1. *Consumer action:* none for records-ui's
29
+ hand-order grid, which never asks outside 1..500.
30
+
31
+ ## 0.58.15 (2026-09-25 — tagged by the auto release, published; changelog set by PUBLISH-SWEEP-8)
32
+
33
+ Carries every entry below that was Unreleased at the tag (npm/records/v0.58.15 = 5f4025632f).
34
+
35
+ ### Lane RECORDS-ONE-DOOR (2026-09-25)
36
+
37
+ * **`client.tablesLiveWhere({ table_ids })`** — the typed `custom.where_tables_live` cutover
38
+ door. It answers which store currently receives writes for every supplied table id. It is not
39
+ `tableHome`: copied older/store tables share an id during COPY mode, and the organization's
40
+ switch decides their writable store. *Consumer action:* hosts that select an older versus record
41
+ write path must call this method instead of reaching the `custom` schema directly.
42
+
43
+ ### Lane CONTEXT-VALUES-NAMED-2 (2026-09-25)
44
+
45
+ * **`custom.resolve_context` takes `p_system_item_refs text[] DEFAULT NULL`** — the System items the
46
+ turn names (ids or keys); the door reads only those, and NULL or empty reads none (it used to hand
47
+ back every deliverable System item). `store.generated.ts` regenerated.
48
+ *Consumer action:* none for a browser — the door is the server's agent-context path; a caller that
49
+ wants the platform's default System items passes the list from the knob
50
+ `context/system_item_defaults`.
51
+
52
+ ### Lane VIEW-STATE-PERSONAL (2026-09-25)
53
+
54
+ * **`viewLookRead({ table_id })` / `viewLookSet({ table_id, view_id, look })`** — the caller's own
55
+ look at each saved view of a table (`custom.view_look_read` / `custom.view_look_set`, viewer): the
56
+ view settings one person chose while looking, kept for her alone. `look: null` is "Reset to view".
57
+ The shared view row is never written by these doors.
58
+ * **`viewDeclare` on an EXISTING view now needs editor on the table** (or the view is the caller's
59
+ own and is not the table's default) — "Save to view"; a viewer is refused by name (`42501`,
60
+ *"Only someone who can edit this table saves a change onto its view … for everyone"*). A NEW view
61
+ is unchanged (viewer). **`viewRecordOrderSet` needs editor** (a hand-set order is the view's sort).
62
+ *Consumer action:* send a person's picks through `viewLookSet`; call `viewDeclare` with a
63
+ `view_id` only on an explicit save. `store.generated.ts` regenerated (707 doors).
64
+
65
+ ### Lane STORE-READ-PERF-2 (2026-09-25)
66
+
67
+ * **The read doors ask the ladder once per class of records, not once per record.** No door's
68
+ name-keyed answer moved (proved byte-identical on the dev clone and on production); they are
69
+ faster. On production, server-side: the context lookup over AI Matrx → Feature (17 scopes)
70
+ 199 → 142 ms, a 200-row grid page 356 → 96 ms, `listByIds` of 200 rows 879 → 134 ms.
71
+ * **`read_record(..., p_by_id: true)` and `listByIds` / `custom.read_records_by_ids` by id now key
72
+ EVERY declared Field by its id**, exactly as `list` / `read_records` / `read_records_matching`
73
+ always did (DOOR-N-5: "name-keyed by default, id-keyed on request"). They used to rename only
74
+ the Fields the reader could NOT see, so one record asked for by id came back keyed by name from
75
+ the single-record door and by id from the page door, and its keys changed with the reader's
76
+ rung. `_hidden`, `_choices`, `_alternates` and `_retired` keep the keys they had.
77
+ *Consumer action:* none for this package's own calls (they read name-keyed). A caller that asked
78
+ by id and then read values by NAME was depending on the defect and should ask by name.
79
+
3
80
  ## 0.58.14
4
81
 
5
82
  Automatic changed-only republish (docs/metadata drift since the last tag — see
@@ -3853,7 +3853,9 @@ var STORE_DOORS = [
3853
3853
  { name: "choice_render", args: "p_organization_id uuid, p_table_id uuid, p_doc jsonb", returns: "jsonb", security: "invoker" },
3854
3854
  { name: "choice_render_groups", args: "p_map jsonb, p_groups jsonb", returns: "jsonb", security: "invoker" },
3855
3855
  { name: "choice_render_note", args: "p_field jsonb, p_value jsonb", returns: "jsonb", security: "invoker" },
3856
+ { name: "choice_render_plan", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "invoker" },
3856
3857
  { name: "choice_render_value", args: "p_field jsonb, p_value jsonb", returns: "jsonb", security: "invoker" },
3858
+ { name: "choice_render_with", args: "p_organization_id uuid, p_table_id uuid, p_doc jsonb, p_plan jsonb", returns: "jsonb", security: "invoker" },
3857
3859
  { name: "choice_slug", args: "p_word text", returns: "text", security: "invoker" },
3858
3860
  { name: "choice_synonyms", args: "p_organization_id uuid, p_table_id uuid, p_token text", returns: "text[]", security: "invoker" },
3859
3861
  { name: "choice_synonyms_in", args: "p_map jsonb, p_token text", returns: "text[]", security: "invoker" },
@@ -3871,7 +3873,6 @@ var STORE_DOORS = [
3871
3873
  { name: "context_compare_facts", args: "p_user_id uuid, p_record_ids uuid[], p_item_ids uuid[] DEFAULT NULL::uuid[], p_cells jsonb DEFAULT NULL::jsonb", returns: "jsonb", security: "definer" },
3872
3874
  { name: "context_policy_rank", args: "p_policy text", returns: "integer", security: "invoker" },
3873
3875
  { name: "context_resolve", args: "p_bindings jsonb", returns: "jsonb", security: "definer" },
3874
- { name: "context_resolve", args: "p_organization_id uuid, p_bindings jsonb, p_scope_slug text DEFAULT 'scopes'::text", returns: "jsonb", security: "definer" },
3875
3876
  { name: "context_tag_copy", args: "p_organization_id uuid", returns: "jsonb", security: "definer" },
3876
3877
  { name: "conversation_scope", args: "p_organization_id uuid, p_conversation_id uuid", returns: "jsonb", security: "definer" },
3877
3878
  { name: "conversation_scope_bind", args: "p_organization_id uuid, p_conversation_id uuid, p_record_id uuid", returns: "jsonb", security: "definer" },
@@ -3953,7 +3954,9 @@ var STORE_DOORS = [
3953
3954
  { name: "entity_reference_fields", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "invoker" },
3954
3955
  { name: "entity_reference_kinds", args: "", returns: "TABLE(token text, label text, category text)", security: "definer" },
3955
3956
  { name: "entity_reference_render", args: "p_organization_id uuid, p_table_id uuid, p_doc jsonb", returns: "jsonb", security: "invoker" },
3957
+ { name: "entity_reference_render_with", args: "p_organization_id uuid, p_table_id uuid, p_doc jsonb, p_fields jsonb", returns: "jsonb", security: "invoker" },
3956
3958
  { name: "entity_reference_rows", args: "p_organization_id uuid, p_token text, p_ids uuid[]", returns: "jsonb", security: "invoker" },
3959
+ { name: "entity_reference_target", args: "p_token text", returns: "jsonb", security: "definer" },
3957
3960
  { name: "entity_reference_words", args: "p_organization_id uuid, p_refs jsonb", returns: "jsonb", security: "definer" },
3958
3961
  { name: "entity_table", args: "p_token text", returns: "TABLE(token text, schema_name text, table_name text, type text, title_column text, label text, has_organization boolean, has_deleted_at boolean)", security: "invoker" },
3959
3962
  { name: "entity_value_write", args: "p_organization_id uuid, p_token text, p_record_id uuid, p_patch jsonb", returns: "jsonb", security: "invoker" },
@@ -4078,6 +4081,7 @@ var STORE_DOORS = [
4078
4081
  { name: "is_a_retirement", args: "p_old_deleted timestamp with time zone, p_new_deleted timestamp with time zone, p_old_data jsonb, p_new_data jsonb, p_old_table uuid, p_new_table uuid, p_old_org uuid, p_new_org uuid, p_old_class text, p_new_class text", returns: "boolean", security: "invoker" },
4079
4082
  { name: "ladder_replanners", args: "p_roots text[] DEFAULT ARRAY['custom.has_visibility'::text, 'custom.effective_level'::text, 'custom.reaches_directly'::text, 'custom.visible_set'::text]", returns: "TABLE(fn text, lang text, why text, remedy text)", security: "definer" },
4080
4083
  { name: "level_floor", args: "", returns: "permission_level", security: "definer" },
4084
+ { name: "levels_of", args: "p_user_id uuid, p_ids uuid[]", returns: "jsonb", security: "definer" },
4081
4085
  { name: "levels_raised_by_a_less_specific_rung", args: "", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, member_email text, record_id uuid, addressed_level permission_level, answered_level permission_level)", security: "definer" },
4082
4086
  { name: "list_door_disagreements", args: "p_pretend text DEFAULT NULL::text, p_only_organization uuid DEFAULT NULL::uuid, p_sample integer DEFAULT 200", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, table_id uuid, record_id uuid, door text, why text)", security: "invoker" },
4083
4087
  { name: "list_door_disagreements", args: "p_pretend text, p_only_organization uuid, p_sample integer, p_exhaustive boolean", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, table_id uuid, record_id uuid, door text, why text)", security: "invoker" },
@@ -4087,6 +4091,7 @@ var STORE_DOORS = [
4087
4091
  { name: "mask_document", args: "p_document jsonb, p_visible_keys text[], p_notices jsonb, p_by_id boolean DEFAULT false, p_key_ids jsonb DEFAULT '{}'::jsonb, p_declared_keys text[] DEFAULT NULL::text[]", returns: "jsonb", security: "invoker" },
4088
4092
  { name: "mask_says_withheld", args: "p_mask jsonb, p_key text", returns: "boolean", security: "invoker" },
4089
4093
  { name: "may_invite_outside", args: "p_organization_id uuid, p_table_id uuid", returns: "boolean", security: "definer" },
4094
+ { name: "member_personal_tables", args: "p_organization_id uuid, p_person uuid", returns: "jsonb", security: "definer" },
4090
4095
  { name: "merge_field_kernel_id", args: "", returns: "uuid", security: "invoker" },
4091
4096
  { name: "migrate_choice_keys", args: "p_organization_id uuid, p_table_id uuid, p_dry_run boolean DEFAULT false", returns: "jsonb", security: "definer" },
4092
4097
  { name: "migrate_delete", args: "p_organization_id uuid, p_record_id uuid, p_note text DEFAULT NULL::text", returns: "jsonb", security: "definer" },
@@ -4198,6 +4203,8 @@ var STORE_DOORS = [
4198
4203
  { name: "read_door_ladder_ceiling", args: "", returns: "integer", security: "invoker" },
4199
4204
  { name: "read_door_parity", args: "p_organization_id uuid, p_table_id uuid, p_user uuid, p_required permission_level, p_sample integer", returns: "TABLE(record_id uuid, set_based boolean, per_row boolean, verdict text)", security: "definer" },
4200
4205
  { name: "read_mask", args: "p_organization_id uuid, p_record_id uuid, p_action text DEFAULT 'read'::text", returns: "jsonb", security: "definer" },
4206
+ { name: "read_mask_at", args: "p_record_id uuid, p_level_given boolean, p_level permission_level, p_action text DEFAULT 'read'::text", returns: "jsonb", security: "definer" },
4207
+ { name: "read_mask_for", args: "p_user_id uuid, p_organization_id uuid, p_table_id uuid, p_level permission_level, p_action text DEFAULT 'read'::text", returns: "jsonb", security: "definer" },
4201
4208
  { name: "read_paths_outside_the_door", args: "", returns: "TABLE(object_name text, why text)", security: "invoker" },
4202
4209
  { name: "read_record", args: "p_organization_id uuid, p_record_id uuid, p_by_id boolean DEFAULT false", returns: "jsonb", security: "definer" },
4203
4210
  { name: "read_records", args: "p_organization_id uuid, p_table_id uuid, p_by_id boolean DEFAULT false, p_limit integer DEFAULT 200, p_offset integer DEFAULT 0", returns: "TABLE(id uuid, document jsonb, level permission_level)", security: "definer" },
@@ -4238,6 +4245,7 @@ var STORE_DOORS = [
4238
4245
  { name: "record_value_one", args: "p_organization_id uuid, p_record_id uuid, p_key text", returns: "jsonb", security: "invoker" },
4239
4246
  { name: "record_values", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
4240
4247
  { name: "record_values_of", args: "p_row custom.record", returns: "jsonb", security: "invoker" },
4248
+ { name: "record_values_step", args: "p_row custom.record, p_cache jsonb DEFAULT '{}'::jsonb, OUT o_doc jsonb, OUT o_cache jsonb", returns: "record", security: "invoker" },
4241
4249
  { name: "record_values_versioned", args: "p_organization_id uuid, p_record_id uuid", returns: "TABLE(field_key text, field_id uuid, value jsonb, value_version integer, source jsonb, absent_reason text, actor text, on_behalf_of text, written_at timestamp with time zone, alternates jsonb)", security: "definer" },
4242
4250
  { name: "record_words", args: "p_organization_id uuid, p_record_id uuid, p_noun text DEFAULT NULL::text", returns: "text", security: "definer" },
4243
4251
  { name: "record_write", args: "p_organization_id uuid, p_table_id uuid, p_data jsonb", returns: "uuid", security: "definer" },
@@ -4260,12 +4268,13 @@ var STORE_DOORS = [
4260
4268
  { name: "relation_words_many", args: "p_organization_id uuid, p_field_id uuid, p_record_ids uuid[]", returns: "TABLE(record_id uuid, words text)", security: "definer" },
4261
4269
  { name: "reopen_declared_doors", args: "", returns: "TABLE(reopened text)", security: "definer" },
4262
4270
  { name: "required_epoch", args: "p_container_type text, p_container_id uuid, p_item_type text, p_item_id uuid", returns: "bigint", security: "definer" },
4263
- { name: "resolve_context", args: "p_entity_type text, p_entity_id uuid, p_record_ids uuid[] DEFAULT NULL::uuid[], p_table_ids uuid[] DEFAULT NULL::uuid[]", returns: "jsonb", security: "definer" },
4271
+ { name: "resolve_context", args: "p_entity_type text, p_entity_id uuid, p_record_ids uuid[] DEFAULT NULL::uuid[], p_table_ids uuid[] DEFAULT NULL::uuid[], p_system_item_refs text[] DEFAULT NULL::text[]", returns: "jsonb", security: "definer" },
4264
4272
  { name: "resolve_first_match", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
4265
4273
  { name: "resolve_id", args: "p_organization_id uuid, p_id uuid", returns: "uuid", security: "invoker" },
4266
4274
  { name: "retired_actor_words", args: "", returns: "jsonb", security: "invoker" },
4267
4275
  { name: "rollup_value", args: "p_organization_id uuid, p_record_id uuid, p_field_data jsonb", returns: "jsonb", security: "invoker" },
4268
4276
  { name: "row_actions", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "definer" },
4277
+ { name: "row_sits_in_a_personal_table", args: "p_type text, p_organization_id uuid, p_id uuid", returns: "boolean", security: "invoker" },
4269
4278
  { name: "rule_applies", args: "p_organization_id uuid, p_rule_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
4270
4279
  { name: "rule_context", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
4271
4280
  { name: "rule_declare", args: "p_organization_id uuid, p_spec jsonb, p_rule_id uuid DEFAULT NULL::uuid", returns: "uuid", security: "definer" },
@@ -4358,6 +4367,7 @@ var STORE_DOORS = [
4358
4367
  { name: "table_stage_field", args: "p_organization_id uuid, p_table_id uuid", returns: "text", security: "definer" },
4359
4368
  { name: "table_storage", args: "p_organization_id uuid, p_table_id uuid", returns: "text", security: "invoker" },
4360
4369
  { name: "table_sync", args: "p_organization_id uuid, p_home_id uuid, p_spec jsonb", returns: "jsonb", security: "definer" },
4370
+ { name: "table_transfer_owner", args: "p_table_id uuid, p_to_person uuid, p_reason text", returns: "jsonb", security: "definer" },
4361
4371
  { name: "table_type_field", args: "p_organization_id uuid, p_table_id uuid", returns: "text", security: "definer" },
4362
4372
  { name: "table_unique_rule_fields", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "invoker" },
4363
4373
  { name: "table_webhook_archive", args: "p_organization_id uuid, p_webhook_id uuid", returns: "boolean", security: "definer" },
@@ -4387,6 +4397,8 @@ var STORE_DOORS = [
4387
4397
  { name: "view_designate", args: "p_organization_id uuid, p_table_id uuid, p_view_id uuid, p_layout text DEFAULT NULL::text", returns: "uuid", security: "definer" },
4388
4398
  { name: "view_keys", args: "", returns: "TABLE(path text, shape text, layouts text[], writer text, sentence text)", security: "invoker" },
4389
4399
  { name: "view_keys_check", args: "p_organization_id uuid, p_table_id uuid, p_set jsonb, p_old jsonb DEFAULT '{}'::jsonb", returns: "jsonb", security: "invoker" },
4400
+ { name: "view_look_read", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "definer" },
4401
+ { name: "view_look_set", args: "p_organization_id uuid, p_table_id uuid, p_view_id uuid, p_look jsonb", returns: "jsonb", security: "definer" },
4390
4402
  { name: "view_record_order_set", args: "p_organization_id uuid, p_view_id uuid, p_record_ids uuid[]", returns: "jsonb", security: "definer" },
4391
4403
  { name: "views", args: "p_organization_id uuid, p_table_id uuid DEFAULT NULL::uuid", returns: "TABLE(view_id uuid, name text, table_id uuid, filters jsonb, definition jsonb, created_at timestamp with time zone)", security: "definer" },
4392
4404
  { name: "visibility_ancestors", args: "p_item_type text, p_item_id uuid", returns: "TABLE(container_type text, container_id uuid, depth integer, max_level permission_level)", security: "definer" },
@@ -4513,18 +4525,18 @@ var STORE_KNOBS = [
4513
4525
  { key: "world_publish_enabled", value: "false", type: "boolean" }
4514
4526
  ];
4515
4527
  var STORE_REFUSAL_CODES = [
4516
- { code: "02000", raised_by: "_checklist_instantiate,_portal_config_judge,_portal_invite_payload,_share_write_person,_table_share_invite_payload,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_archive,portal_card,portal_declare,portal_form,portal_form_submit,portal_invite,portal_invite_accept,portal_preview,portal_principal_bind,portal_restore,portal_revoke,read_record,record_delete,record_restore,record_restore_preview,record_table,record_update,relation_halves_repair,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,table_archive,table_share_outside_accept,table_share_outside_grant,table_share_outside_invite,table_share_outside_resend,table_share_outside_revoke,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_assign,work_record_states,work_set_state" },
4528
+ { code: "02000", raised_by: "_checklist_instantiate,_portal_config_judge,_portal_invite_payload,_read_record_with,_share_write_person,_table_share_invite_payload,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_archive,portal_card,portal_declare,portal_form,portal_form_submit,portal_invite,portal_invite_accept,portal_preview,portal_principal_bind,portal_restore,portal_revoke,record_delete,record_restore,record_restore_preview,record_table,record_update,relation_halves_repair,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,table_archive,table_share_outside_accept,table_share_outside_grant,table_share_outside_invite,table_share_outside_resend,table_share_outside_revoke,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_assign,work_record_states,work_set_state" },
4517
4529
  { 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,rule_filter_node_sql,work_assign" },
4518
4530
  { code: "22003", raised_by: "context_resolve" },
4519
- { code: "22004", raised_by: "_entity_custom_fields_guard,_portal_config_judge,_share_write_person,_value_envelope,actor_word,agg_assert_key,agg_compare_windows,agg_sql,anon_capture,anon_token_issue,anon_write,assert_client_may_reach,booking_declare,capture_submit,checklist_declare,context_resolve,context_tag_copy,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,inbox_snooze,io_comment_write,io_import_begin,io_infer_column,io_outbox_drain,io_restore,migrate_choice_keys,migrate_purge,migrate_purge_hard,migrate_reclass,migrate_split,migrate_undo,organization_clear,organization_contents,pipeline_declare,pipeline_gate_preview,portal_declare,portal_form_submit,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_graph,record_write_many,relation_carry,relation_halves_repair,relation_own,rule_declare,share_grant,sign_request_create,sign_request_sign,subscription_declare,table_archive,table_declare,table_move,table_share_outside_grant,table_share_outside_invite,value_restore,view_declare,view_designate,work_approval_decide,work_approval_request,work_template_declare" },
4531
+ { code: "22004", raised_by: "_entity_custom_fields_guard,_portal_config_judge,_share_write_person,_value_envelope,actor_word,agg_assert_key,agg_compare_windows,agg_sql,anon_capture,anon_token_issue,anon_write,assert_client_may_reach,booking_declare,capture_submit,checklist_declare,context_resolve,context_tag_copy,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,inbox_snooze,io_comment_write,io_import_begin,io_infer_column,io_outbox_drain,io_restore,migrate_choice_keys,migrate_purge,migrate_purge_hard,migrate_reclass,migrate_split,migrate_undo,organization_clear,organization_contents,pipeline_declare,pipeline_gate_preview,portal_declare,portal_form_submit,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_graph,record_write_many,relation_carry,relation_halves_repair,relation_own,rule_declare,share_grant,sign_request_create,sign_request_sign,subscription_declare,table_archive,table_declare,table_move,table_share_outside_grant,table_share_outside_invite,value_restore,view_declare,view_designate,view_look_read,view_look_set,work_approval_decide,work_approval_request,work_template_declare" },
4520
4532
  { code: "22007", raised_by: "agg_parse_moment,dashboard_window_sql" },
4521
4533
  { code: "22012", raised_by: "formula_eval,rule_eval,rule_sql_op" },
4522
- { code: "22023", raised_by: "_action_check,_booking_availability,_decorations_check,_entity_custom_fields_guard,_fx_date,_fx_num,_fx_unit,_fxp_level,_fxp_resolve,_fxp_tokens,_portal_config_judge,_take_op_id,_value_envelope,_view_field_key,_view_key_value,_work_shape_guard,action_run,actor_word,agg_assert_key,agg_calendar,agg_compare_windows,agg_sql,anon_token_issue,booking_declare,containment_parent,dashboard_block_normalize,dashboard_run,dashboard_target_field_assert,dashboard_window_sql,doc_render_body,doc_render_write,doc_signature_write,enrich_declare,enrich_land,enrich_normalize,enrich_pin,entity_reference_rows,entity_reference_words,entity_value_write,external_history_event,external_source_declare,external_stub_upsert,external_write_through,field_history,field_update,form_declare,form_draft_save,formula_eval,formula_parse,grid_layout_check,hub_changed_by,inbox_snooze,io_export,io_import_begin,io_import_finish,io_import_plan,io_import_report,io_proposal_accept,list_portals,migrate_merge,migrate_reclass,my_levels,organization_clear,page_size,pin_agent_cells,pipeline_move,pipeline_move_many,portal_declare,portal_form_submit,provenance_write,query_by_coordinates,query_rollup,read_records_archived,read_records_in_view_order,record_filter_sql,record_update,record_write_graph,record_write_many,relation_carry,rule_eval,rule_filter_node_sql,rule_members,rule_members_visible,rule_sql_op,scope_table_provision,share_grant,share_lane_set,sign_request_create,sign_request_sign,subscription_declare,table_from_example,table_move,table_rules,table_share_outside_grant,table_sync,table_webhook_declare,view_declare,view_keys_check,view_record_order_set,visibility_as_of,where_tables_live,work_approval_request,work_decide_many,work_inbox,work_list,work_slot_hold" },
4523
- { code: "23503", raised_by: "_action_check,_booking_availability,_checklist_instantiate,_containment_guard,_decorations_check,_display_spec_for,_field_document_for,_field_type_parity_guard,_pipeline_stage_key,_record_rule_uses,action_declare,action_run,agg_digest_assemble,anon_publish,anon_rate_take,anon_token_issue,anon_write,assert_organization_wall,autonumber_backfill,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_draft_save,form_submit,grid_layout,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,read_records_in_view_order,record_applicability,record_reparent,relation_carry,relation_own,resolve_first_match,rule_applies,rule_declare,rule_eval,rule_filter_node_sql,rule_members,rule_members_visible,rule_run,sign_request_create,subscription_mute,subscription_preview,table_decorate,table_from_example,table_webhook_archive,table_webhook_declare,view_declare,view_designate,view_record_order_set,work_set_state,work_take_assignment,work_template_instantiate" },
4534
+ { code: "22023", raised_by: "_action_check,_booking_availability,_decorations_check,_entity_custom_fields_guard,_fx_date,_fx_num,_fx_unit,_fxp_level,_fxp_resolve,_fxp_tokens,_portal_config_judge,_take_op_id,_value_envelope,_view_field_key,_view_key_value,_work_shape_guard,action_run,actor_word,agg_assert_key,agg_calendar,agg_compare_windows,agg_sql,anon_token_issue,booking_declare,containment_parent,dashboard_block_normalize,dashboard_run,dashboard_target_field_assert,dashboard_window_sql,doc_render_body,doc_render_write,doc_signature_write,enrich_declare,enrich_land,enrich_normalize,enrich_pin,entity_reference_rows,entity_reference_words,entity_value_write,external_history_event,external_source_declare,external_stub_upsert,external_write_through,field_history,field_update,form_declare,form_draft_save,formula_eval,formula_parse,grid_layout_check,hub_changed_by,inbox_snooze,io_export,io_import_begin,io_import_finish,io_import_plan,io_import_report,io_proposal_accept,list_portals,migrate_merge,migrate_reclass,my_levels,organization_clear,page_size,pin_agent_cells,pipeline_move,pipeline_move_many,portal_declare,portal_form_submit,provenance_write,query_by_coordinates,query_rollup,read_records_archived,read_records_in_view_order,record_filter_sql,record_update,record_write_graph,record_write_many,relation_carry,rule_eval,rule_filter_node_sql,rule_members,rule_members_visible,rule_sql_op,scope_table_provision,share_grant,share_lane_set,sign_request_create,sign_request_sign,subscription_declare,table_from_example,table_move,table_rules,table_share_outside_grant,table_sync,table_transfer_owner,table_webhook_declare,view_declare,view_keys_check,view_look_set,view_record_order_set,visibility_as_of,where_tables_live,work_approval_request,work_decide_many,work_inbox,work_list,work_slot_hold" },
4535
+ { code: "23503", raised_by: "_action_check,_booking_availability,_checklist_instantiate,_containment_guard,_decorations_check,_display_spec_for,_field_document_for,_field_type_parity_guard,_pipeline_stage_key,_record_rule_uses,action_declare,action_run,agg_digest_assemble,anon_publish,anon_rate_take,anon_token_issue,anon_write,assert_organization_wall,autonumber_backfill,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_draft_save,form_submit,grid_layout,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,read_records_in_view_order,record_applicability,record_reparent,relation_carry,relation_own,resolve_first_match,rule_applies,rule_declare,rule_eval,rule_filter_node_sql,rule_members,rule_members_visible,rule_run,sign_request_create,subscription_mute,subscription_preview,table_decorate,table_from_example,table_webhook_archive,table_webhook_declare,view_declare,view_designate,view_look_set,view_record_order_set,work_set_state,work_take_assignment,work_template_instantiate" },
4524
4536
  { code: "23505", raised_by: "_portal_config_judge,_share_write_person,_unique_rule_holds,doc_sign,doc_signature_write,entity_field_declare,field_declare,home_add,inbound_declare,io_proposal_accept,relation_carry,relation_own,sign_request_cancel,sign_request_create,table_share_outside_resend,work_approval_decide,work_slot_hold" },
4525
4537
  { code: "23514", raised_by: "_checklist_instantiate,_checklist_step_guard,_containment_guard,_dated_values_guard,_derived_fields,_display_format_check,_display_spec_for,_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,_record_source_key_is_record,_relation_halves_agree,_relation_kernel_targets,_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,_with_display,_work_shape_guard,_workdoors_approval_guard,action_run,assert_columns_are_defined,assert_entity_is_organization_scoped,booking_declare,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_comment_write,io_import_rows,migrate_merge,migrate_purge_hard,portal_archive,portal_restore,record_restore,record_write_graph,relation_carry,relation_halves_repair,relation_own,sign_request_create,sign_request_sign,table_declare,table_from_example,validate_value_envelope,validate_values,work_set_state,work_slots_declare,work_take_assignment,work_template_instantiate" },
4526
4538
  { code: "40001", raised_by: "has_visibility_at,table_move" },
4527
- { code: "42501", raised_by: "_context_copy_fence,_doc_render_immutable,_doc_signature_immutable,_field_definition_write,_field_write_door,_portal_config_judge,_portal_principal_here,_rule_definition_write,_store_door,agent_table_claim,agg_fields_readable_assert,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,context_resolve,conversation_scope_bind,conversation_scope_unbind,dashboard_target_field_assert,doc_sign,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_draft_save,form_public_asks,form_submit,inbound_mail_land,inbox_clear,inbox_snooze,inbox_unclear,inbox_unsnooze,io_comment_resolve,io_comment_write,io_import_begin,io_import_finish,io_restore,migrate_purge,migrate_purge_hard,migrate_purge_hard_request,migrate_reclass,my_levels,organization_clear,organization_contents,portal_declare,portal_form,portal_form_submit,portal_invitation,portal_invite,portal_invite_accept,portal_principal_bind,promote_table,query_visibility_parity,read_record,read_records,read_records_archived,read_records_by_ids,read_records_matching,record_table,record_write_graph,relation_halves_disagreements,relation_halves_repair,resolve_context,scope_table_provision,share_grant,subscription_mute,subscription_preview,table_move,table_share_outside_accept,table_share_outside_grant,table_share_outside_invite,table_share_outside_resend,table_webhook_declare,visibility_as_of,where_tables_live,work_approval_decide,work_approval_read,work_approval_request,work_person" },
4539
+ { code: "42501", raised_by: "_context_copy_fence,_doc_render_immutable,_doc_signature_immutable,_field_definition_write,_field_write_door,_portal_config_judge,_portal_principal_here,_read_record_with,_rule_definition_write,_store_door,agent_table_claim,agg_fields_readable_assert,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,context_resolve,conversation_scope_bind,conversation_scope_unbind,dashboard_target_field_assert,doc_sign,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_draft_save,form_public_asks,form_submit,inbound_mail_land,inbox_clear,inbox_snooze,inbox_unclear,inbox_unsnooze,io_comment_resolve,io_comment_write,io_import_begin,io_import_finish,io_restore,member_personal_tables,migrate_purge,migrate_purge_hard,migrate_purge_hard_request,migrate_reclass,my_levels,organization_clear,organization_contents,portal_declare,portal_form,portal_form_submit,portal_invitation,portal_invite,portal_invite_accept,portal_principal_bind,promote_table,query_visibility_parity,read_record,read_records,read_records_archived,read_records_by_ids,read_records_matching,record_table,record_write_graph,relation_halves_disagreements,relation_halves_repair,resolve_context,scope_table_provision,share_grant,subscription_mute,subscription_preview,table_move,table_share_outside_accept,table_share_outside_grant,table_share_outside_invite,table_share_outside_resend,table_transfer_owner,table_webhook_declare,view_declare,view_look_set,view_record_order_set,visibility_as_of,where_tables_live,work_approval_decide,work_approval_read,work_approval_request,work_person" },
4528
4540
  { code: "42703", raised_by: "entity_table,portal_declare" },
4529
4541
  { code: "42P17", raised_by: "_field_reads_what_it_reads,far_value" },
4530
4542
  { code: "53400", raised_by: "anon_rate_take,delete_cascade_closure,enrich_due,enrich_land,promote_field" },
@@ -5904,6 +5916,7 @@ var DOORS = {
5904
5916
  // ask, under the same wall and visibility gate as `portals` itself.
5905
5917
  portalTables: "portal_tables",
5906
5918
  tableFacts: "table_facts",
5919
+ tablesLiveWhere: "where_tables_live",
5907
5920
  // WHERE A TABLE LIVES, AND MOVING IT (SC-1' / SC-1-TAILS). `table_home` answers only when the
5908
5921
  // caller may open the Table (custom.where_id_opens) and names its organization FROM THE TABLE;
5909
5922
  // `table_move` moves it into another organization the caller belongs to, with every Table
@@ -6034,6 +6047,11 @@ var DOORS = {
6034
6047
  // VIEW-SWITCH-NOT-DESIGNATION (2026-09-25): how a Table opens is designated by an EDITOR through
6035
6048
  // this one door; `view_declare` refuses the default view's layout and is_default by name.
6036
6049
  viewDesignate: "view_designate",
6050
+ // VIEW-LOOK (lane VIEW-STATE-PERSONAL, VERIFIER-23 item 1, 2026-09-25): how ONE person is looking at
6051
+ // a shared view — its grouping, date field, sort, filter, hidden columns, widths, layout — is her
6052
+ // own look until an editor saves it onto the view (`view_declare`). Viewer on the Table.
6053
+ viewLookRead: "view_look_read",
6054
+ viewLookSet: "view_look_set",
6037
6055
  // The cadence CATALOGUE a person's screen may ask for. `agg_subscription_cadences`
6038
6056
  // above is the notifier's own and holds no client grant; this door delegates to
6039
6057
  // it, so a picker and the digest runner can never offer different words.
@@ -6441,6 +6459,31 @@ function createRecordsClient(config) {
6441
6459
  if (!doorExists(DOORS.tableFacts)) return ok(null);
6442
6460
  return callDoor(DOORS.tableFacts, { p_organization_id: org }, "tableFacts");
6443
6461
  },
6462
+ async tablesLiveWhere({ table_ids }) {
6463
+ if (table_ids.length === 0) return ok([]);
6464
+ const answered = await callDoor(DOORS.tablesLiveWhere, { p_table_ids: table_ids }, "tablesLiveWhere");
6465
+ if (!answered.ok) return answered;
6466
+ if (!Array.isArray(answered.data)) {
6467
+ const refusal = {
6468
+ code: "not_supported",
6469
+ message: "The record store answered where these tables are written in a shape this client cannot read, so no write location was assumed.",
6470
+ hint: "Regenerate @ai-matrx/records against the store (pnpm records:generate) \u2014 the door and this client disagree."
6471
+ };
6472
+ scream({ code: refusal.code, message: refusal.message, ...refusal.hint ? { hint: refusal.hint } : {}, where: "tablesLiveWhere" });
6473
+ return err(refusal);
6474
+ }
6475
+ const locations = [];
6476
+ for (const row of answered.data) {
6477
+ const value = row && typeof row === "object" ? row : null;
6478
+ if (!value || typeof value.table_id !== "string" || value.lives_in !== "record" && value.lives_in !== "older" || value.why !== null && value.why !== void 0 && typeof value.why !== "string") {
6479
+ const refusal = { code: "not_supported", message: "The record store returned an invalid table write location, so no write location was assumed." };
6480
+ scream({ code: refusal.code, message: refusal.message, where: "tablesLiveWhere" });
6481
+ return err(refusal);
6482
+ }
6483
+ locations.push({ table_id: value.table_id, lives_in: value.lives_in, why: typeof value.why === "string" ? value.why : null });
6484
+ }
6485
+ return ok(locations);
6486
+ },
6444
6487
  async tableHome({ table_id }) {
6445
6488
  const answered = await callDoor(DOORS.tableHome, { p_table_id: table_id }, "tableHome");
6446
6489
  if (!answered.ok) return answered;
@@ -7526,6 +7569,21 @@ function createRecordsClient(config) {
7526
7569
  "viewDesignate"
7527
7570
  );
7528
7571
  },
7572
+ async viewLookRead({ table_id }) {
7573
+ const answered = await callDoor(
7574
+ DOORS.viewLookRead,
7575
+ { p_organization_id: org, p_table_id: table_id },
7576
+ "viewLookRead"
7577
+ );
7578
+ return answered.ok ? ok(answered.data ?? {}) : answered;
7579
+ },
7580
+ async viewLookSet({ table_id, view_id, look }) {
7581
+ return callDoor(
7582
+ DOORS.viewLookSet,
7583
+ { p_organization_id: org, p_table_id: table_id, p_view_id: view_id, p_look: look },
7584
+ "viewLookSet"
7585
+ );
7586
+ },
7529
7587
  async subscriptionMute({ rule_id, muted }) {
7530
7588
  return callDoor(
7531
7589
  DOORS.subscriptionMute,