@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.
- package/CHANGELOG.md +319 -1
- package/COMPATIBILITY.md +15 -0
- package/README.md +73 -16
- package/dist/package.json +100 -0
- package/dist/scripts/install/create_root_config.d.mts +3 -0
- package/dist/scripts/install/create_root_config.mjs +13 -0
- package/dist/scripts/runtime/manage_database.d.mts +6 -0
- package/{scripts → dist/scripts}/runtime/manage_database.mjs +6 -8
- package/dist/src/application/interactive_task.d.mts +30 -0
- package/dist/src/application/interactive_task.mjs +83 -0
- package/dist/src/application/session.d.mts +97 -0
- package/dist/src/application/session.mjs +380 -0
- package/dist/src/baseline/artifact.d.mts +119 -0
- package/dist/src/baseline/artifact.mjs +522 -0
- package/dist/src/baseline/builder.d.mts +19 -0
- package/dist/src/baseline/builder.mjs +142 -0
- package/dist/src/baseline/input_discovery.d.mts +13 -0
- package/dist/src/baseline/input_discovery.mjs +149 -0
- package/dist/src/baseline/policy_review.d.mts +56 -0
- package/dist/src/baseline/policy_review.mjs +73 -0
- package/dist/src/baseline/preparation.d.mts +63 -0
- package/dist/src/baseline/preparation.mjs +295 -0
- package/dist/src/baseline/privacy_contract.d.mts +147 -0
- package/dist/src/baseline/privacy_contract.mjs +2 -0
- package/dist/src/baseline/privacy_dependency_graph.d.mts +7 -0
- package/dist/src/baseline/privacy_dependency_graph.mjs +110 -0
- package/dist/src/baseline/privacy_engine.d.mts +5 -0
- package/dist/src/baseline/privacy_engine.mjs +4 -0
- package/dist/src/baseline/privacy_key.d.mts +7 -0
- package/dist/src/baseline/privacy_key.mjs +42 -0
- package/dist/src/baseline/privacy_pipeline.d.mts +7 -0
- package/dist/src/baseline/privacy_pipeline.mjs +127 -0
- package/dist/src/baseline/privacy_policy.d.mts +6 -0
- package/dist/src/baseline/privacy_policy.mjs +237 -0
- package/dist/src/baseline/privacy_recipe_validation.d.mts +5 -0
- package/dist/src/baseline/privacy_recipe_validation.mjs +289 -0
- package/dist/src/baseline/privacy_rule_registry.d.mts +18 -0
- package/dist/src/baseline/privacy_rule_registry.mjs +143 -0
- package/dist/src/baseline/privacy_structured_json.d.mts +66 -0
- package/dist/src/baseline/privacy_structured_json.mjs +464 -0
- package/dist/src/baseline/privacy_transforms.d.mts +18 -0
- package/dist/src/baseline/privacy_transforms.mjs +142 -0
- package/dist/src/baseline/privacy_validation_shared.d.mts +31 -0
- package/dist/src/baseline/privacy_validation_shared.mjs +127 -0
- package/dist/src/baseline/sanitization_policy.d.mts +69 -0
- package/dist/src/baseline/sanitization_policy.mjs +227 -0
- package/dist/src/baseline/schema_snapshot.d.mts +19 -0
- package/dist/src/baseline/schema_snapshot.mjs +79 -0
- package/dist/src/cli/application_command_handlers.d.mts +8 -0
- package/dist/src/cli/application_command_handlers.mjs +52 -0
- package/dist/src/cli/arguments.d.mts +38 -0
- package/dist/src/cli/arguments.mjs +130 -0
- package/dist/src/cli/basic_command_handlers.d.mts +4 -0
- package/dist/src/cli/basic_command_handlers.mjs +57 -0
- package/dist/src/cli/cli_commands.d.mts +14 -0
- package/dist/src/cli/cli_commands.mjs +34 -0
- package/dist/src/cli/command_contract.d.mts +57 -0
- package/dist/src/cli/command_contract.mjs +39 -0
- package/dist/src/cli/command_output.d.mts +12 -0
- package/dist/src/cli/command_output.mjs +20 -0
- package/dist/src/cli/command_registry.d.mts +7 -0
- package/dist/src/cli/command_registry.mjs +14 -0
- package/dist/src/cli/guided.d.mts +53 -0
- package/dist/src/cli/guided.mjs +727 -0
- package/dist/src/cli/identity_command_handlers.d.mts +12 -0
- package/dist/src/cli/identity_command_handlers.mjs +239 -0
- package/dist/src/cli/identity_renderer.d.mts +8 -0
- package/dist/src/cli/identity_renderer.mjs +33 -0
- package/dist/src/cli/init_command.d.mts +21 -0
- package/dist/src/cli/init_command.mjs +90 -0
- package/dist/src/cli/inspection_command_handlers.d.mts +3 -0
- package/dist/src/cli/inspection_command_handlers.mjs +79 -0
- package/dist/src/cli/project_command_handlers.d.mts +11 -0
- package/dist/src/cli/project_command_handlers.mjs +92 -0
- package/dist/src/cli/project_commands.d.mts +283 -0
- package/dist/src/cli/project_commands.mjs +192 -0
- package/dist/src/cli/rehearsal.d.mts +7 -0
- package/dist/src/cli/rehearsal.mjs +190 -0
- package/dist/src/cli/renderers.d.mts +299 -0
- package/dist/src/cli/renderers.mjs +554 -0
- package/dist/src/cli/runtime_action_handlers.d.mts +12 -0
- package/dist/src/cli/runtime_action_handlers.mjs +201 -0
- package/dist/src/cli/runtime_commands.d.mts +294 -0
- package/dist/src/cli/runtime_commands.mjs +619 -0
- package/dist/src/cli/source_command_handlers.d.mts +8 -0
- package/dist/src/cli/source_command_handlers.mjs +62 -0
- package/dist/src/cli/source_commands.d.mts +436 -0
- package/dist/src/cli/source_commands.mjs +301 -0
- package/dist/src/cli/terminal.d.mts +59 -0
- package/dist/src/cli/terminal.mjs +230 -0
- package/dist/src/identity/claim.d.mts +5 -0
- package/dist/src/identity/claim.mjs +4 -0
- package/dist/src/identity/claim_contract.d.mts +135 -0
- package/dist/src/identity/claim_contract.mjs +6 -0
- package/dist/src/identity/claim_executor.d.mts +10 -0
- package/dist/src/identity/claim_executor.mjs +358 -0
- package/dist/src/identity/claim_identity_lookup.d.mts +23 -0
- package/dist/src/identity/claim_identity_lookup.mjs +134 -0
- package/dist/src/identity/claim_plan.d.mts +8 -0
- package/dist/src/identity/claim_plan.mjs +61 -0
- package/dist/src/identity/claim_policy.d.mts +3 -0
- package/dist/src/identity/claim_policy.mjs +377 -0
- package/dist/src/identity/claim_sql.d.mts +10 -0
- package/dist/src/identity/claim_sql.mjs +46 -0
- package/dist/src/identity/claim_verification.d.mts +13 -0
- package/dist/src/identity/claim_verification.mjs +35 -0
- package/dist/src/identity/connect.d.mts +30 -0
- package/dist/src/identity/connect.mjs +111 -0
- package/dist/src/identity/provider_configuration.d.mts +37 -0
- package/dist/src/identity/provider_configuration.mjs +132 -0
- package/dist/src/identity/storage.d.mts +21 -0
- package/dist/src/identity/storage.mjs +122 -0
- package/dist/src/index.d.mts +4 -0
- package/dist/src/index.mjs +3 -0
- package/dist/src/project/configuration.d.mts +13 -0
- package/dist/src/project/configuration.mjs +9 -0
- package/dist/src/project/configuration_contract.d.mts +125 -0
- package/dist/src/project/configuration_contract.mjs +27 -0
- package/dist/src/project/configuration_discovery.d.mts +7 -0
- package/dist/src/project/configuration_discovery.mjs +37 -0
- package/dist/src/project/configuration_normalization.d.mts +107 -0
- package/dist/src/project/configuration_normalization.mjs +302 -0
- package/dist/src/project/configuration_rendering.d.mts +14 -0
- package/dist/src/project/configuration_rendering.mjs +228 -0
- package/dist/src/project/configuration_resolution.d.mts +125 -0
- package/dist/src/project/configuration_resolution.mjs +81 -0
- package/dist/src/project/configuration_schema.d.mts +22 -0
- package/dist/src/project/configuration_schema.mjs +160 -0
- package/dist/src/project/configuration_validation.d.mts +22 -0
- package/dist/src/project/configuration_validation.mjs +136 -0
- package/dist/src/project/install_scaffold.d.mts +42 -0
- package/dist/src/project/install_scaffold.mjs +263 -0
- package/dist/src/project/project_detection.d.mts +14 -0
- package/dist/src/project/project_detection.mjs +47 -0
- package/dist/src/project/setup.d.mts +87 -0
- package/dist/src/project/setup.mjs +414 -0
- package/dist/src/project/support_report.d.mts +88 -0
- package/dist/src/project/support_report.mjs +83 -0
- package/dist/src/runtime/cleanup.d.mts +85 -0
- package/dist/src/runtime/cleanup.mjs +311 -0
- package/dist/src/runtime/lifecycle_engine.d.mts +63 -0
- package/dist/src/runtime/lifecycle_engine.mjs +114 -0
- package/dist/src/runtime/migration_history.d.mts +51 -0
- package/dist/src/runtime/migration_history.mjs +170 -0
- package/dist/src/runtime/plan.d.mts +134 -0
- package/dist/src/runtime/plan.mjs +640 -0
- package/dist/src/runtime/policy.d.mts +66 -0
- package/dist/src/runtime/policy.mjs +369 -0
- package/dist/src/runtime/restore.d.mts +22 -0
- package/dist/src/runtime/restore.mjs +276 -0
- package/dist/src/runtime/service_environment.d.mts +11 -0
- package/dist/src/runtime/service_environment.mjs +58 -0
- package/dist/src/runtime/topology.d.mts +51 -0
- package/dist/src/runtime/topology.mjs +128 -0
- package/dist/src/shared/diagnostics.d.mts +97 -0
- package/dist/src/shared/diagnostics.mjs +170 -0
- package/dist/src/shared/human_output.d.mts +2 -0
- package/{src → dist/src}/shared/human_output.mjs +1 -3
- package/dist/src/shared/node_runtime.d.mts +14 -0
- package/dist/src/shared/node_runtime.mjs +25 -0
- package/dist/src/shared/operation_guard.d.mts +22 -0
- package/dist/src/shared/operation_guard.mjs +150 -0
- package/dist/src/shared/process_environment.d.mts +15 -0
- package/dist/src/shared/process_environment.mjs +50 -0
- package/dist/src/source/access.d.mts +165 -0
- package/dist/src/source/access.mjs +602 -0
- package/dist/src/source/asset_transfer.d.mts +27 -0
- package/dist/src/source/asset_transfer.mjs +202 -0
- package/dist/src/source/baseline.d.mts +66 -0
- package/dist/src/source/baseline.mjs +372 -0
- package/dist/src/source/external_reader.d.mts +42 -0
- package/dist/src/source/external_reader.mjs +278 -0
- package/dist/src/source/postgresql_access.d.mts +86 -0
- package/dist/src/source/postgresql_access.mjs +454 -0
- package/dist/src/source/privacy_paths.d.mts +10 -0
- package/dist/src/source/privacy_paths.mjs +27 -0
- package/dist/src/targets/driver.d.mts +2 -0
- package/dist/src/targets/driver.mjs +13 -0
- package/dist/src/targets/postgresql.d.mts +5 -0
- package/dist/src/targets/postgresql.mjs +620 -0
- package/dist/src/targets/supabase.d.mts +8 -0
- package/dist/src/targets/supabase.mjs +629 -0
- package/dist/src/targets/supabase_environment.d.mts +54 -0
- package/dist/src/targets/supabase_environment.mjs +184 -0
- package/dist/src/targets/target.d.mts +33 -0
- package/dist/src/targets/target.mjs +39 -0
- package/docs/README.md +35 -16
- package/docs/architecture.md +135 -10
- package/docs/commands.md +53 -15
- package/docs/configuration.md +186 -31
- package/docs/getting-started.md +66 -9
- package/docs/index.md +67 -0
- package/docs/production-source.md +175 -17
- package/docs/releasing.md +24 -12
- package/docs/roadmap.md +3 -2
- package/docs/runtime-lifecycle.md +99 -0
- package/docs/runtime-policies.md +80 -7
- package/docs/sanitization.md +572 -4
- package/docs/security-model.md +8 -0
- package/docs/stability.md +70 -0
- package/docs/standalone-workflow.md +36 -13
- package/docs/troubleshooting.md +82 -10
- package/docs/tutorial.md +7 -1
- package/docs/typescript.md +134 -0
- package/package.json +44 -29
- package/types/configuration.d.mts +5 -0
- package/src/README.md +0 -17
- package/src/application/session.mjs +0 -313
- package/src/baseline/artifact.mjs +0 -661
- package/src/baseline/builder.mjs +0 -164
- package/src/baseline/input_discovery.mjs +0 -155
- package/src/baseline/policy_review.mjs +0 -92
- package/src/baseline/preparation.mjs +0 -323
- package/src/baseline/privacy_engine.mjs +0 -413
- package/src/baseline/sanitization_policy.mjs +0 -299
- package/src/baseline/schema_snapshot.mjs +0 -113
- package/src/cli/arguments.mjs +0 -120
- package/src/cli/guided.mjs +0 -807
- package/src/cli/rehearsal.mjs +0 -933
- package/src/cli/renderers.mjs +0 -584
- package/src/cli/runtime_commands.mjs +0 -553
- package/src/cli/source_commands.mjs +0 -326
- package/src/cli/terminal.mjs +0 -275
- package/src/identity/claim.mjs +0 -975
- package/src/identity/storage.mjs +0 -165
- package/src/project/configuration.d.mts +0 -153
- package/src/project/configuration.mjs +0 -1197
- package/src/project/setup.mjs +0 -379
- package/src/project/support_report.mjs +0 -105
- package/src/runtime/cleanup.mjs +0 -381
- package/src/runtime/migration_history.mjs +0 -220
- package/src/runtime/plan.mjs +0 -685
- package/src/runtime/policy.mjs +0 -438
- package/src/runtime/restore.mjs +0 -329
- package/src/runtime/service_environment.mjs +0 -82
- package/src/runtime/topology.mjs +0 -177
- package/src/shared/diagnostics.mjs +0 -199
- package/src/shared/operation_guard.mjs +0 -162
- package/src/shared/process_environment.mjs +0 -68
- package/src/source/access.mjs +0 -578
- package/src/source/asset_transfer.mjs +0 -177
- package/src/source/baseline.mjs +0 -446
- package/src/source/postgresql_access.mjs +0 -480
- package/src/targets/postgresql.mjs +0 -808
- package/src/targets/supabase.mjs +0 -830
- package/src/targets/supabase_environment.mjs +0 -229
- 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-
|
|
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
|
-
|
|
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
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
>
|
|
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
|
|
67
|
+
npm install --save-dev @rehearsal-db/core
|
|
37
68
|
npx rehearsal
|
|
38
69
|
```
|
|
39
70
|
|
|
40
|
-
|
|
41
|
-
`rehearsal.config.mjs`
|
|
42
|
-
|
|
43
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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,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
|
+
}
|