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

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 (246) hide show
  1. package/CHANGELOG.md +297 -1
  2. package/COMPATIBILITY.md +15 -0
  3. package/README.md +39 -10
  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 +226 -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 +637 -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 +627 -0
  183. package/dist/src/targets/supabase_environment.d.mts +49 -0
  184. package/dist/src/targets/supabase_environment.mjs +162 -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 +27 -16
  188. package/docs/architecture.md +135 -10
  189. package/docs/commands.md +53 -15
  190. package/docs/configuration.md +173 -26
  191. package/docs/getting-started.md +65 -8
  192. package/docs/index.md +48 -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-policies.md +80 -7
  197. package/docs/sanitization.md +572 -4
  198. package/docs/security-model.md +8 -0
  199. package/docs/stability.md +69 -0
  200. package/docs/standalone-workflow.md +36 -13
  201. package/docs/troubleshooting.md +80 -8
  202. package/docs/tutorial.md +7 -1
  203. package/docs/typescript.md +134 -0
  204. package/package.json +43 -28
  205. package/types/configuration.d.mts +5 -0
  206. package/src/README.md +0 -17
  207. package/src/application/session.mjs +0 -313
  208. package/src/baseline/artifact.mjs +0 -661
  209. package/src/baseline/builder.mjs +0 -164
  210. package/src/baseline/input_discovery.mjs +0 -155
  211. package/src/baseline/policy_review.mjs +0 -92
  212. package/src/baseline/preparation.mjs +0 -323
  213. package/src/baseline/privacy_engine.mjs +0 -413
  214. package/src/baseline/sanitization_policy.mjs +0 -299
  215. package/src/baseline/schema_snapshot.mjs +0 -113
  216. package/src/cli/arguments.mjs +0 -120
  217. package/src/cli/guided.mjs +0 -807
  218. package/src/cli/rehearsal.mjs +0 -933
  219. package/src/cli/renderers.mjs +0 -584
  220. package/src/cli/runtime_commands.mjs +0 -553
  221. package/src/cli/source_commands.mjs +0 -326
  222. package/src/cli/terminal.mjs +0 -275
  223. package/src/identity/claim.mjs +0 -975
  224. package/src/identity/storage.mjs +0 -165
  225. package/src/project/configuration.d.mts +0 -153
  226. package/src/project/configuration.mjs +0 -1197
  227. package/src/project/setup.mjs +0 -379
  228. package/src/project/support_report.mjs +0 -105
  229. package/src/runtime/cleanup.mjs +0 -381
  230. package/src/runtime/migration_history.mjs +0 -220
  231. package/src/runtime/plan.mjs +0 -685
  232. package/src/runtime/policy.mjs +0 -438
  233. package/src/runtime/restore.mjs +0 -329
  234. package/src/runtime/service_environment.mjs +0 -82
  235. package/src/runtime/topology.mjs +0 -177
  236. package/src/shared/diagnostics.mjs +0 -199
  237. package/src/shared/operation_guard.mjs +0 -162
  238. package/src/shared/process_environment.mjs +0 -68
  239. package/src/source/access.mjs +0 -578
  240. package/src/source/asset_transfer.mjs +0 -177
  241. package/src/source/baseline.mjs +0 -446
  242. package/src/source/postgresql_access.mjs +0 -480
  243. package/src/targets/postgresql.mjs +0 -808
  244. package/src/targets/supabase.mjs +0 -830
  245. package/src/targets/supabase_environment.mjs +0 -229
  246. package/src/targets/target.mjs +0 -66
package/CHANGELOG.md CHANGED
@@ -5,6 +5,292 @@ a Changelog, and versions will follow Semantic Versioning after the package exis
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## [0.1.0-rc.1] - 2026-10-08
9
+
10
+ ### Changed
11
+
12
+ - Promotes the exact beta.18 behavior and documented compatibility surface to the first
13
+ release candidate. No runtime, configuration, policy, CLI, or public TypeScript
14
+ capability changed after beta.18.
15
+ - Broad feature work is frozen while the release candidate completes two independent
16
+ Test Lab passes, one final package-only consumer upgrade, and its observation window.
17
+
18
+ ## [0.1.0-beta.18] - 2026-10-08
19
+
20
+ ### Added
21
+
22
+ - A concise stability contract now defines the supported public surface, defects that
23
+ block the first stable release, and the exact beta-to-RC-to-stable promotion gate.
24
+ - Automated release-policy tests cover beta, release-candidate, stable, malformed, and
25
+ mismatched GitHub release metadata.
26
+
27
+ ### Changed
28
+
29
+ - Protected OIDC publication now supports both prerelease and stable versions. Beta and
30
+ release-candidate versions update `beta`; once a stable version exists they cannot
31
+ replace `latest`. Stable publication updates `latest` without rewriting `beta`.
32
+ - npm channel selection lives only in the protected release workflow instead of static
33
+ package metadata, and missing beta.16 and beta.17 changelog comparisons are restored.
34
+ - Vitest's locked patch release is updated from 5.0.2 to 5.0.3 after the complete CI
35
+ matrix passed.
36
+
37
+ ## [0.1.0-beta.17] - 2026-10-08
38
+
39
+ ### Added
40
+
41
+ - `rehearsal identity connect` and the guided home screen now keep the sandbox app
42
+ available during ordinary provider sign-in, detect exactly one approved verified local
43
+ identity, show a redacted copied-account preview, and apply the existing exact claim
44
+ after one deliberate confirmation. The app is reopened automatically with an honest
45
+ fresh-session instruction; explicit `identity plan` and `identity claim` commands remain
46
+ available for scripts.
47
+
48
+ ## [0.1.0-beta.16] - 2026-10-08
49
+
50
+ ### Changed
51
+
52
+ - The CLI now routes guided and scripted requests through focused typed command
53
+ handlers and one result/output contract. The executable retains only process
54
+ lifecycle, project locking, guided-loop coordination, and top-level error handling;
55
+ command-session caches no longer live in public parsed flags.
56
+ - Configuration now passes through separate discovery, raw-schema validation,
57
+ normalization, project-root path resolution, project detection, and starter-rendering
58
+ modules behind the existing import path. Public declarations come from the same
59
+ TypeScript source, including the new `NormalizedRehearsalConfig` type.
60
+ - Installed-consumer verification now shares one scenario catalog, artifact installer,
61
+ isolated workspace boundary, process boundary, and persistent application-session
62
+ helper. The complete release gate runs every scenario against one immutable tarball
63
+ and records its exact version, SHA-256, tool environment, commands, timings, and
64
+ results.
65
+ - Identity policy validation, deterministic claim planning, SQL generation, local Auth
66
+ lookup, pure verification, and transactional execution now live in separate typed
67
+ stages behind the unchanged public claim API. Generated reference SQL is independently
68
+ testable, while only the executor can mutate the local database or Storage runtime.
69
+ - PostgreSQL and Supabase now share one typed runtime lifecycle engine for command
70
+ dispatch, active-baseline loading, migration confirmation and receipts, runtime
71
+ markers, and rollback. Candidate receipts are bound to their exact database target,
72
+ while each driver retains its own ownership proof and database-specific behavior.
73
+ - Privacy policy types, recipe normalization, dependency validation, deterministic
74
+ transforms, structured JSON, rule dispatch, row execution, and key handling now live
75
+ in focused typed stages behind the unchanged public privacy import. An explicit closed
76
+ registry covers every supported action and derivation without widening policy v2.
77
+
78
+ ## [0.1.0-beta.15] - 2026-10-08
79
+
80
+ ### Added
81
+
82
+ - A strict, no-emit TypeScript gate now checks the first shared runtime utilities and
83
+ verifies that consumers can compile against Rehearsal's public configuration types.
84
+ - The documentation site now explains the supported TypeScript surface with examples
85
+ that are compiled and checked against their rendered documentation source.
86
+ - All shipped implementation and executable-helper source now uses TypeScript. Clean
87
+ builds emit Node-compatible ESM and declarations into the reviewed package boundary,
88
+ and tests exercise that compiled output rather than an alternate source path.
89
+ - The published build omits repository-only JavaScript source maps while retaining
90
+ runtime JavaScript and declarations, keeping the installed package compact.
91
+
92
+ ### Fixed
93
+
94
+ - Packed onboarding chooses an available local port block for preserved configuration
95
+ fixtures, so unrelated running Rehearsal projects cannot make the isolation test fail.
96
+
97
+ ## [0.1.0-beta.14] - 2026-10-05
98
+
99
+ ### Added
100
+
101
+ - Packed-package onboarding is now a required CI job. It covers fresh Supabase and
102
+ PostgreSQL installs, beta.7 configuration preservation, missing credentials, occupied
103
+ ports, malformed configuration, and non-destructive partial-setup recovery.
104
+ - The independent test lab can run the same first-install boundary against an exact
105
+ candidate tarball before either database lifecycle.
106
+ - Installation and setup now report the exact active Rehearsal configuration path and
107
+ explain when a supported existing nested config prevents root-file generation.
108
+ - Packed-package onboarding covers fresh, nested, existing-root, and repeated installs
109
+ while proving reviewed configuration bytes are preserved.
110
+ - Privacy policy version 2 can explicitly treat nullable owners as non-matches and match
111
+ an approved owner through any of a bounded list of pseudonymized identity columns.
112
+ - Bounded JSON unions classify each permitted root type, while JSON dictionaries require
113
+ reviewed runtime-key formats, key actions, value recipes, and item/depth/byte limits.
114
+ - JSON dictionaries can restrict runtime keys to canonical signed integers within an
115
+ explicit safe-integer range, preserving positive, negative, and reviewed zero keys
116
+ without widening numeric maps to arbitrary text.
117
+ - Date shifting can explicitly preserve numeric epoch-millisecond representation,
118
+ including inside structured JSON, while sharing a stable grouped offset with related
119
+ epoch or ISO-string dates.
120
+ - Bounded scalar enums retain only explicitly reviewed structural strings, finite
121
+ numbers, or booleans inside ordinary fields and nested JSON declarations, rejecting
122
+ out-of-domain values without echoing them in diagnostics.
123
+ - Validated strings preserve bounded, case-sensitive structural codes from open domains
124
+ using a package-owned portable alphabet, refusing credential-shaped and malformed
125
+ text without consumer regexes, callbacks, or static identifier lists.
126
+ - Keyed hexadecimal and GTIN pseudonyms preserve reviewed database constraints, while
127
+ fixed-width digest recipes derive fingerprints only from explicitly named sanitized
128
+ columns and reject missing, excluded, duplicate, or cyclic inputs.
129
+ - A single GTIN recipe can declare reviewed `allowedLengths`, preserving each source
130
+ value's 8-, 12-, 13-, or 14-digit shape and check digit even inside structured JSON.
131
+ - Keyed URL pseudonyms replace private HTTPS URLs with deterministic, bounded HTTPS
132
+ loopback paths without retaining source hosts, paths, credentials, queries, or tokens.
133
+ - Bounded binding substitution can retain permitted surrounding text while replacing
134
+ exact occurrences of a reviewed UUID with its corresponding keyed UUID pseudonym.
135
+ - External PostgreSQL readers can declare a bounded exact allowlist of provider-owned
136
+ permission groups. Rehearsal verifies safe membership options, group attributes,
137
+ nesting, view ownership, and the complete effective privilege surface.
138
+
139
+ ### Documentation
140
+
141
+ - First-time users now have a short recovery table for interrupted setup, failed
142
+ upgrades, port conflicts, missing OAuth credentials, and low Docker capacity.
143
+ - The configuration guide documents a safe manual move to the project root, separating
144
+ config-file-relative JavaScript imports from project-root-relative Rehearsal paths.
145
+ - The sanitization guide documents nullable and multi-column ownership, heterogeneous
146
+ JSON values, runtime-keyed dictionaries, keyed HTTPS replacements, bounded identity
147
+ substitution, and their fail-closed boundaries.
148
+
149
+ ### Fixed
150
+
151
+ - Source preparation now stores and reads each target's access receipt and owner-only
152
+ reader credential under its configured baseline artifact directory. Nested and
153
+ multi-target state roots no longer collide, and retirement refuses a receipt from a
154
+ different target root.
155
+ - Supabase Storage source preparation now recursively traverses real folder placeholder
156
+ entries while keeping the approved prefix, path, depth, object-count, per-object, and
157
+ total-byte boundaries fail closed.
158
+ - Approved-owner selection now rejects non-finite numeric values in every declared
159
+ owner column before choosing a privacy branch, including when another column already
160
+ matches the approved owner.
161
+ - Pseudonymized canonical integer dictionary keys now share the same keyed identity
162
+ mapping as numeric columns and nested numeric values using the same namespace, so
163
+ runtime maps keep their reviewed cross-representation joins.
164
+ - External-reader membership mismatches now return a redacted, actionable source
165
+ authorization refusal instead of an internal-failure diagnostic.
166
+ - All external-reader privilege, expiration, readable-surface, and security-definer
167
+ denials now use the same `SOURCE_AUTHORIZATION_REFUSED` diagnostic and exit code 3.
168
+ - Identity claims now sequence PostgreSQL reads on their single transaction client,
169
+ avoiding deprecated overlapping queries and remaining compatible with pg 9.
170
+
171
+ ## [0.1.0-beta.13] - 2026-10-05
172
+
173
+ ### Added
174
+
175
+ - Runtime and CI compatibility now cover maintained Node.js 22, 24, and 26 releases;
176
+ Node.js 24 LTS remains the recommended default and release-build runtime.
177
+ - Source access policies can use an externally provisioned, database-expiring
178
+ PostgreSQL reader without administrator credentials. Rehearsal binds canonical export
179
+ view definitions, verifies the complete approved read surface and deny controls, and
180
+ never changes or retires provider-owned source objects.
181
+ - `rehearsal --version`, its conventional `-V` alias, and `rehearsal version` now
182
+ report the installed package version without requiring project configuration.
183
+ - Privacy policy version 2 can use one reviewed identity-aware path mapping for both
184
+ database references and physical Storage destinations. Owner prefixes stay in the
185
+ environment, review plans retain only their hashes, and unsafe or mismatched paths
186
+ fail closed.
187
+ - Related timestamps can share a named deterministic date-shift group, preserving their
188
+ ordering and duration without consumer callbacks.
189
+ - The baseline verification corpus now exercises two unrelated target schemas, a
190
+ 10,003-row packed-package stream, concurrent row/schema/ledger changes, malformed and
191
+ truncated results, connection loss, low disk, interruption, and deterministic
192
+ fixed-key output.
193
+
194
+ ### Fixed
195
+
196
+ - Baseline preparation now rejects missing, negative, overflowing, malformed, or
197
+ oversized PostgreSQL estimate and cursor results before activation. Every preparation
198
+ failure preserves the active baseline, removes private staging, and leaves an edited
199
+ runtime untouched.
200
+ - Approved-owner UUID columns are no longer confused with PostgreSQL sequence-backed
201
+ identities. Restore checks the actual local schema before resetting a sequence, while
202
+ genuine numeric identity columns retain correct next-value behavior.
203
+ - A failed Storage transfer now recursively restores write permission only within its
204
+ owned staging tree, removes that incomplete generation, and preserves the original
205
+ safe preparation error instead of replacing it with a cleanup error.
206
+ - Storage preparation now records a canonical media type from reviewed object metadata,
207
+ removing response-only parameters such as a text charset that local bucket MIME
208
+ allowlists reject during restore.
209
+ - Container startup and health failures are now classified as runtime dependency
210
+ failures and include safe Docker/Colima capacity context instead of being mislabeled
211
+ as migration verification failures.
212
+
213
+ ## [0.1.0-beta.12] - 2026-10-04
214
+
215
+ ### Added
216
+
217
+ - Supabase projects can declaratively configure local Google or GitHub OAuth in
218
+ `rehearsal.config.mjs`. Rehearsal derives the credential allowlist, injects only the
219
+ ignored owner-only environment values, and generates the exact loopback callback in
220
+ the disposable runtime without tracking secrets. Local signup requires an explicit
221
+ acknowledgment and is enabled only in that generated runtime copy.
222
+ - Branded, responsive documentation is now hosted on GitHub Pages with searchable
223
+ navigation, light and dark themes, and automatic deployment from `main`.
224
+ - The documentation home page and packaged README show the live monthly npm download
225
+ count and link directly to the npm package.
226
+ - Packed-package onboarding acceptance now proves both fresh root-config creation and a
227
+ real beta.11 upgrade that preserves the user's existing configuration byte for byte.
228
+
229
+ ### Changed
230
+
231
+ - The packaged README now links prominently to the hosted documentation, npm package,
232
+ and issue tracker. Package homepage metadata also points to the hosted documentation.
233
+ - GitHub Pages publishing uses the current Node.js 24 action generations without legacy
234
+ runtime warnings.
235
+ - `rehearsal init` now calls out important optional settings that are available but not
236
+ enabled before showing the current installed-release template.
237
+
238
+ ### Fixed
239
+
240
+ - Existing Google or GitHub provider sections can transition to declarative ownership
241
+ without editing the tracked Supabase template. Rehearsal replaces only a compatible
242
+ section in the disposable runtime copy, while `doctor` refuses ambiguous or
243
+ safety-weakening provider settings before reset.
244
+ - Multi-target plain-text plans now print each declarative OAuth callback, and `init`
245
+ advertises the declarative replacement even when a project still uses legacy provider
246
+ fields.
247
+
248
+ ## [0.1.0-beta.11] - 2026-10-03
249
+
250
+ ### Added
251
+
252
+ - Privacy policy version 2 now supports hashed approved-owner bindings, conditional
253
+ approved/other-owner transformations, bounded JSON arrays, nested recipes, and
254
+ explicitly optional object fields without consumer sanitizer callbacks.
255
+ - Local npm installs now create a validated, commented project-root
256
+ `rehearsal.config.mjs`, dedicated local runtime configuration, and additive safe ignore
257
+ entries when exactly one consumer application can be proven. Guided setup remains the
258
+ tested recovery path when lifecycle scripts are disabled or a workspace is ambiguous.
259
+ - Copied-account association accepts explicit verified-email provider allowlists and
260
+ hashed provider-subject matchers for supported Supabase identities. Google, GitHub,
261
+ and email sign-in now share one review-and-confirm claim workflow.
262
+
263
+ ### Changed
264
+
265
+ - Setup is idempotent, supported custom config paths are preserved, `.gitignore` updates
266
+ use an exclusive lock and atomic replacement, and `rehearsal init` shows the current
267
+ release template without replacing an existing config.
268
+
269
+ ### Fixed
270
+
271
+ - Identity plan JSON no longer serializes the raw approved email or provider subject;
272
+ only the environment-variable name and reviewed SHA-256 receipt leave the process.
273
+
274
+ ## [0.1.0-beta.10] - 2026-10-03
275
+
276
+ ### Added
277
+
278
+ - `rehearsal open` starts and verifies the configured runtime stack, launches the normal
279
+ application with declared local environment mappings, and keeps it available for
280
+ hands-on testing until interrupted.
281
+ - The guide now offers **Open the sandbox app** after a runtime exists.
282
+
283
+ ### Changed
284
+
285
+ - Persistent application sessions stop only their owned application process group on
286
+ `Ctrl+C`, `Ctrl+Z`, terminal close, or termination. The database and Storage runtime
287
+ stay running with local changes preserved across later sessions.
288
+
289
+ ### Fixed
290
+
291
+ - `rehearsal open` keeps interruption handling active throughout application teardown,
292
+ so an npm-forwarded `Ctrl+C` cannot terminate the CLI early or orphan the app.
293
+
8
294
  ## [0.1.0-beta.9] - 2026-10-02
9
295
 
10
296
  ### Added
@@ -268,7 +554,17 @@ a Changelog, and versions will follow Semantic Versioning after the package exis
268
554
  publication uses short-lived trusted OIDC, and every release tag must already exist on
269
555
  protected `main`.
270
556
 
271
- [Unreleased]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.9...HEAD
557
+ [Unreleased]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-rc.1...HEAD
558
+ [0.1.0-rc.1]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.18...v0.1.0-rc.1
559
+ [0.1.0-beta.18]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.17...v0.1.0-beta.18
560
+ [0.1.0-beta.17]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.16...v0.1.0-beta.17
561
+ [0.1.0-beta.16]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.15...v0.1.0-beta.16
562
+ [0.1.0-beta.15]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.14...v0.1.0-beta.15
563
+ [0.1.0-beta.14]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.13...v0.1.0-beta.14
564
+ [0.1.0-beta.13]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.12...v0.1.0-beta.13
565
+ [0.1.0-beta.12]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.11...v0.1.0-beta.12
566
+ [0.1.0-beta.11]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.10...v0.1.0-beta.11
567
+ [0.1.0-beta.10]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.9...v0.1.0-beta.10
272
568
  [0.1.0-beta.9]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.8...v0.1.0-beta.9
273
569
  [0.1.0-beta.8]: https://github.com/Ddupasquier/rehearsal-db/compare/v0.1.0-beta.7...v0.1.0-beta.8
274
570
  [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,5 +1,9 @@
1
1
  # Rehearsal
2
2
 
3
+ [![Monthly npm downloads](https://img.shields.io/npm/dm/%40rehearsal-db%2Fcore?style=flat-square&logo=npm&logoColor=white&label=npm%20downloads&labelColor=1c2a34&color=287b5c)](https://www.npmjs.com/package/@rehearsal-db/core)
4
+
5
+ [Read the documentation](https://ddupasquier.github.io/rehearsal-db/) · [View on npm](https://www.npmjs.com/package/@rehearsal-db/core) · [Report a problem](https://github.com/Ddupasquier/rehearsal-db/issues)
6
+
3
7
  Rehearsal tests PostgreSQL and Supabase migrations on your computer before you run them
4
8
  anywhere important. It restores safe test data into a disposable local database, applies
5
9
  only the migrations you approve, and runs your project's own test command.
@@ -18,7 +22,7 @@ production deployment tool.
18
22
 
19
23
  ## What you need
20
24
 
21
- - Node.js 24 and npm
25
+ - Node.js 22, 24, or 26 and npm (Node.js 24 LTS recommended)
22
26
  - Docker Desktop, Colima, or another Docker-compatible engine
23
27
  - timestamped `.sql` migration files
24
28
  - a project test command that can prove the migrated application works
@@ -37,11 +41,17 @@ npm install --save-dev @rehearsal-db/core@beta
37
41
  npx rehearsal
38
42
  ```
39
43
 
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.
44
+ For an ordinary npm application install, Rehearsal safely creates a commented
45
+ `rehearsal.config.mjs` in the project root, adds only its local-artifact entries to
46
+ `.gitignore`, and prepares the isolated local runtime configuration. It detects the
47
+ project name, database target, migration paths, commands, and free ports. Review lines
48
+ marked `CHECK`, then open the guide. Existing files are never overwritten. If a supported
49
+ root or nested config already exists, Rehearsal reports that active path and does not
50
+ create a competing file; see [Configuration](docs/configuration.md#workspaces-and-custom-paths).
51
+
52
+ If install scripts are disabled or the workspace root is ambiguous, installation makes
53
+ no guess. Run `npx rehearsal` inside the application and choose **Set the stage** for the
54
+ same previewed setup.
45
55
 
46
56
  For PostgreSQL, download the reviewed local image once before running the guide:
47
57
 
@@ -51,6 +61,11 @@ docker pull postgres:17-alpine
51
61
 
52
62
  Rehearsal itself never downloads a database image during a rehearsal.
53
63
 
64
+ For local Google or GitHub sign-in, the generated config includes a commented
65
+ `supabase.authentication` example. It names an ignored owner-only credential file;
66
+ Rehearsal generates the provider block and local callback inside the disposable runtime.
67
+ See [Supabase authentication](docs/configuration.md#supabase-authentication).
68
+
54
69
  ## Three terms you will see
55
70
 
56
71
  - **Baseline:** a locked, safe starting copy of your schema and test data.
@@ -64,11 +79,17 @@ source-owner approval; see [Standalone workflow](docs/standalone-workflow.md).
64
79
  ## The normal workflow
65
80
 
66
81
  1. Run `npx rehearsal`.
67
- 2. Let the guide create the local-only configuration.
82
+ 2. Review the generated local-only configuration, or let the guide create it when the
83
+ install hook safely skipped it.
68
84
  3. Review the sanitization policy and create the baseline.
69
85
  4. Review the exact candidate migration list.
70
86
  5. Run the rehearsal and your application proof.
71
- 6. Test the local application, then verify, reset, stop, or discard the runtime.
87
+ 6. Choose **Open the sandbox app** for hands-on testing, then verify, reset, stop, or
88
+ discard the runtime.
89
+
90
+ `npx rehearsal open` starts and verifies the existing local runtime, keeps the configured
91
+ app available until you press `Ctrl+C`, and preserves database and Storage changes for
92
+ the next session.
72
93
 
73
94
  For an approved production-shaped copy, the optional sequence is `source plan`, `source
74
95
  apply`, `refresh`, and `source retire`. `refresh` verifies the replacement before it
@@ -114,7 +135,7 @@ See [COMPATIBILITY.md](COMPATIBILITY.md) for the exact support contract.
114
135
 
115
136
  Start here:
116
137
 
117
- - [Documentation map](docs/README.md) — find the right guide quickly
138
+ - [Documentation home](docs/index.md) — choose the shortest path for your goal
118
139
  - [Getting started](docs/getting-started.md) — set up your own project
119
140
  - [Safe hands-on tutorial](docs/tutorial.md) — try the full flow in a disposable project
120
141
  - [Troubleshooting](docs/troubleshooting.md) — fix common setup problems
@@ -124,6 +145,7 @@ Reference:
124
145
 
125
146
  - [CLI commands](docs/commands.md)
126
147
  - [Configuration](docs/configuration.md)
148
+ - [TypeScript types](docs/typescript.md)
127
149
  - [Baselines](docs/baselines.md)
128
150
  - [Sanitization](docs/sanitization.md)
129
151
  - [Security model](docs/security-model.md)
@@ -133,6 +155,7 @@ Reference:
133
155
  - [Runtime and local identity policies](docs/runtime-policies.md)
134
156
  - [Glossary](docs/glossary.md)
135
157
  - [Repository architecture](docs/architecture.md)
158
+ - [Stability and the first stable release](docs/stability.md)
136
159
  - [Release process](docs/releasing.md)
137
160
 
138
161
  ## Getting support
@@ -150,7 +173,7 @@ problems belong in the private process described in [SECURITY.md](SECURITY.md).
150
173
 
151
174
  ## For contributors
152
175
 
153
- Use Node.js 24, run `npm ci`, then run:
176
+ Use a supported Node.js release (22, 24, or 26), run `npm ci`, then run:
154
177
 
155
178
  ```bash
156
179
  npm run check
@@ -161,3 +184,9 @@ npm run test:fixture
161
184
 
162
185
  The fixture commands install the packed package into clean synthetic projects. They do
163
186
  not connect to hosted services. See [CONTRIBUTING.md](CONTRIBUTING.md) for the full rules.
187
+
188
+ Preview the styled documentation site locally with:
189
+
190
+ ```bash
191
+ npm run docs:preview
192
+ ```
@@ -0,0 +1,100 @@
1
+ {
2
+ "name": "@rehearsal-db/core",
3
+ "version": "0.1.0-rc.1",
4
+ "private": false,
5
+ "description": "Safely rehearse PostgreSQL and Supabase migrations against sanitized, production-shaped data.",
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 {};
@@ -3,16 +3,14 @@
3
3
  * Purpose: Select the configured database runtime and forward the requested
4
4
  * lifecycle action to its isolated driver.
5
5
  */
6
-
7
6
  import { loadRehearsalConfig } from "../../src/project/configuration.mjs";
8
- import {
9
- parseRuntimeInvocation,
10
- runRuntimeTarget,
11
- } from "../../src/targets/target.mjs";
12
-
7
+ import { parseRuntimeInvocation } from "../../src/targets/target.mjs";
8
+ import { runRuntimeTarget } from "../../src/targets/driver.mjs";
13
9
  const invocation = parseRuntimeInvocation();
14
10
  const { config } = await loadRehearsalConfig({
15
- projectRoot: process.cwd(),
16
- configPath: invocation.configPath,
11
+ projectRoot: process.cwd(),
12
+ ...(invocation.configPath === undefined
13
+ ? {}
14
+ : { configPath: invocation.configPath }),
17
15
  });
18
16
  await runRuntimeTarget(config.runtime.target);
@@ -0,0 +1,30 @@
1
+ /** Run identity discovery while an owned local application remains available. */
2
+ import type { EventEmitter } from "node:events";
3
+ import { type ApplicationDiagnostics, type ApplicationSession, type ApplicationSessionSignal } from "./session.mjs";
4
+ type SignalTarget = Pick<EventEmitter, "prependListener" | "removeListener">;
5
+ interface SessionInput {
6
+ readonly isTTY?: boolean;
7
+ prependListener(event: "data", listener: (chunk: Buffer | string) => void): unknown;
8
+ removeListener(event: "data", listener: (chunk: Buffer | string) => void): unknown;
9
+ }
10
+ /**
11
+ * A terminal interruption aborts the task and retires the owned process group.
12
+ * A completed task leaves the session running so its caller can deliberately
13
+ * stop, reuse, or hand it back to the persistent application holder.
14
+ */
15
+ export declare const runApplicationSessionTask: <Value>({ session, task, signalTarget, input, onReady, }: {
16
+ session: ApplicationSession;
17
+ task: (signal: AbortSignal) => Promise<Value>;
18
+ signalTarget?: SignalTarget;
19
+ input?: SessionInput;
20
+ onReady?: (ready: ApplicationSession["ready"]) => void;
21
+ }) => Promise<Readonly<{
22
+ completed: true;
23
+ value: Value;
24
+ diagnostics: ApplicationDiagnostics;
25
+ }> | Readonly<{
26
+ completed: false;
27
+ signal: ApplicationSessionSignal;
28
+ diagnostics: ApplicationDiagnostics;
29
+ }>>;
30
+ export {};