Skip to content

Commit 86d0cbf

Browse files
committed
chore(changeset): grade the 24961 read-only boot narrowing minor, as the launch window ships a BREAKING accept-set narrowing
The changeset declared Clause-② no (narrowing) and graded driver-sql patch, which the Check Changeset level axis refuses: a narrowing is BREAKING, and during the launch window a BREAKING change ships minor. Raise driver-sql to minor and say so in the BREAKING banner, in the wording the other launch-window narrowings use. No other file changes. Claude-Session: https://claude.ai/code/session_01QK6pdbxKZiHdFApL8RYVh9 Co-authored-by: Claude <noreply@anthropic.com>
1 parent 28d5dd6 commit 86d0cbf

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

‎.changeset/24961-readonly-probe-unopenable-path.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
'@objectstack/driver-sql': patch
2+
'@objectstack/driver-sql': minor
33
---
44

55
fix(driver-sql): a read-only boot refuses a SQLite datasource whose file can be neither opened nor created, instead of opening an empty in-memory database over it and reporting it connected
@@ -10,7 +10,7 @@ Clause-②: no (narrowing)
1010

1111
`sqliteAbsentFile: 'empty-in-memory'` is the open mode a read-only boot uses (`os migrate plan`, and the dry runs that boot read-only): an absent SQLite file is opened as an empty in-memory database, so nothing is created on disk. Its judgement of "absent" was `existsSync(path) === false`, which is also the answer for a path that cannot exist: a path under a regular file (`ENOTDIR`), a directory the process may not search (`EACCES`). So `os migrate plan` printed `datasource '<name>': connected` for a declared datasource on such a path and planned `create_table` into it, while the boot that writes refused the same path.
1212

13-
**BREAKING** (the read-only boot's accept set narrows), shipped as `patch`: no exported declaration changes.
13+
**BREAKING** (the read-only boot's accept set narrows), shipped as `minor` under the launch-window convention for breaking changes.
1414

1515
- **FROM:** under `'empty-in-memory'`, a SQLite path that can be neither opened nor created read as absent. The driver opened `:memory:`, and the datasource's connect succeeded.
1616
- **TO:** `resolveSqliteAbsentFileTarget`, and so the `SqlDriver` constructor, throws `SqliteDatabaseFileError` naming the file and the operating system's answer: `ENOTDIR` (a path under a regular file), `EACCES` (a directory the process may not write or search), `EROFS` (a read-only mount), or `ENOENT` (a directory whose name a dangling symbolic link holds). The datasource's connect fails with it, as the boot that writes already failed, so `os migrate plan` reports the datasource failed instead of planning into it. The judgement still writes nothing: no directory and no file is created to find out.

0 commit comments

Comments
 (0)