@rehearsal-db/core 0.1.0-beta.9 → 0.1.0-rc.2

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 (247) hide show
  1. package/CHANGELOG.md +319 -1
  2. package/COMPATIBILITY.md +15 -0
  3. package/README.md +73 -16
  4. package/dist/package.json +100 -0
  5. package/dist/scripts/install/create_root_config.d.mts +3 -0
  6. package/dist/scripts/install/create_root_config.mjs +13 -0
  7. package/dist/scripts/runtime/manage_database.d.mts +6 -0
  8. package/{scripts → dist/scripts}/runtime/manage_database.mjs +6 -8
  9. package/dist/src/application/interactive_task.d.mts +30 -0
  10. package/dist/src/application/interactive_task.mjs +83 -0
  11. package/dist/src/application/session.d.mts +97 -0
  12. package/dist/src/application/session.mjs +380 -0
  13. package/dist/src/baseline/artifact.d.mts +119 -0
  14. package/dist/src/baseline/artifact.mjs +522 -0
  15. package/dist/src/baseline/builder.d.mts +19 -0
  16. package/dist/src/baseline/builder.mjs +142 -0
  17. package/dist/src/baseline/input_discovery.d.mts +13 -0
  18. package/dist/src/baseline/input_discovery.mjs +149 -0
  19. package/dist/src/baseline/policy_review.d.mts +56 -0
  20. package/dist/src/baseline/policy_review.mjs +73 -0
  21. package/dist/src/baseline/preparation.d.mts +63 -0
  22. package/dist/src/baseline/preparation.mjs +295 -0
  23. package/dist/src/baseline/privacy_contract.d.mts +147 -0
  24. package/dist/src/baseline/privacy_contract.mjs +2 -0
  25. package/dist/src/baseline/privacy_dependency_graph.d.mts +7 -0
  26. package/dist/src/baseline/privacy_dependency_graph.mjs +110 -0
  27. package/dist/src/baseline/privacy_engine.d.mts +5 -0
  28. package/dist/src/baseline/privacy_engine.mjs +4 -0
  29. package/dist/src/baseline/privacy_key.d.mts +7 -0
  30. package/dist/src/baseline/privacy_key.mjs +42 -0
  31. package/dist/src/baseline/privacy_pipeline.d.mts +7 -0
  32. package/dist/src/baseline/privacy_pipeline.mjs +127 -0
  33. package/dist/src/baseline/privacy_policy.d.mts +6 -0
  34. package/dist/src/baseline/privacy_policy.mjs +237 -0
  35. package/dist/src/baseline/privacy_recipe_validation.d.mts +5 -0
  36. package/dist/src/baseline/privacy_recipe_validation.mjs +289 -0
  37. package/dist/src/baseline/privacy_rule_registry.d.mts +18 -0
  38. package/dist/src/baseline/privacy_rule_registry.mjs +143 -0
  39. package/dist/src/baseline/privacy_structured_json.d.mts +66 -0
  40. package/dist/src/baseline/privacy_structured_json.mjs +464 -0
  41. package/dist/src/baseline/privacy_transforms.d.mts +18 -0
  42. package/dist/src/baseline/privacy_transforms.mjs +142 -0
  43. package/dist/src/baseline/privacy_validation_shared.d.mts +31 -0
  44. package/dist/src/baseline/privacy_validation_shared.mjs +127 -0
  45. package/dist/src/baseline/sanitization_policy.d.mts +69 -0
  46. package/dist/src/baseline/sanitization_policy.mjs +227 -0
  47. package/dist/src/baseline/schema_snapshot.d.mts +19 -0
  48. package/dist/src/baseline/schema_snapshot.mjs +79 -0
  49. package/dist/src/cli/application_command_handlers.d.mts +8 -0
  50. package/dist/src/cli/application_command_handlers.mjs +52 -0
  51. package/dist/src/cli/arguments.d.mts +38 -0
  52. package/dist/src/cli/arguments.mjs +130 -0
  53. package/dist/src/cli/basic_command_handlers.d.mts +4 -0
  54. package/dist/src/cli/basic_command_handlers.mjs +57 -0
  55. package/dist/src/cli/cli_commands.d.mts +14 -0
  56. package/dist/src/cli/cli_commands.mjs +34 -0
  57. package/dist/src/cli/command_contract.d.mts +57 -0
  58. package/dist/src/cli/command_contract.mjs +39 -0
  59. package/dist/src/cli/command_output.d.mts +12 -0
  60. package/dist/src/cli/command_output.mjs +20 -0
  61. package/dist/src/cli/command_registry.d.mts +7 -0
  62. package/dist/src/cli/command_registry.mjs +14 -0
  63. package/dist/src/cli/guided.d.mts +53 -0
  64. package/dist/src/cli/guided.mjs +727 -0
  65. package/dist/src/cli/identity_command_handlers.d.mts +12 -0
  66. package/dist/src/cli/identity_command_handlers.mjs +239 -0
  67. package/dist/src/cli/identity_renderer.d.mts +8 -0
  68. package/dist/src/cli/identity_renderer.mjs +33 -0
  69. package/dist/src/cli/init_command.d.mts +21 -0
  70. package/dist/src/cli/init_command.mjs +90 -0
  71. package/dist/src/cli/inspection_command_handlers.d.mts +3 -0
  72. package/dist/src/cli/inspection_command_handlers.mjs +79 -0
  73. package/dist/src/cli/project_command_handlers.d.mts +11 -0
  74. package/dist/src/cli/project_command_handlers.mjs +92 -0
  75. package/dist/src/cli/project_commands.d.mts +283 -0
  76. package/dist/src/cli/project_commands.mjs +192 -0
  77. package/dist/src/cli/rehearsal.d.mts +7 -0
  78. package/dist/src/cli/rehearsal.mjs +190 -0
  79. package/dist/src/cli/renderers.d.mts +299 -0
  80. package/dist/src/cli/renderers.mjs +554 -0
  81. package/dist/src/cli/runtime_action_handlers.d.mts +12 -0
  82. package/dist/src/cli/runtime_action_handlers.mjs +201 -0
  83. package/dist/src/cli/runtime_commands.d.mts +294 -0
  84. package/dist/src/cli/runtime_commands.mjs +619 -0
  85. package/dist/src/cli/source_command_handlers.d.mts +8 -0
  86. package/dist/src/cli/source_command_handlers.mjs +62 -0
  87. package/dist/src/cli/source_commands.d.mts +436 -0
  88. package/dist/src/cli/source_commands.mjs +301 -0
  89. package/dist/src/cli/terminal.d.mts +59 -0
  90. package/dist/src/cli/terminal.mjs +230 -0
  91. package/dist/src/identity/claim.d.mts +5 -0
  92. package/dist/src/identity/claim.mjs +4 -0
  93. package/dist/src/identity/claim_contract.d.mts +135 -0
  94. package/dist/src/identity/claim_contract.mjs +6 -0
  95. package/dist/src/identity/claim_executor.d.mts +10 -0
  96. package/dist/src/identity/claim_executor.mjs +358 -0
  97. package/dist/src/identity/claim_identity_lookup.d.mts +23 -0
  98. package/dist/src/identity/claim_identity_lookup.mjs +134 -0
  99. package/dist/src/identity/claim_plan.d.mts +8 -0
  100. package/dist/src/identity/claim_plan.mjs +61 -0
  101. package/dist/src/identity/claim_policy.d.mts +3 -0
  102. package/dist/src/identity/claim_policy.mjs +377 -0
  103. package/dist/src/identity/claim_sql.d.mts +10 -0
  104. package/dist/src/identity/claim_sql.mjs +46 -0
  105. package/dist/src/identity/claim_verification.d.mts +13 -0
  106. package/dist/src/identity/claim_verification.mjs +35 -0
  107. package/dist/src/identity/connect.d.mts +30 -0
  108. package/dist/src/identity/connect.mjs +111 -0
  109. package/dist/src/identity/provider_configuration.d.mts +37 -0
  110. package/dist/src/identity/provider_configuration.mjs +132 -0
  111. package/dist/src/identity/storage.d.mts +21 -0
  112. package/dist/src/identity/storage.mjs +122 -0
  113. package/dist/src/index.d.mts +4 -0
  114. package/dist/src/index.mjs +3 -0
  115. package/dist/src/project/configuration.d.mts +13 -0
  116. package/dist/src/project/configuration.mjs +9 -0
  117. package/dist/src/project/configuration_contract.d.mts +125 -0
  118. package/dist/src/project/configuration_contract.mjs +27 -0
  119. package/dist/src/project/configuration_discovery.d.mts +7 -0
  120. package/dist/src/project/configuration_discovery.mjs +37 -0
  121. package/dist/src/project/configuration_normalization.d.mts +107 -0
  122. package/dist/src/project/configuration_normalization.mjs +302 -0
  123. package/dist/src/project/configuration_rendering.d.mts +14 -0
  124. package/dist/src/project/configuration_rendering.mjs +228 -0
  125. package/dist/src/project/configuration_resolution.d.mts +125 -0
  126. package/dist/src/project/configuration_resolution.mjs +81 -0
  127. package/dist/src/project/configuration_schema.d.mts +22 -0
  128. package/dist/src/project/configuration_schema.mjs +160 -0
  129. package/dist/src/project/configuration_validation.d.mts +22 -0
  130. package/dist/src/project/configuration_validation.mjs +136 -0
  131. package/dist/src/project/install_scaffold.d.mts +42 -0
  132. package/dist/src/project/install_scaffold.mjs +263 -0
  133. package/dist/src/project/project_detection.d.mts +14 -0
  134. package/dist/src/project/project_detection.mjs +47 -0
  135. package/dist/src/project/setup.d.mts +87 -0
  136. package/dist/src/project/setup.mjs +414 -0
  137. package/dist/src/project/support_report.d.mts +88 -0
  138. package/dist/src/project/support_report.mjs +83 -0
  139. package/dist/src/runtime/cleanup.d.mts +85 -0
  140. package/dist/src/runtime/cleanup.mjs +311 -0
  141. package/dist/src/runtime/lifecycle_engine.d.mts +63 -0
  142. package/dist/src/runtime/lifecycle_engine.mjs +114 -0
  143. package/dist/src/runtime/migration_history.d.mts +51 -0
  144. package/dist/src/runtime/migration_history.mjs +170 -0
  145. package/dist/src/runtime/plan.d.mts +134 -0
  146. package/dist/src/runtime/plan.mjs +640 -0
  147. package/dist/src/runtime/policy.d.mts +66 -0
  148. package/dist/src/runtime/policy.mjs +369 -0
  149. package/dist/src/runtime/restore.d.mts +22 -0
  150. package/dist/src/runtime/restore.mjs +276 -0
  151. package/dist/src/runtime/service_environment.d.mts +11 -0
  152. package/dist/src/runtime/service_environment.mjs +58 -0
  153. package/dist/src/runtime/topology.d.mts +51 -0
  154. package/dist/src/runtime/topology.mjs +128 -0
  155. package/dist/src/shared/diagnostics.d.mts +97 -0
  156. package/dist/src/shared/diagnostics.mjs +170 -0
  157. package/dist/src/shared/human_output.d.mts +2 -0
  158. package/{src → dist/src}/shared/human_output.mjs +1 -3
  159. package/dist/src/shared/node_runtime.d.mts +14 -0
  160. package/dist/src/shared/node_runtime.mjs +25 -0
  161. package/dist/src/shared/operation_guard.d.mts +22 -0
  162. package/dist/src/shared/operation_guard.mjs +150 -0
  163. package/dist/src/shared/process_environment.d.mts +15 -0
  164. package/dist/src/shared/process_environment.mjs +50 -0
  165. package/dist/src/source/access.d.mts +165 -0
  166. package/dist/src/source/access.mjs +602 -0
  167. package/dist/src/source/asset_transfer.d.mts +27 -0
  168. package/dist/src/source/asset_transfer.mjs +202 -0
  169. package/dist/src/source/baseline.d.mts +66 -0
  170. package/dist/src/source/baseline.mjs +372 -0
  171. package/dist/src/source/external_reader.d.mts +42 -0
  172. package/dist/src/source/external_reader.mjs +278 -0
  173. package/dist/src/source/postgresql_access.d.mts +86 -0
  174. package/dist/src/source/postgresql_access.mjs +454 -0
  175. package/dist/src/source/privacy_paths.d.mts +10 -0
  176. package/dist/src/source/privacy_paths.mjs +27 -0
  177. package/dist/src/targets/driver.d.mts +2 -0
  178. package/dist/src/targets/driver.mjs +13 -0
  179. package/dist/src/targets/postgresql.d.mts +5 -0
  180. package/dist/src/targets/postgresql.mjs +620 -0
  181. package/dist/src/targets/supabase.d.mts +8 -0
  182. package/dist/src/targets/supabase.mjs +629 -0
  183. package/dist/src/targets/supabase_environment.d.mts +54 -0
  184. package/dist/src/targets/supabase_environment.mjs +184 -0
  185. package/dist/src/targets/target.d.mts +33 -0
  186. package/dist/src/targets/target.mjs +39 -0
  187. package/docs/README.md +35 -16
  188. package/docs/architecture.md +135 -10
  189. package/docs/commands.md +53 -15
  190. package/docs/configuration.md +186 -31
  191. package/docs/getting-started.md +66 -9
  192. package/docs/index.md +67 -0
  193. package/docs/production-source.md +175 -17
  194. package/docs/releasing.md +24 -12
  195. package/docs/roadmap.md +3 -2
  196. package/docs/runtime-lifecycle.md +99 -0
  197. package/docs/runtime-policies.md +80 -7
  198. package/docs/sanitization.md +572 -4
  199. package/docs/security-model.md +8 -0
  200. package/docs/stability.md +70 -0
  201. package/docs/standalone-workflow.md +36 -13
  202. package/docs/troubleshooting.md +82 -10
  203. package/docs/tutorial.md +7 -1
  204. package/docs/typescript.md +134 -0
  205. package/package.json +44 -29
  206. package/types/configuration.d.mts +5 -0
  207. package/src/README.md +0 -17
  208. package/src/application/session.mjs +0 -313
  209. package/src/baseline/artifact.mjs +0 -661
  210. package/src/baseline/builder.mjs +0 -164
  211. package/src/baseline/input_discovery.mjs +0 -155
  212. package/src/baseline/policy_review.mjs +0 -92
  213. package/src/baseline/preparation.mjs +0 -323
  214. package/src/baseline/privacy_engine.mjs +0 -413
  215. package/src/baseline/sanitization_policy.mjs +0 -299
  216. package/src/baseline/schema_snapshot.mjs +0 -113
  217. package/src/cli/arguments.mjs +0 -120
  218. package/src/cli/guided.mjs +0 -807
  219. package/src/cli/rehearsal.mjs +0 -933
  220. package/src/cli/renderers.mjs +0 -584
  221. package/src/cli/runtime_commands.mjs +0 -553
  222. package/src/cli/source_commands.mjs +0 -326
  223. package/src/cli/terminal.mjs +0 -275
  224. package/src/identity/claim.mjs +0 -975
  225. package/src/identity/storage.mjs +0 -165
  226. package/src/project/configuration.d.mts +0 -153
  227. package/src/project/configuration.mjs +0 -1197
  228. package/src/project/setup.mjs +0 -379
  229. package/src/project/support_report.mjs +0 -105
  230. package/src/runtime/cleanup.mjs +0 -381
  231. package/src/runtime/migration_history.mjs +0 -220
  232. package/src/runtime/plan.mjs +0 -685
  233. package/src/runtime/policy.mjs +0 -438
  234. package/src/runtime/restore.mjs +0 -329
  235. package/src/runtime/service_environment.mjs +0 -82
  236. package/src/runtime/topology.mjs +0 -177
  237. package/src/shared/diagnostics.mjs +0 -199
  238. package/src/shared/operation_guard.mjs +0 -162
  239. package/src/shared/process_environment.mjs +0 -68
  240. package/src/source/access.mjs +0 -578
  241. package/src/source/asset_transfer.mjs +0 -177
  242. package/src/source/baseline.mjs +0 -446
  243. package/src/source/postgresql_access.mjs +0 -480
  244. package/src/targets/postgresql.mjs +0 -808
  245. package/src/targets/supabase.mjs +0 -830
  246. package/src/targets/supabase_environment.mjs +0 -229
  247. package/src/targets/target.mjs +0 -66
package/CHANGELOG.md CHANGED
@@ -5,6 +5,313 @@ a Changelog, and versions will follow Semantic Versioning after the package exis
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## [0.1.0-rc.2] - 2026-10-09
9
+
10
+ ### Changed
11
+
12
+ - Container-engine startup is now explicit by default. Rehearsal starts Colima only
13
+ when a project deliberately enables `containerRuntime.autoStartColima`, reports that
14
+ action, and never silently stops the shared engine.
15
+ - Package-managed Supabase containers use Docker's non-resuming restart policy after
16
+ each start, preventing stopped Rehearsal stacks from waking merely because Docker or
17
+ Colima restarts. Exact Supabase project labels keep the change inside the selected
18
+ disposable target.
19
+ - Runtime diagnostics and a new lifecycle guide explain which commands need Docker,
20
+ what remains running, and how to finish a low-memory local session without pruning or
21
+ deleting persistent data.
22
+
23
+ ### Fixed
24
+
25
+ - A stopped Colima VM no longer restarts from a default Rehearsal configuration.
26
+ - Independent Test Lab acceptance now reaps exact workspace-owned interactive children
27
+ after success, failure, interruption, and timeout.
28
+
29
+ ## [0.1.0-rc.1] - 2026-10-08
30
+
31
+ ### Changed
32
+
33
+ - Promotes the exact beta.18 behavior and documented compatibility surface to the first
34
+ release candidate. No runtime, configuration, policy, CLI, or public TypeScript
35
+ capability changed after beta.18.
36
+ - Broad feature work is frozen while the release candidate completes two independent
37
+ Test Lab passes, one final package-only consumer upgrade, and its observation window.
38
+
39
+ ## [0.1.0-beta.18] - 2026-10-08
40
+
41
+ ### Added
42
+
43
+ - A concise stability contract now defines the supported public surface, defects that
44
+ block the first stable release, and the exact beta-to-RC-to-stable promotion gate.
45
+ - Automated release-policy tests cover beta, release-candidate, stable, malformed, and
46
+ mismatched GitHub release metadata.
47
+
48
+ ### Changed
49
+
50
+ - Protected OIDC publication now supports both prerelease and stable versions. Beta and
51
+ release-candidate versions update `beta`; once a stable version exists they cannot
52
+ replace `latest`. Stable publication updates `latest` without rewriting `beta`.
53
+ - npm channel selection lives only in the protected release workflow instead of static
54
+ package metadata, and missing beta.16 and beta.17 changelog comparisons are restored.
55
+ - Vitest's locked patch release is updated from 5.0.2 to 5.0.3 after the complete CI
56
+ matrix passed.
57
+
58
+ ## [0.1.0-beta.17] - 2026-10-08
59
+
60
+ ### Added
61
+
62
+ - `rehearsal identity connect` and the guided home screen now keep the sandbox app
63
+ available during ordinary provider sign-in, detect exactly one approved verified local
64
+ identity, show a redacted copied-account preview, and apply the existing exact claim
65
+ after one deliberate confirmation. The app is reopened automatically with an honest
66
+ fresh-session instruction; explicit `identity plan` and `identity claim` commands remain
67
+ available for scripts.
68
+
69
+ ## [0.1.0-beta.16] - 2026-10-08
70
+
71
+ ### Changed
72
+
73
+ - The CLI now routes guided and scripted requests through focused typed command
74
+ handlers and one result/output contract. The executable retains only process
75
+ lifecycle, project locking, guided-loop coordination, and top-level error handling;
76
+ command-session caches no longer live in public parsed flags.
77
+ - Configuration now passes through separate discovery, raw-schema validation,
78
+ normalization, project-root path resolution, project detection, and starter-rendering
79
+ modules behind the existing import path. Public declarations come from the same
80
+ TypeScript source, including the new `NormalizedRehearsalConfig` type.
81
+ - Installed-consumer verification now shares one scenario catalog, artifact installer,
82
+ isolated workspace boundary, process boundary, and persistent application-session
83
+ helper. The complete release gate runs every scenario against one immutable tarball
84
+ and records its exact version, SHA-256, tool environment, commands, timings, and
85
+ results.
86
+ - Identity policy validation, deterministic claim planning, SQL generation, local Auth
87
+ lookup, pure verification, and transactional execution now live in separate typed
88
+ stages behind the unchanged public claim API. Generated reference SQL is independently
89
+ testable, while only the executor can mutate the local database or Storage runtime.
90
+ - PostgreSQL and Supabase now share one typed runtime lifecycle engine for command
91
+ dispatch, active-baseline loading, migration confirmation and receipts, runtime
92
+ markers, and rollback. Candidate receipts are bound to their exact database target,
93
+ while each driver retains its own ownership proof and database-specific behavior.
94
+ - Privacy policy types, recipe normalization, dependency validation, deterministic
95
+ transforms, structured JSON, rule dispatch, row execution, and key handling now live
96
+ in focused typed stages behind the unchanged public privacy import. An explicit closed
97
+ registry covers every supported action and derivation without widening policy v2.
98
+
99
+ ## [0.1.0-beta.15] - 2026-10-08
100
+
101
+ ### Added
102
+
103
+ - A strict, no-emit TypeScript gate now checks the first shared runtime utilities and
104
+ verifies that consumers can compile against Rehearsal's public configuration types.
105
+ - The documentation site now explains the supported TypeScript surface with examples
106
+ that are compiled and checked against their rendered documentation source.
107
+ - All shipped implementation and executable-helper source now uses TypeScript. Clean
108
+ builds emit Node-compatible ESM and declarations into the reviewed package boundary,
109
+ and tests exercise that compiled output rather than an alternate source path.
110
+ - The published build omits repository-only JavaScript source maps while retaining
111
+ runtime JavaScript and declarations, keeping the installed package compact.
112
+
113
+ ### Fixed
114
+
115
+ - Packed onboarding chooses an available local port block for preserved configuration
116
+ fixtures, so unrelated running Rehearsal projects cannot make the isolation test fail.
117
+
118
+ ## [0.1.0-beta.14] - 2026-10-05
119
+
120
+ ### Added
121
+
122
+ - Packed-package onboarding is now a required CI job. It covers fresh Supabase and
123
+ PostgreSQL installs, beta.7 configuration preservation, missing credentials, occupied
124
+ ports, malformed configuration, and non-destructive partial-setup recovery.
125
+ - The independent test lab can run the same first-install boundary against an exact
126
+ candidate tarball before either database lifecycle.
127
+ - Installation and setup now report the exact active Rehearsal configuration path and
128
+ explain when a supported existing nested config prevents root-file generation.
129
+ - Packed-package onboarding covers fresh, nested, existing-root, and repeated installs
130
+ while proving reviewed configuration bytes are preserved.
131
+ - Privacy policy version 2 can explicitly treat nullable owners as non-matches and match
132
+ an approved owner through any of a bounded list of pseudonymized identity columns.
133
+ - Bounded JSON unions classify each permitted root type, while JSON dictionaries require
134
+ reviewed runtime-key formats, key actions, value recipes, and item/depth/byte limits.
135
+ - JSON dictionaries can restrict runtime keys to canonical signed integers within an
136
+ explicit safe-integer range, preserving positive, negative, and reviewed zero keys
137
+ without widening numeric maps to arbitrary text.
138
+ - Date shifting can explicitly preserve numeric epoch-millisecond representation,
139
+ including inside structured JSON, while sharing a stable grouped offset with related
140
+ epoch or ISO-string dates.
141
+ - Bounded scalar enums retain only explicitly reviewed structural strings, finite
142
+ numbers, or booleans inside ordinary fields and nested JSON declarations, rejecting
143
+ out-of-domain values without echoing them in diagnostics.
144
+ - Validated strings preserve bounded, case-sensitive structural codes from open domains
145
+ using a package-owned portable alphabet, refusing credential-shaped and malformed
146
+ text without consumer regexes, callbacks, or static identifier lists.
147
+ - Keyed hexadecimal and GTIN pseudonyms preserve reviewed database constraints, while
148
+ fixed-width digest recipes derive fingerprints only from explicitly named sanitized
149
+ columns and reject missing, excluded, duplicate, or cyclic inputs.
150
+ - A single GTIN recipe can declare reviewed `allowedLengths`, preserving each source
151
+ value's 8-, 12-, 13-, or 14-digit shape and check digit even inside structured JSON.
152
+ - Keyed URL pseudonyms replace private HTTPS URLs with deterministic, bounded HTTPS
153
+ loopback paths without retaining source hosts, paths, credentials, queries, or tokens.
154
+ - Bounded binding substitution can retain permitted surrounding text while replacing
155
+ exact occurrences of a reviewed UUID with its corresponding keyed UUID pseudonym.
156
+ - External PostgreSQL readers can declare a bounded exact allowlist of provider-owned
157
+ permission groups. Rehearsal verifies safe membership options, group attributes,
158
+ nesting, view ownership, and the complete effective privilege surface.
159
+
160
+ ### Documentation
161
+
162
+ - First-time users now have a short recovery table for interrupted setup, failed
163
+ upgrades, port conflicts, missing OAuth credentials, and low Docker capacity.
164
+ - The configuration guide documents a safe manual move to the project root, separating
165
+ config-file-relative JavaScript imports from project-root-relative Rehearsal paths.
166
+ - The sanitization guide documents nullable and multi-column ownership, heterogeneous
167
+ JSON values, runtime-keyed dictionaries, keyed HTTPS replacements, bounded identity
168
+ substitution, and their fail-closed boundaries.
169
+
170
+ ### Fixed
171
+
172
+ - Source preparation now stores and reads each target's access receipt and owner-only
173
+ reader credential under its configured baseline artifact directory. Nested and
174
+ multi-target state roots no longer collide, and retirement refuses a receipt from a
175
+ different target root.
176
+ - Supabase Storage source preparation now recursively traverses real folder placeholder
177
+ entries while keeping the approved prefix, path, depth, object-count, per-object, and
178
+ total-byte boundaries fail closed.
179
+ - Approved-owner selection now rejects non-finite numeric values in every declared
180
+ owner column before choosing a privacy branch, including when another column already
181
+ matches the approved owner.
182
+ - Pseudonymized canonical integer dictionary keys now share the same keyed identity
183
+ mapping as numeric columns and nested numeric values using the same namespace, so
184
+ runtime maps keep their reviewed cross-representation joins.
185
+ - External-reader membership mismatches now return a redacted, actionable source
186
+ authorization refusal instead of an internal-failure diagnostic.
187
+ - All external-reader privilege, expiration, readable-surface, and security-definer
188
+ denials now use the same `SOURCE_AUTHORIZATION_REFUSED` diagnostic and exit code 3.
189
+ - Identity claims now sequence PostgreSQL reads on their single transaction client,
190
+ avoiding deprecated overlapping queries and remaining compatible with pg 9.
191
+
192
+ ## [0.1.0-beta.13] - 2026-10-05
193
+
194
+ ### Added
195
+
196
+ - Runtime and CI compatibility now cover maintained Node.js 22, 24, and 26 releases;
197
+ Node.js 24 LTS remains the recommended default and release-build runtime.
198
+ - Source access policies can use an externally provisioned, database-expiring
199
+ PostgreSQL reader without administrator credentials. Rehearsal binds canonical export
200
+ view definitions, verifies the complete approved read surface and deny controls, and
201
+ never changes or retires provider-owned source objects.
202
+ - `rehearsal --version`, its conventional `-V` alias, and `rehearsal version` now
203
+ report the installed package version without requiring project configuration.
204
+ - Privacy policy version 2 can use one reviewed identity-aware path mapping for both
205
+ database references and physical Storage destinations. Owner prefixes stay in the
206
+ environment, review plans retain only their hashes, and unsafe or mismatched paths
207
+ fail closed.
208
+ - Related timestamps can share a named deterministic date-shift group, preserving their
209
+ ordering and duration without consumer callbacks.
210
+ - The baseline verification corpus now exercises two unrelated target schemas, a
211
+ 10,003-row packed-package stream, concurrent row/schema/ledger changes, malformed and
212
+ truncated results, connection loss, low disk, interruption, and deterministic
213
+ fixed-key output.
214
+
215
+ ### Fixed
216
+
217
+ - Baseline preparation now rejects missing, negative, overflowing, malformed, or
218
+ oversized PostgreSQL estimate and cursor results before activation. Every preparation
219
+ failure preserves the active baseline, removes private staging, and leaves an edited
220
+ runtime untouched.
221
+ - Approved-owner UUID columns are no longer confused with PostgreSQL sequence-backed
222
+ identities. Restore checks the actual local schema before resetting a sequence, while
223
+ genuine numeric identity columns retain correct next-value behavior.
224
+ - A failed Storage transfer now recursively restores write permission only within its
225
+ owned staging tree, removes that incomplete generation, and preserves the original
226
+ safe preparation error instead of replacing it with a cleanup error.
227
+ - Storage preparation now records a canonical media type from reviewed object metadata,
228
+ removing response-only parameters such as a text charset that local bucket MIME
229
+ allowlists reject during restore.
230
+ - Container startup and health failures are now classified as runtime dependency
231
+ failures and include safe Docker/Colima capacity context instead of being mislabeled
232
+ as migration verification failures.
233
+
234
+ ## [0.1.0-beta.12] - 2026-10-04
235
+
236
+ ### Added
237
+
238
+ - Supabase projects can declaratively configure local Google or GitHub OAuth in
239
+ `rehearsal.config.mjs`. Rehearsal derives the credential allowlist, injects only the
240
+ ignored owner-only environment values, and generates the exact loopback callback in
241
+ the disposable runtime without tracking secrets. Local signup requires an explicit
242
+ acknowledgment and is enabled only in that generated runtime copy.
243
+ - Branded, responsive documentation is now hosted on GitHub Pages with searchable
244
+ navigation, light and dark themes, and automatic deployment from `main`.
245
+ - The documentation home page and packaged README show the live monthly npm download
246
+ count and link directly to the npm package.
247
+ - Packed-package onboarding acceptance now proves both fresh root-config creation and a
248
+ real beta.11 upgrade that preserves the user's existing configuration byte for byte.
249
+
250
+ ### Changed
251
+
252
+ - The packaged README now links prominently to the hosted documentation, npm package,
253
+ and issue tracker. Package homepage metadata also points to the hosted documentation.
254
+ - GitHub Pages publishing uses the current Node.js 24 action generations without legacy
255
+ runtime warnings.
256
+ - `rehearsal init` now calls out important optional settings that are available but not
257
+ enabled before showing the current installed-release template.
258
+
259
+ ### Fixed
260
+
261
+ - Existing Google or GitHub provider sections can transition to declarative ownership
262
+ without editing the tracked Supabase template. Rehearsal replaces only a compatible
263
+ section in the disposable runtime copy, while `doctor` refuses ambiguous or
264
+ safety-weakening provider settings before reset.
265
+ - Multi-target plain-text plans now print each declarative OAuth callback, and `init`
266
+ advertises the declarative replacement even when a project still uses legacy provider
267
+ fields.
268
+
269
+ ## [0.1.0-beta.11] - 2026-10-03
270
+
271
+ ### Added
272
+
273
+ - Privacy policy version 2 now supports hashed approved-owner bindings, conditional
274
+ approved/other-owner transformations, bounded JSON arrays, nested recipes, and
275
+ explicitly optional object fields without consumer sanitizer callbacks.
276
+ - Local npm installs now create a validated, commented project-root
277
+ `rehearsal.config.mjs`, dedicated local runtime configuration, and additive safe ignore
278
+ entries when exactly one consumer application can be proven. Guided setup remains the
279
+ tested recovery path when lifecycle scripts are disabled or a workspace is ambiguous.
280
+ - Copied-account association accepts explicit verified-email provider allowlists and
281
+ hashed provider-subject matchers for supported Supabase identities. Google, GitHub,
282
+ and email sign-in now share one review-and-confirm claim workflow.
283
+
284
+ ### Changed
285
+
286
+ - Setup is idempotent, supported custom config paths are preserved, `.gitignore` updates
287
+ use an exclusive lock and atomic replacement, and `rehearsal init` shows the current
288
+ release template without replacing an existing config.
289
+
290
+ ### Fixed
291
+
292
+ - Identity plan JSON no longer serializes the raw approved email or provider subject;
293
+ only the environment-variable name and reviewed SHA-256 receipt leave the process.
294
+
295
+ ## [0.1.0-beta.10] - 2026-10-03
296
+
297
+ ### Added
298
+
299
+ - `rehearsal open` starts and verifies the configured runtime stack, launches the normal
300
+ application with declared local environment mappings, and keeps it available for
301
+ hands-on testing until interrupted.
302
+ - The guide now offers **Open the sandbox app** after a runtime exists.
303
+
304
+ ### Changed
305
+
306
+ - Persistent application sessions stop only their owned application process group on
307
+ `Ctrl+C`, `Ctrl+Z`, terminal close, or termination. The database and Storage runtime
308
+ stay running with local changes preserved across later sessions.
309
+
310
+ ### Fixed
311
+
312
+ - `rehearsal open` keeps interruption handling active throughout application teardown,
313
+ so an npm-forwarded `Ctrl+C` cannot terminate the CLI early or orphan the app.
314
+
8
315
  ## [0.1.0-beta.9] - 2026-10-02
9
316
 
10
317
  ### Added
@@ -268,7 +575,18 @@ a Changelog, and versions will follow Semantic Versioning after the package exis
268
575
  publication uses short-lived trusted OIDC, and every release tag must already exist on
269
576
  protected `main`.
270
577
 
271
- [Unreleased]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.9...HEAD
578
+ [Unreleased]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-rc.2...HEAD
579
+ [0.1.0-rc.2]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-rc.1...v0.1.0-rc.2
580
+ [0.1.0-rc.1]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.18...v0.1.0-rc.1
581
+ [0.1.0-beta.18]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.17...v0.1.0-beta.18
582
+ [0.1.0-beta.17]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.16...v0.1.0-beta.17
583
+ [0.1.0-beta.16]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.15...v0.1.0-beta.16
584
+ [0.1.0-beta.15]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.14...v0.1.0-beta.15
585
+ [0.1.0-beta.14]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.13...v0.1.0-beta.14
586
+ [0.1.0-beta.13]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.12...v0.1.0-beta.13
587
+ [0.1.0-beta.12]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.11...v0.1.0-beta.12
588
+ [0.1.0-beta.11]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.10...v0.1.0-beta.11
589
+ [0.1.0-beta.10]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.9...v0.1.0-beta.10
272
590
  [0.1.0-beta.9]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.8...v0.1.0-beta.9
273
591
  [0.1.0-beta.8]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.7...v0.1.0-beta.8
274
592
  [0.1.0-beta.7]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.6...v0.1.0-beta.7
package/COMPATIBILITY.md CHANGED
@@ -21,6 +21,21 @@ The first stable `1.0.0` requires external beta evidence, a support policy, and
21
21
  public API. Supporting additional database families, package managers, or operating
22
22
  systems is not implied by the 0.x contract.
23
23
 
24
+ Rehearsal supports maintained even-numbered Node.js release lines that pass its CI
25
+ matrix. Beta.13 supports Node.js 22, 24, and 26; Node.js 24 LTS is the recommended
26
+ default and the release-build runtime. End-of-life and odd-numbered Node.js releases are
27
+ not supported. A future release may remove a Node.js line after its upstream end-of-life
28
+ date, with that change called out in the changelog.
29
+
30
+ The npm install hook may create project scaffolding only when it proves one application
31
+ root. Ordinary npm application installs are covered. A workspace is automatic only when
32
+ one declaring consumer is already visible in its manifest or lockfile; npm can save a
33
+ new `--workspace` declaration after dependency hooks run, so a first workspace install
34
+ may use the guided fallback. pnpm and Yarn install layouts are not yet an
35
+ automatic-generation contract. Run `npx rehearsal` from the application directory for
36
+ all skipped cases. Global, cache, temporary `npx`, and ambiguous multi-application
37
+ workspace installs do not receive files.
38
+
24
39
  The PostgreSQL target covers timestamped SQL migrations running in a dedicated local
25
40
  `postgres` Docker image. Runtime commands reject hosted connection strings and existing
26
41
  unmanaged servers. The separately opted-in PostgreSQL preparation boundary may use a
package/README.md CHANGED
@@ -1,8 +1,39 @@
1
- # Rehearsal
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/Ddupasquier/rehearsal-db/main/docs/site/logo-mark.svg" width="104" height="104" alt="Rehearsal logo" />
3
+ </p>
2
4
 
3
- Rehearsal tests PostgreSQL and Supabase migrations on your computer before you run them
4
- anywhere important. It restores safe test data into a disposable local database, applies
5
- only the migrations you approve, and runs your project's own test command.
5
+ <h1 align="center">Rehearsal</h1>
6
+
7
+ <p align="center"><strong>Your migration passed on an empty database. Production will not be empty.</strong></p>
8
+
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/package/@rehearsal-db/core"><img alt="npm version" src="https://img.shields.io/npm/v/%40rehearsal-db%2Fcore?style=flat-square&logo=npm&logoColor=white&labelColor=1c2a34&color=287b5c" /></a>
11
+ <a href="https://www.npmjs.com/package/@rehearsal-db/core"><img alt="Monthly npm downloads" src="https://img.shields.io/npm/dm/%40rehearsal-db%2Fcore?style=flat-square&logo=npm&logoColor=white&label=downloads&labelColor=1c2a34&color=287b5c" /></a>
12
+ <a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/npm/l/%40rehearsal-db%2Fcore?style=flat-square&labelColor=1c2a34&color=287b5c" /></a>
13
+ <a href="https://ddupasquier.github.io/rehearsal-db/"><img alt="Read the documentation" src="https://img.shields.io/badge/docs-read_the_guide-269fab?style=flat-square&labelColor=1c2a34" /></a>
14
+ </p>
15
+
16
+ <p align="center">
17
+ <a href="https://ddupasquier.github.io/rehearsal-db/">Read the documentation</a> ·
18
+ <a href="https://www.npmjs.com/package/@rehearsal-db/core">View on npm</a> ·
19
+ <a href="https://github.com/Ddupasquier/rehearsal-db/issues">Report a problem</a>
20
+ </p>
21
+
22
+ Most migration tests start with an empty database. Production does not.
23
+
24
+ Existing rows, relationships, authentication identities, stored files, and migration
25
+ history are where risky changes break. A migration can build successfully and still fail
26
+ against the data and application behavior you actually have.
27
+
28
+ **Rehearsal catches those problems before deployment.** It restores a reviewed,
29
+ sanitized baseline into a disposable local PostgreSQL or Supabase environment, applies
30
+ only the exact migrations you approve, and runs your application's own proof.
31
+
32
+ | An empty database cannot prove… | Rehearsal lets you verify… |
33
+ | ---------------------------------------------------- | ------------------------------------------------------------ |
34
+ | old rows still satisfy new constraints | the migration against a reviewed, production-shaped copy |
35
+ | relationships, identities, and stored files survive | database, Auth, and Storage behavior in one local sandbox |
36
+ | the application still works after the schema changes | your own tests and hands-on flows before anything is shipped |
6
37
 
7
38
  Projects with a separate publication or read-model database can declare it as a
8
39
  dependent target. Rehearsal then manages the complete isolated runtime stack.
@@ -13,12 +44,12 @@ it through a reviewed privacy policy, and retire the access again. It is never p
13
44
  `run`, `reset`, `migrate`, or application launch. Rehearsal is not a backup system or a
14
45
  production deployment tool.
15
46
 
16
- > Rehearsal is in public beta. Use it on a branch and keep a working backup of your
47
+ > **Pre-1.0 safety note:** use Rehearsal on a branch and keep a working backup of your
17
48
  > project.
18
49
 
19
50
  ## What you need
20
51
 
21
- - Node.js 24 and npm
52
+ - Node.js 22, 24, or 26 and npm (Node.js 24 LTS recommended)
22
53
  - Docker Desktop, Colima, or another Docker-compatible engine
23
54
  - timestamped `.sql` migration files
24
55
  - a project test command that can prove the migrated application works
@@ -33,15 +64,21 @@ your migration is intended to change.
33
64
  From your project directory:
34
65
 
35
66
  ```bash
36
- npm install --save-dev @rehearsal-db/core@beta
67
+ npm install --save-dev @rehearsal-db/core
37
68
  npx rehearsal
38
69
  ```
39
70
 
40
- The first run detects your project and offers to create a commented
41
- `rehearsal.config.mjs` with the project name, migration paths, commands, ports, and safe
42
- defaults already filled in. Choose **Set the stage**, select Supabase or PostgreSQL,
43
- review the preview, and confirm the files it will create. Existing files are never
44
- overwritten.
71
+ For an ordinary npm application install, Rehearsal safely creates a commented
72
+ `rehearsal.config.mjs` in the project root, adds only its local-artifact entries to
73
+ `.gitignore`, and prepares the isolated local runtime configuration. It detects the
74
+ project name, database target, migration paths, commands, and free ports. Review lines
75
+ marked `CHECK`, then open the guide. Existing files are never overwritten. If a supported
76
+ root or nested config already exists, Rehearsal reports that active path and does not
77
+ create a competing file; see [Configuration](docs/configuration.md#workspaces-and-custom-paths).
78
+
79
+ If install scripts are disabled or the workspace root is ambiguous, installation makes
80
+ no guess. Run `npx rehearsal` inside the application and choose **Set the stage** for the
81
+ same previewed setup.
45
82
 
46
83
  For PostgreSQL, download the reviewed local image once before running the guide:
47
84
 
@@ -51,6 +88,11 @@ docker pull postgres:17-alpine
51
88
 
52
89
  Rehearsal itself never downloads a database image during a rehearsal.
53
90
 
91
+ For local Google or GitHub sign-in, the generated config includes a commented
92
+ `supabase.authentication` example. It names an ignored owner-only credential file;
93
+ Rehearsal generates the provider block and local callback inside the disposable runtime.
94
+ See [Supabase authentication](docs/configuration.md#supabase-authentication).
95
+
54
96
  ## Three terms you will see
55
97
 
56
98
  - **Baseline:** a locked, safe starting copy of your schema and test data.
@@ -64,11 +106,17 @@ source-owner approval; see [Standalone workflow](docs/standalone-workflow.md).
64
106
  ## The normal workflow
65
107
 
66
108
  1. Run `npx rehearsal`.
67
- 2. Let the guide create the local-only configuration.
109
+ 2. Review the generated local-only configuration, or let the guide create it when the
110
+ install hook safely skipped it.
68
111
  3. Review the sanitization policy and create the baseline.
69
112
  4. Review the exact candidate migration list.
70
113
  5. Run the rehearsal and your application proof.
71
- 6. Test the local application, then verify, reset, stop, or discard the runtime.
114
+ 6. Choose **Open the sandbox app** for hands-on testing, then verify, reset, stop, or
115
+ discard the runtime.
116
+
117
+ `npx rehearsal open` starts and verifies the existing local runtime, keeps the configured
118
+ app available until you press `Ctrl+C`, and preserves database and Storage changes for
119
+ the next session.
72
120
 
73
121
  For an approved production-shaped copy, the optional sequence is `source plan`, `source
74
122
  apply`, `refresh`, and `source retire`. `refresh` verifies the replacement before it
@@ -114,7 +162,7 @@ See [COMPATIBILITY.md](COMPATIBILITY.md) for the exact support contract.
114
162
 
115
163
  Start here:
116
164
 
117
- - [Documentation map](docs/README.md) — find the right guide quickly
165
+ - [Documentation home](docs/index.md) — choose the shortest path for your goal
118
166
  - [Getting started](docs/getting-started.md) — set up your own project
119
167
  - [Safe hands-on tutorial](docs/tutorial.md) — try the full flow in a disposable project
120
168
  - [Troubleshooting](docs/troubleshooting.md) — fix common setup problems
@@ -124,6 +172,8 @@ Reference:
124
172
 
125
173
  - [CLI commands](docs/commands.md)
126
174
  - [Configuration](docs/configuration.md)
175
+ - [Container runtime lifecycle](docs/runtime-lifecycle.md) — keep Docker and Supabase use on demand
176
+ - [TypeScript types](docs/typescript.md)
127
177
  - [Baselines](docs/baselines.md)
128
178
  - [Sanitization](docs/sanitization.md)
129
179
  - [Security model](docs/security-model.md)
@@ -133,6 +183,7 @@ Reference:
133
183
  - [Runtime and local identity policies](docs/runtime-policies.md)
134
184
  - [Glossary](docs/glossary.md)
135
185
  - [Repository architecture](docs/architecture.md)
186
+ - [Stability and the first stable release](docs/stability.md)
136
187
  - [Release process](docs/releasing.md)
137
188
 
138
189
  ## Getting support
@@ -150,7 +201,7 @@ problems belong in the private process described in [SECURITY.md](SECURITY.md).
150
201
 
151
202
  ## For contributors
152
203
 
153
- Use Node.js 24, run `npm ci`, then run:
204
+ Use a supported Node.js release (22, 24, or 26), run `npm ci`, then run:
154
205
 
155
206
  ```bash
156
207
  npm run check
@@ -161,3 +212,9 @@ npm run test:fixture
161
212
 
162
213
  The fixture commands install the packed package into clean synthetic projects. They do
163
214
  not connect to hosted services. See [CONTRIBUTING.md](CONTRIBUTING.md) for the full rules.
215
+
216
+ Preview the styled documentation site locally with:
217
+
218
+ ```bash
219
+ npm run docs:preview
220
+ ```
@@ -0,0 +1,100 @@
1
+ {
2
+ "name": "@rehearsal-db/core",
3
+ "version": "0.1.0-rc.2",
4
+ "private": false,
5
+ "description": "Catch PostgreSQL and Supabase migrations that pass on empty databases but fail on real data—before deploy.",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/Ddupasquier/rehearsal-db.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/Ddupasquier/rehearsal-db/issues"
12
+ },
13
+ "homepage": "https://ddupasquier.github.io/rehearsal-db/",
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "provenance": true
17
+ },
18
+ "type": "module",
19
+ "engines": {
20
+ "node": "^22.0.0 || ^24.0.0 || ^26.0.0"
21
+ },
22
+ "bin": {
23
+ "rehearsal": "dist/src/cli/rehearsal.mjs"
24
+ },
25
+ "exports": {
26
+ ".": {
27
+ "types": "./types/configuration.d.mts",
28
+ "import": "./dist/src/index.mjs"
29
+ },
30
+ "./baseline": "./dist/src/baseline/artifact.mjs",
31
+ "./baseline-builder": "./dist/src/baseline/builder.mjs",
32
+ "./diagnostics": "./dist/src/shared/diagnostics.mjs",
33
+ "./migrations": "./dist/src/runtime/migration_history.mjs",
34
+ "./process-environment": "./dist/src/shared/process_environment.mjs",
35
+ "./privacy": "./dist/src/baseline/privacy_engine.mjs",
36
+ "./schema": "./dist/src/baseline/schema_snapshot.mjs",
37
+ "./service-environment": "./dist/src/runtime/service_environment.mjs",
38
+ "./source-access": "./dist/src/source/access.mjs"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "types",
43
+ "docs/*.md",
44
+ "README.md",
45
+ "BENCHMARKS.md",
46
+ "CHANGELOG.md",
47
+ "SECURITY.md",
48
+ "COMPATIBILITY.md",
49
+ "SUPPORT.md",
50
+ "LICENSE"
51
+ ],
52
+ "scripts": {
53
+ "postinstall": "node dist/scripts/install/create_root_config.mjs",
54
+ "prepack": "npm run build",
55
+ "build": "node scripts/build/clean.mjs && tsc --project tsconfig.build.json",
56
+ "docs:build": "node scripts/docs/build.mjs",
57
+ "docs:preview": "node scripts/docs/serve.mjs",
58
+ "test": "npm run build && vitest run",
59
+ "test:unit": "npm run build && vitest run tests/unit",
60
+ "test:integration": "npm run build && vitest run tests/integration tests/contracts",
61
+ "test:docs": "npm run build && vitest run tests/contracts/documentationCommands.test.mjs",
62
+ "test:fixture": "npm run build && node scripts/verification/run_scenario.mjs supabase",
63
+ "test:fixture:postgresql": "npm run build && node scripts/verification/run_scenario.mjs postgresql",
64
+ "test:fixture:dependent": "npm run build && node scripts/verification/run_scenario.mjs dependent-target",
65
+ "test:fixture:onboarding": "npm run build && node scripts/verification/run_scenario.mjs onboarding",
66
+ "test:fixture:typescript": "npm run build && node scripts/verification/run_scenario.mjs typescript",
67
+ "test:fixture:standalone": "npm run build && node scripts/verification/run_scenario.mjs standalone",
68
+ "test:fixture:privacy": "npm run build && node scripts/verification/run_scenario.mjs privacy",
69
+ "release:verify": "node scripts/verification/release_gate.mjs",
70
+ "check": "npm run check:syntax && npm run typecheck && npm run test && npm run docs:build && npm run format:check && npm run package:audit",
71
+ "check:syntax": "find scripts tests -type f -name '*.mjs' -exec node --check {} +",
72
+ "typecheck": "npm run build && tsc --project tsconfig.json",
73
+ "format": "prettier --write .",
74
+ "format:check": "prettier --check .",
75
+ "package:audit": "node scripts/verification/audit_package.mjs"
76
+ },
77
+ "keywords": [
78
+ "postgresql",
79
+ "supabase",
80
+ "migration",
81
+ "testing",
82
+ "database"
83
+ ],
84
+ "license": "MIT",
85
+ "dependencies": {
86
+ "@clack/prompts": "^1.8.1",
87
+ "pg": "^8.23.1"
88
+ },
89
+ "devDependencies": {
90
+ "@fontsource-variable/dm-sans": "^5.3.0",
91
+ "@fontsource-variable/fraunces": "^5.3.0",
92
+ "@lydell/node-pty": "^1.2.0-beta.15",
93
+ "@types/node": "22.20.5",
94
+ "@types/pg": "^8.23.1",
95
+ "marked": "^18.0.14",
96
+ "prettier": "^3.9.6",
97
+ "typescript": "7.0.2",
98
+ "vitest": "^5.0.2"
99
+ }
100
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ /** Create safe project-root Rehearsal scaffolding during a local install. */
3
+ export {};
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /** Create safe project-root Rehearsal scaffolding during a local install. */
3
+ import { fileURLToPath } from "node:url";
4
+ import { createInstalledRehearsalScaffold, renderInstalledRehearsalScaffold, } from "../../src/project/install_scaffold.mjs";
5
+ const packageRoot = fileURLToPath(new URL("../../..", import.meta.url));
6
+ try {
7
+ const result = await createInstalledRehearsalScaffold({ packageRoot });
8
+ console.log(renderInstalledRehearsalScaffold(result));
9
+ }
10
+ catch (error) {
11
+ const message = error instanceof Error ? error.message : String(error);
12
+ console.warn(`Rehearsal could not safely create project files during installation: ${message}\nNext: run npx rehearsal from the application directory.`);
13
+ }
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Purpose: Select the configured database runtime and forward the requested
4
+ * lifecycle action to its isolated driver.
5
+ */
6
+ export {};