datanotes 3.1.0 → 3.3.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.
Files changed (72) hide show
  1. package/README.md +1 -0
  2. package/SECURITY.md +12 -0
  3. package/dist/api/client.d.cts +2 -0
  4. package/dist/api/client.d.ts +2 -0
  5. package/dist/api/docs.d.cts +14 -4
  6. package/dist/api/docs.d.ts +14 -4
  7. package/dist/api/extension-files.d.cts +23 -0
  8. package/dist/api/extension-files.d.ts +23 -0
  9. package/dist/api/extension-host.d.cts +108 -0
  10. package/dist/api/extension-host.d.ts +108 -0
  11. package/dist/api/extension-manifest.d.cts +154 -0
  12. package/dist/api/extension-manifest.d.ts +154 -0
  13. package/dist/api/extension-plan.d.cts +174 -0
  14. package/dist/api/extension-plan.d.ts +174 -0
  15. package/dist/api/extension-record.d.cts +65 -0
  16. package/dist/api/extension-record.d.ts +65 -0
  17. package/dist/api/extension-sdk.d.cts +65 -0
  18. package/dist/api/extension-sdk.d.ts +65 -0
  19. package/dist/api/extensions.cjs +18472 -0
  20. package/dist/api/extensions.d.cts +11 -0
  21. package/dist/api/extensions.d.ts +11 -0
  22. package/dist/api/extensions.js +18409 -0
  23. package/dist/api/index.cjs +675 -503
  24. package/dist/api/index.js +675 -503
  25. package/dist/api/mcp.cjs +203 -13
  26. package/dist/api/mcp.js +203 -13
  27. package/dist/datanotes.cjs +7903 -4667
  28. package/dist/docs/administration/extensions.md +213 -0
  29. package/dist/docs/api/operations/add_column.md +1 -0
  30. package/dist/docs/api/operations/add_constraint.md +2 -0
  31. package/dist/docs/api/operations/alter_column.md +1 -1
  32. package/dist/docs/api/operations/alter_table.md +3 -2
  33. package/dist/docs/api/operations/check_table.md +1 -1
  34. package/dist/docs/api/operations/create_table.md +3 -1
  35. package/dist/docs/api/operations/describe_table.md +1 -1
  36. package/dist/docs/api/operations/extensions_delete.md +29 -0
  37. package/dist/docs/api/operations/extensions_list.md +20 -0
  38. package/dist/docs/api/operations/extensions_record.md +44 -0
  39. package/dist/docs/api/operations/insert_row.md +2 -2
  40. package/dist/docs/api/operations/tags/extensions.md +9 -0
  41. package/dist/docs/api/operations/tags/rows-dml.md +1 -1
  42. package/dist/docs/api.md +10 -2
  43. package/dist/docs/develop/write-an-extension.md +369 -0
  44. package/dist/docs/guides/data-quality/check-constraints.md +14 -13
  45. package/dist/docs/guides/data-quality/hand-edits.md +10 -10
  46. package/dist/docs/guides/database-objects/bases.md +11 -11
  47. package/dist/docs/guides/database-objects/catalogs-and-schemas.md +16 -10
  48. package/dist/docs/guides/database-objects/columns.md +38 -38
  49. package/dist/docs/guides/database-objects/relations.md +173 -36
  50. package/dist/docs/guides/database-objects/tables.md +80 -35
  51. package/dist/docs/guides/database-objects/views.md +44 -44
  52. package/dist/docs/guides/history/change-data-feed.md +34 -34
  53. package/dist/docs/guides/history/journal-and-undo.md +12 -12
  54. package/dist/docs/guides/history/restore.md +20 -20
  55. package/dist/docs/guides/history/table-history.md +31 -31
  56. package/dist/docs/guides/read-and-write/automatic-links.md +15 -15
  57. package/dist/docs/guides/read-and-write/import-notes.md +21 -21
  58. package/dist/docs/guides/read-and-write/joins-and-aggregates.md +7 -7
  59. package/dist/docs/guides/read-and-write/read-and-filter.md +10 -10
  60. package/dist/docs/guides/read-and-write/write-rows.md +10 -10
  61. package/dist/docs/guides/search/text.md +1 -1
  62. package/dist/docs/guides/security/security-model.md +12 -0
  63. package/dist/docs/reference/cli.md +32 -1
  64. package/dist/docs/reference/errors.md +1 -1
  65. package/dist/docs/reference/glossary.md +8 -0
  66. package/dist/docs/reference/operations/auxiliary.md +2 -2
  67. package/dist/docs/reference/operations/rows.md +1 -1
  68. package/dist/docs/reference/operations/schema.md +15 -11
  69. package/dist/docs/reference/operations.md +28 -28
  70. package/dist/docs/release-notes.md +57 -0
  71. package/dist/docs/start/connect-agents.md +11 -0
  72. package/package.json +11 -1
@@ -58,7 +58,7 @@ Answer:
58
58
  ```json
59
59
  {
60
60
  "ok": true,
61
- "migration_id": "20261014T191515-create_table-create-table-main-public-film",
61
+ "migration_id": "20261020T173828-create_table-create-table-main-public-film",
62
62
  "summary": null
63
63
  }
64
64
  ```
@@ -67,7 +67,7 @@ Answer:
67
67
 
68
68
  ```yaml
69
69
  # Metastore (Datanotes): catalogs, schemas, tables, columns, views.
70
- id: 01a13bd7-1943-7bc6-ab38-ab176313afeb
70
+ id: 01a15a64-a676-7657-9ff4-7a1e6bcc5df3
71
71
  config:
72
72
  history: true
73
73
 
@@ -305,10 +305,11 @@ Answer (83 lines)
305
305
 
306
306
  ## Add fixed front matter keys, a note template and tags
307
307
 
308
- `create_table` takes three more arguments:
308
+ `create_table` takes four more arguments:
309
309
 
310
310
  * **`fields`**: front matter keys every new row gets with a fixed value and no checks, such as `cssclasses`, which styles the notes in Obsidian
311
311
  * **`row_template`**: the text of every new row’s note, with `{column}` placeholders
312
+ * **`instructions`**: how an agent fills a row, such as which columns come first and what to ask you
312
313
  * **`tags`**: key/value labels for the table, which `list_tables` and `describe_table` return
313
314
 
314
315
  **`create_table`**
@@ -353,6 +354,7 @@ Answer (83 lines)
353
354
  "filename": "{occurred_at:YYYY-MM-DD} {film}",
354
355
  "fields": { "cssclasses": ["watch"] },
355
356
  "row_template": "Watched {film} ({where}).\n\n## Thoughts\n",
357
+ "instructions": "1. Ask me which film I watched and where.\n2. Fill `occurred_at` only when I give a time: it defaults to now.\n",
356
358
  "tags": { "area": "films" }
357
359
  }
358
360
  ```
@@ -377,24 +379,24 @@ Answer:
377
379
  "ok": true,
378
380
  "op": "insert_row",
379
381
  "files_created": 1,
380
- "planned_creates": ["datanotes/main/public/watch/2026-10-14 Nosferatu.md"],
382
+ "planned_creates": ["datanotes/main/public/watch/2026-10-20 Nosferatu.md"],
381
383
  "commits": [{ "table": "main.public.watch", "version": 1, "operation": "WRITE" }],
382
- "migration_id": "20261014T191515-insert_row-insert-into-watch"
384
+ "migration_id": "20261020T173828-insert_row-insert-into-watch"
383
385
  }
384
386
  ```
385
387
 
386
- `datanotes/main/public/watch/2026-10-14 Nosferatu.md` now reads:
388
+ `datanotes/main/public/watch/2026-10-20 Nosferatu.md` now reads:
387
389
 
388
390
  ```markdown
389
391
  ---
390
392
  table: main.public.watch
391
393
  cssclasses:
392
394
  - watch
393
- id: 01a13bd7-1c3b-7687-845d-b10ea8ff95a2
395
+ id: 01a15a64-a8fb-73f8-a4e2-4263d12c1d9d
394
396
  film: Nosferatu
395
397
  where: outdoor screening
396
398
  place: the park by the river
397
- occurred_at: 2026-10-14T19:15:15Z
399
+ occurred_at: 2026-10-20T17:38:28Z
398
400
  ---
399
401
  Watched Nosferatu (outdoor screening).
400
402
 
@@ -402,6 +404,46 @@ Watched Nosferatu (outdoor screening).
402
404
  ## Thoughts
403
405
  ```
404
406
 
407
+ ## Tell agents how to fill a row with `instructions`
408
+
409
+ `describe_table` returns a table’s `instructions`, so an agent reads them before it writes a row. `alter_table` changes them, and `instructions: ""` removes them.
410
+
411
+ **`describe_table`**
412
+
413
+ ```json
414
+ { "table": "watch" }
415
+ ```
416
+
417
+ Answer:
418
+
419
+ ```json
420
+ {
421
+ "qualified": "main.public.watch",
422
+ "instructions": "1. Ask me which film I watched and where.\n2. Fill `occurred_at` only when I give a time: it defaults to now.\n"
423
+ }
424
+ ```
425
+
426
+ **`alter_table`**
427
+
428
+ ```json
429
+ {
430
+ "table": "watch",
431
+ "instructions": "1. Ask me which film I watched, where and with whom.\n2. Fill `occurred_at` only when I give a time: it defaults to now.\n"
432
+ }
433
+ ```
434
+
435
+ Answer:
436
+
437
+ ```json
438
+ {
439
+ "ok": true,
440
+ "op": "alter_table",
441
+ "planned_texts": ["datanotes/metastore.yaml"],
442
+ "commits": [{ "table": "main.public.watch", "version": 2, "operation": "ALTER TABLE" }],
443
+ "migration_id": "20261020T173828-alter_table-alter-table-main-public-watch"
444
+ }
445
+ ```
446
+
405
447
  ## Set a table’s options when you create it
406
448
 
407
449
  `create_table` also takes the options that `alter_table` changes later. Two of them:
@@ -512,7 +554,7 @@ Answer:
512
554
  "commits": [
513
555
  { "table": "diary.classics.actor", "version": 6, "operation": "ALTER TABLE" }
514
556
  ],
515
- "migration_id": "20261014T191534-alter_table-move-table-diary-classics-acto"
557
+ "migration_id": "20261020T173845-alter_table-move-table-diary-classics-acto"
516
558
  }
517
559
  ```
518
560
 
@@ -553,7 +595,7 @@ Answer:
553
595
  "commits": [
554
596
  { "table": "diary.credits.actor", "version": 7, "operation": "ALTER TABLE" }
555
597
  ],
556
- "migration_id": "20261014T191534-alter_table-move-table-diary-classics-acto-2"
598
+ "migration_id": "20261020T173845-alter_table-move-table-diary-classics-acto-2"
557
599
  }
558
600
  ```
559
601
 
@@ -617,7 +659,7 @@ Answer:
617
659
  "commits": [
618
660
  { "table": "diary.classics.film", "version": 13, "operation": "ALTER TABLE" }
619
661
  ],
620
- "migration_id": "20261014T191534-alter_table-alter-table-diary-classics-fil-5"
662
+ "migration_id": "20261020T173845-alter_table-alter-table-diary-classics-fil-3"
621
663
  }
622
664
  ```
623
665
 
@@ -669,7 +711,7 @@ Answer:
669
711
  "commits": [
670
712
  { "table": "diary.classics.film", "version": 14, "operation": "ALTER TABLE" }
671
713
  ],
672
- "migration_id": "20261014T191534-alter_table-alter-table-diary-classics-fil-6"
714
+ "migration_id": "20261020T173845-alter_table-alter-table-diary-classics-fil-4"
673
715
  }
674
716
  ```
675
717
 
@@ -711,7 +753,7 @@ Answer:
711
753
  "commits": [
712
754
  { "table": "diary.classics.film", "version": 15, "operation": "ALTER TABLE" }
713
755
  ],
714
- "migration_id": "20261014T191534-alter_table-alter-table-diary-classics-fil-7"
756
+ "migration_id": "20261020T173845-alter_table-alter-table-diary-classics-fil-5"
715
757
  }
716
758
  ```
717
759
 
@@ -731,7 +773,7 @@ Answer:
731
773
  "commits": [
732
774
  { "table": "diary.classics.film", "version": 16, "operation": "ALTER TABLE" }
733
775
  ],
734
- "migration_id": "20261014T191534-alter_table-alter-table-diary-classics-fil-8"
776
+ "migration_id": "20261020T173845-alter_table-alter-table-diary-classics-fil-6"
735
777
  }
736
778
  ```
737
779
 
@@ -751,7 +793,7 @@ Answer:
751
793
  "commits": [
752
794
  { "table": "diary.classics.film", "version": 17, "operation": "ALTER TABLE" }
753
795
  ],
754
- "migration_id": "20261014T191534-alter_table-alter-table-diary-classics-fil-9"
796
+ "migration_id": "20261020T173845-alter_table-alter-table-diary-classics-fil-7"
755
797
  }
756
798
  ```
757
799
 
@@ -778,7 +820,7 @@ Answer:
778
820
  "files_created": 1,
779
821
  "planned_creates": ["datanotes/diary/classics/film/1925/Battleship Potemkin (1925).md"],
780
822
  "commits": [{ "table": "diary.classics.film", "version": 18, "operation": "WRITE" }],
781
- "migration_id": "20261014T191534-insert_row-insert-into-film-4"
823
+ "migration_id": "20261020T173845-insert_row-insert-into-film-3"
782
824
  }
783
825
  ```
784
826
 
@@ -788,7 +830,7 @@ Answer:
788
830
  ---
789
831
  table: diary.classics.film
790
832
  cut: restored
791
- id: 01a13bd7-6708-7c51-9bc8-ec11609a2c93
833
+ id: 01a15a64-ea48-70a1-84d2-829cc3c9da62
792
834
  title: Battleship Potemkin
793
835
  year: 1925
794
836
  minutes: 75
@@ -819,7 +861,7 @@ Answer:
819
861
  "commits": [
820
862
  { "table": "diary.classics.film", "version": 19, "operation": "ALTER TABLE" }
821
863
  ],
822
- "migration_id": "20261014T191534-alter_table-alter-table-diary-classics-fil-10"
864
+ "migration_id": "20261020T173845-alter_table-alter-table-diary-classics-fil-8"
823
865
  }
824
866
  ```
825
867
 
@@ -841,7 +883,7 @@ Answer:
841
883
  "files_created": 1,
842
884
  "planned_creates": ["datanotes/diary/classics/film/1924/Sherlock Jr. (1924).md"],
843
885
  "commits": [{ "table": "diary.classics.film", "version": 20, "operation": "WRITE" }],
844
- "migration_id": "20261014T191534-insert_row-insert-into-film-5"
886
+ "migration_id": "20261020T173845-insert_row-insert-into-film-4"
845
887
  }
846
888
  ```
847
889
 
@@ -851,7 +893,7 @@ Answer:
851
893
  ---
852
894
  table: diary.classics.film
853
895
  cut: restored
854
- id: 01a13bd7-6717-7265-ac31-ce2823c07dc6
896
+ id: 01a15a64-ea5e-737b-a2ef-e105a2e98fdc
855
897
  title: Sherlock Jr.
856
898
  year: 1924
857
899
  minutes: 45
@@ -884,7 +926,7 @@ Answer:
884
926
  "commits": [
885
927
  { "table": "diary.classics.film", "version": 21, "operation": "ALTER TABLE" }
886
928
  ],
887
- "migration_id": "20261014T191534-alter_table-alter-table-diary-classics-fil-11"
929
+ "migration_id": "20261020T173845-alter_table-alter-table-diary-classics-fil-9"
888
930
  }
889
931
  ```
890
932
 
@@ -966,7 +1008,7 @@ Answer:
966
1008
  ```json
967
1009
  {
968
1010
  "ok": true,
969
- "migration_id": "20261014T191534-create_table-create-table-diary-log-watch"
1011
+ "migration_id": "20261020T173845-create_table-create-table-diary-log-watch"
970
1012
  }
971
1013
  ```
972
1014
 
@@ -995,7 +1037,7 @@ Answer:
995
1037
  "files_created": 1,
996
1038
  "planned_creates": ["datanotes/diary/log/watch/2026/10/2026-10-06 2130.md"],
997
1039
  "commits": [{ "table": "diary.log.watch", "version": 1, "operation": "WRITE" }],
998
- "migration_id": "20261014T191534-insert_row-insert-into-watch"
1040
+ "migration_id": "20261020T173845-insert_row-insert-into-watch"
999
1041
  }
1000
1042
  ```
1001
1043
 
@@ -1004,7 +1046,7 @@ Answer:
1004
1046
  ```markdown
1005
1047
  ---
1006
1048
  table: diary.log.watch
1007
- id: 01a13bd7-6747-7f6c-aff2-ff81497a9a02
1049
+ id: 01a15a64-eaa5-7d15-957a-55f01a116533
1008
1050
  film: "[[Nosferatu (1922)]]"
1009
1051
  occurred_at: 2026-10-06T21:30:00+02:00
1010
1052
  where: outdoor screening
@@ -1040,7 +1082,7 @@ Answer:
1040
1082
  "commits": [
1041
1083
  { "table": "sandbox.classics.film_copy", "version": 0, "operation": "CLONE" }
1042
1084
  ],
1043
- "migration_id": "20261014T191534-clone_table-clone-diary-classics-film-to-s"
1085
+ "migration_id": "20261020T173845-clone_table-clone-diary-classics-film-to-s"
1044
1086
  }
1045
1087
  ```
1046
1088
 
@@ -1106,7 +1148,7 @@ Answer:
1106
1148
  "commits": [
1107
1149
  { "table": "sandbox.classics.film_empty", "version": 0, "operation": "CLONE" }
1108
1150
  ],
1109
- "migration_id": "20261014T191534-clone_table-clone-diary-classics-film-to-s-2"
1151
+ "migration_id": "20261020T173845-clone_table-clone-diary-classics-film-to-s-2"
1110
1152
  }
1111
1153
  ```
1112
1154
 
@@ -1188,7 +1230,7 @@ Answer:
1188
1230
  ],
1189
1231
  "planned_texts": ["datanotes/metastore.yaml"],
1190
1232
  "commits": [{ "table": "main.public.scratch", "version": 2, "operation": "DROP TABLE" }],
1191
- "migration_id": "20261014T191516-drop_table-drop-table-scratch"
1233
+ "migration_id": "20261020T173828-drop_table-drop-table-scratch"
1192
1234
  }
1193
1235
  ```
1194
1236
 
@@ -1212,7 +1254,7 @@ The engine wrote this file in its own words. It holds `film`, `watch` and `revie
1212
1254
 
1213
1255
  ```yaml
1214
1256
  # Metastore (Datanotes): catalogs, schemas, tables, columns, views.
1215
- id: 01a13bd7-1943-7bc6-ab38-ab176313afeb
1257
+ id: 01a15a64-a676-7657-9ff4-7a1e6bcc5df3
1216
1258
  config:
1217
1259
  history: true
1218
1260
 
@@ -1271,6 +1313,14 @@ catalogs:
1271
1313
  description: Each time I watch a film
1272
1314
  tags:
1273
1315
  area: films
1316
+ row_template: |
1317
+ Watched {film} ({where}).
1318
+
1319
+
1320
+ ## Thoughts
1321
+ instructions: |
1322
+ 1. Ask me which film I watched, where and with whom.
1323
+ 2. Fill `occurred_at` only when I give a time: it defaults to now.
1274
1324
  options:
1275
1325
  filename: "{occurred_at:YYYY-MM-DD} {film}"
1276
1326
  archive: _archive
@@ -1280,11 +1330,11 @@ catalogs:
1280
1330
  columns:
1281
1331
  - name: id
1282
1332
  type: string
1283
- required: true
1284
- description: "Unique id of the row (UUIDv7): set when the row is created, never changes"
1285
1333
  unique: true
1286
1334
  identity: uuid
1335
+ required: true
1287
1336
  dense: true
1337
+ description: "Unique id of the row (UUIDv7): set when the row is created, never changes"
1288
1338
  - name: film
1289
1339
  type: string
1290
1340
  required: true
@@ -1309,11 +1359,6 @@ catalogs:
1309
1359
  min: 0
1310
1360
  step: 0.01
1311
1361
  description: What the ticket cost, if anything
1312
- row_template: |
1313
- Watched {film} ({where}).
1314
-
1315
-
1316
- ## Thoughts
1317
1362
  review:
1318
1363
  description: What I wrote about a film after watching it
1319
1364
  options:
@@ -41,7 +41,7 @@ Answer:
41
41
  "ok": true,
42
42
  "op": "create_view",
43
43
  "planned_texts": ["datanotes/metastore.yaml"],
44
- "migration_id": "20261014T191527-create_view-create-view-main-public-vw_rec"
44
+ "migration_id": "20261020T173838-create_view-create-view-main-public-vw_rec"
45
45
  }
46
46
  ```
47
47
 
@@ -65,16 +65,16 @@ Answer:
65
65
  "total": 2,
66
66
  "rows": [
67
67
  {
68
- "path": "datanotes/main/public/watch/2026-10-12T2030.md",
68
+ "path": "datanotes/main/public/watch/2026-10-18T2030.md",
69
69
  "film": "[[The Gold Rush]]",
70
- "occurred_at": "2026-10-12T20:30",
70
+ "occurred_at": "2026-10-18T20:30",
71
71
  "where": "home",
72
72
  "place": "my living room"
73
73
  },
74
74
  {
75
- "path": "datanotes/main/public/watch/2026-10-09T2115.md",
75
+ "path": "datanotes/main/public/watch/2026-10-15T2115.md",
76
76
  "film": "[[Charade]]",
77
- "occurred_at": "2026-10-09T21:15",
77
+ "occurred_at": "2026-10-15T21:15",
78
78
  "where": "home",
79
79
  "place": "my living room"
80
80
  }
@@ -156,7 +156,7 @@ Answer:
156
156
  "ok": true,
157
157
  "op": "create_view",
158
158
  "planned_texts": ["datanotes/metastore.yaml"],
159
- "migration_id": "20261014T191527-create_view-create-view-main-public-vw_rec-2"
159
+ "migration_id": "20261020T173838-create_view-create-view-main-public-vw_rec-2"
160
160
  }
161
161
  ```
162
162
 
@@ -194,7 +194,7 @@ Answer:
194
194
  "ok": true,
195
195
  "op": "create_view",
196
196
  "planned_texts": ["datanotes/metastore.yaml"],
197
- "migration_id": "20261014T191527-create_view-create-view-main-public-vw_las"
197
+ "migration_id": "20261020T173838-create_view-create-view-main-public-vw_las"
198
198
  }
199
199
  ```
200
200
 
@@ -214,59 +214,59 @@ Answer (65 lines)
214
214
  {
215
215
  "path": "datanotes/main/public/film/Night of the Living Dead.md",
216
216
  "title": "Night of the Living Dead",
217
- "watched_on": "2026-10-13",
217
+ "watched_on": "2026-10-19",
218
218
  "cast": [
219
219
  {
220
220
  "path": "datanotes/main/public/actor/Duane Jones.md",
221
221
  "table": "main.public.actor",
222
- "id": "01a13bd7-4abf-73f1-b8cf-f4d072fd5faa",
222
+ "id": "01a15a64-cd02-7854-912e-cabd75c26751",
223
223
  "name": "Duane Jones",
224
224
  "born": "1937-04-02"
225
225
  }
226
226
  ],
227
227
  "viewing": [
228
- { "path": "datanotes/main/public/watch/2026-10-13T2200.md", "where": "cinema" }
228
+ { "path": "datanotes/main/public/watch/2026-10-19T2200.md", "where": "cinema" }
229
229
  ]
230
230
  },
231
231
  {
232
232
  "path": "datanotes/main/public/film/The Gold Rush.md",
233
233
  "title": "The Gold Rush",
234
- "watched_on": "2026-10-12",
234
+ "watched_on": "2026-10-18",
235
235
  "cast": [
236
236
  {
237
237
  "path": "datanotes/main/public/actor/Charlie Chaplin.md",
238
238
  "table": "main.public.actor",
239
- "id": "01a13bd7-4a97-7250-b9b6-b9b6170ddca7",
239
+ "id": "01a15a64-cce6-7e75-ad76-6a1acf6fdf25",
240
240
  "name": "Charlie Chaplin",
241
241
  "born": "1889-04-16"
242
242
  }
243
243
  ],
244
244
  "viewing": [
245
- { "path": "datanotes/main/public/watch/2026-10-12T2030.md", "where": "home" }
245
+ { "path": "datanotes/main/public/watch/2026-10-18T2030.md", "where": "home" }
246
246
  ]
247
247
  },
248
248
  {
249
249
  "path": "datanotes/main/public/film/Charade.md",
250
250
  "title": "Charade",
251
- "watched_on": "2026-10-09",
251
+ "watched_on": "2026-10-15",
252
252
  "cast": [
253
253
  {
254
254
  "path": "datanotes/main/public/actor/Cary Grant.md",
255
255
  "table": "main.public.actor",
256
- "id": "01a13bd7-4ab2-7812-a387-d772ffb3490f",
256
+ "id": "01a15a64-ccf1-7ea6-a4ba-74e39aef4496",
257
257
  "name": "Cary Grant",
258
258
  "born": "1904-01-18"
259
259
  },
260
260
  {
261
261
  "path": "datanotes/main/public/actor/Audrey Hepburn.md",
262
262
  "table": "main.public.actor",
263
- "id": "01a13bd7-4abb-77f8-82af-5c32a8a392ef",
263
+ "id": "01a15a64-ccfc-73b5-8bf8-e5a988156438",
264
264
  "name": "Audrey Hepburn",
265
265
  "born": "1929-05-04"
266
266
  }
267
267
  ],
268
268
  "viewing": [
269
- { "path": "datanotes/main/public/watch/2026-10-09T2115.md", "where": "home" }
269
+ { "path": "datanotes/main/public/watch/2026-10-15T2115.md", "where": "home" }
270
270
  ]
271
271
  }
272
272
  ],
@@ -313,7 +313,7 @@ Answer:
313
313
  "ok": true,
314
314
  "op": "create_view",
315
315
  "planned_texts": ["datanotes/metastore.yaml"],
316
- "migration_id": "20261014T191527-create_view-create-view-main-public-vw_mos"
316
+ "migration_id": "20261020T173838-create_view-create-view-main-public-vw_mos"
317
317
  }
318
318
  ```
319
319
 
@@ -382,7 +382,7 @@ Answer:
382
382
  "ok": true,
383
383
  "op": "create_view",
384
384
  "planned_texts": ["datanotes/metastore.yaml"],
385
- "migration_id": "20261014T191527-create_view-create-view-main-public-vw_lat"
385
+ "migration_id": "20261020T173838-create_view-create-view-main-public-vw_lat"
386
386
  }
387
387
  ```
388
388
 
@@ -400,59 +400,59 @@ Answer (64 lines)
400
400
  "total": 4,
401
401
  "rows": [
402
402
  {
403
- "path": "datanotes/main/public/watch/2026-10-13T2200.md",
403
+ "path": "datanotes/main/public/watch/2026-10-19T2200.md",
404
404
  "film": {
405
405
  "path": "datanotes/main/public/film/Night of the Living Dead.md",
406
406
  "table": "main.public.film",
407
- "id": "01a13bd7-4aed-7b64-aca1-e6517bf168a3",
407
+ "id": "01a15a64-cd43-7e4e-8275-3d766d831eab",
408
408
  "title": "Night of the Living Dead",
409
409
  "year": 1968,
410
410
  "minutes": 96,
411
411
  "status": "watched",
412
412
  "rating": 4,
413
- "watched_on": "2026-10-13",
413
+ "watched_on": "2026-10-19",
414
414
  "director": "George A. Romero",
415
415
  "cast": ["[[Duane Jones]]"]
416
416
  },
417
- "occurred_at": "2026-10-13T22:00",
417
+ "occurred_at": "2026-10-19T22:00",
418
418
  "where": "cinema",
419
419
  "_source": "watch"
420
420
  },
421
421
  {
422
- "path": "datanotes/main/public/watch/2026-10-12T2030.md",
422
+ "path": "datanotes/main/public/watch/2026-10-18T2030.md",
423
423
  "film": {
424
424
  "path": "datanotes/main/public/film/The Gold Rush.md",
425
425
  "table": "main.public.film",
426
- "id": "01a13bd7-4ad9-7724-94df-193a3c583568",
426
+ "id": "01a15a64-cd27-7bc5-ac61-1712f0e17cb4",
427
427
  "title": "The Gold Rush",
428
428
  "year": 1925,
429
429
  "minutes": 95,
430
430
  "status": "watched",
431
431
  "rating": 5,
432
- "watched_on": "2026-10-12",
432
+ "watched_on": "2026-10-18",
433
433
  "director": "Charlie Chaplin",
434
434
  "cast": ["[[Charlie Chaplin]]"]
435
435
  },
436
- "occurred_at": "2026-10-12T20:30",
436
+ "occurred_at": "2026-10-18T20:30",
437
437
  "where": "home",
438
438
  "_source": "watch"
439
439
  },
440
440
  {
441
- "path": "datanotes/main/public/watch/2026-10-09T2115.md",
441
+ "path": "datanotes/main/public/watch/2026-10-15T2115.md",
442
442
  "film": {
443
443
  "path": "datanotes/main/public/film/Charade.md",
444
444
  "table": "main.public.film",
445
- "id": "01a13bd7-4ae8-7374-8fea-abdb574685ed",
445
+ "id": "01a15a64-cd3c-767c-8c4e-bd40e8b9597f",
446
446
  "title": "Charade",
447
447
  "year": 1963,
448
448
  "minutes": 113,
449
449
  "status": "watched",
450
450
  "rating": 4,
451
- "watched_on": "2026-10-09",
451
+ "watched_on": "2026-10-15",
452
452
  "director": "Stanley Donen",
453
453
  "cast": ["[[Cary Grant]]", "[[Audrey Hepburn]]"]
454
454
  },
455
- "occurred_at": "2026-10-09T21:15",
455
+ "occurred_at": "2026-10-15T21:15",
456
456
  "where": "home",
457
457
  "_source": "watch"
458
458
  }
@@ -476,14 +476,14 @@ Answer:
476
476
  "ok": true,
477
477
  "op": "drop_view",
478
478
  "planned_texts": ["datanotes/metastore.yaml"],
479
- "migration_id": "20261014T191527-drop_view-drop-view-main-public-vw_most_"
479
+ "migration_id": "20261020T173838-drop_view-drop-view-main-public-vw_most_"
480
480
  }
481
481
  ```
482
482
 
483
483
  **`undo_migration`**
484
484
 
485
485
  ```json
486
- { "migration_id": "20261014T191527-drop_view-drop-view-main-public-vw_most_" }
486
+ { "migration_id": "20261020T173838-drop_view-drop-view-main-public-vw_most_" }
487
487
  ```
488
488
 
489
489
  Answer:
@@ -492,8 +492,8 @@ Answer:
492
492
  {
493
493
  "ok": true,
494
494
  "op": "undo_migration",
495
- "undoes": "20261014T191527-drop_view-drop-view-main-public-vw_most_",
496
- "migration_id": "20261014T191527-undo_migration-undo-20261014t191527-drop_view",
495
+ "undoes": "20261020T173838-drop_view-drop-view-main-public-vw_most_",
496
+ "migration_id": "20261020T173838-undo_migration-undo-20261020t173838-drop_view",
497
497
  "conflicts": [],
498
498
  "failed": []
499
499
  }
@@ -526,7 +526,7 @@ Answer:
526
526
  "ok": true,
527
527
  "op": "create_view",
528
528
  "planned_texts": ["datanotes/metastore.yaml"],
529
- "migration_id": "20261014T191527-create_view-create-view-main-reports-vw_wa"
529
+ "migration_id": "20261020T173838-create_view-create-view-main-reports-vw_wa"
530
530
  }
531
531
  ```
532
532
 
@@ -619,7 +619,7 @@ Answer:
619
619
  ```json
620
620
  {
621
621
  "ok": true,
622
- "migration_id": "20261014T191527-batch-views-for-film-and-actor-notes",
622
+ "migration_id": "20261020T173838-batch-views-for-film-and-actor-notes",
623
623
  "steps": [
624
624
  { "op": "create_view", "ok": true },
625
625
  { "op": "create_view", "ok": true },
@@ -645,13 +645,13 @@ Answer:
645
645
  "total": 2,
646
646
  "rows": [
647
647
  {
648
- "path": "datanotes/main/public/watch/2026-09-25T2100.md",
649
- "occurred_at": "2026-09-25T21:00",
648
+ "path": "datanotes/main/public/watch/2026-10-01T2100.md",
649
+ "occurred_at": "2026-10-01T21:00",
650
650
  "where": "home"
651
651
  },
652
652
  {
653
- "path": "datanotes/main/public/watch/2026-10-12T2030.md",
654
- "occurred_at": "2026-10-12T20:30",
653
+ "path": "datanotes/main/public/watch/2026-10-18T2030.md",
654
+ "occurred_at": "2026-10-18T20:30",
655
655
  "where": "home"
656
656
  }
657
657
  ],
@@ -679,9 +679,9 @@ Answer:
679
679
  "total": 1,
680
680
  "rows": [
681
681
  {
682
- "path": "datanotes/main/public/watch/2026-10-12T2030.md",
682
+ "path": "datanotes/main/public/watch/2026-10-18T2030.md",
683
683
  "film": "[[The Gold Rush]]",
684
- "occurred_at": "2026-10-12T20:30",
684
+ "occurred_at": "2026-10-18T20:30",
685
685
  "where": "home"
686
686
  }
687
687
  ],
@@ -766,7 +766,7 @@ The engine wrote this page’s views under `views:` in their schema, next to the
766
766
 
767
767
  ```yaml
768
768
  # Metastore (Datanotes): catalogs, schemas, tables, columns, views.
769
- id: 01a13bd7-4a81-7458-9957-548732f8e35b
769
+ id: 01a15a64-ccbd-7663-822f-4b752a5e5880
770
770
  config:
771
771
  history: true
772
772