Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
e406a00
T071: 13.2 and 13.3 — load_settings refuses a non-PostgreSQL DSN and …
brettheap Sep 28, 2026
91f7973
Fix round: _refuse_non_postgresql_dsn never raises a bare ValueError …
brettheap Sep 28, 2026
b5296f9
Rework #60 to Brett's ruling: OPENDOX_MIGRATION_DATABASE_URL required…
brettheap Sep 28, 2026
f097fd8
Fix round: load_migration_settings gets the same dialect gate load_se…
brettheap Sep 28, 2026
b50e3b1
T070: 13.4, 13.5 and 13.6 — OPENDOX_INSTALL_MODE and generate-and-ope…
brettheap Sep 30, 2026
2c96dfb
T072: 13.1 — the bundled PostgreSQL server, the local install's own c…
brettheap Sep 30, 2026
c3a70a2
T072: extend the dependency lock for the `local` extra and the test e…
brettheap Sep 30, 2026
32683e8
Fix round: the install-mode fixture's repository ignores the user's g…
brettheap Sep 30, 2026
95fe16f
Merge T070's fix round (32683e8) into T072
brettheap Sep 30, 2026
525f61c
Fix round: runtime migrate and reset refuse what a local install cann…
brettheap Sep 30, 2026
32db5d8
Merge T070's second fix round (525f61c) into T072
brettheap Sep 30, 2026
02dadc5
Fix round: status reports a local install's broker on its early retur…
brettheap Sep 30, 2026
ac61596
Merge T070's third fix round (02dadc5) into T072
brettheap Sep 30, 2026
859b37b
Fix round: a healthy local status is proven to exit 0, and RuntimeSet…
brettheap Sep 30, 2026
5e52872
Fix round: the local install's migrations, pid, initdb, start and int…
brettheap Sep 30, 2026
28bdccd
Merge T070's fourth fix round (859b37b6) into T072
brettheap Sep 30, 2026
96b2699
Fix round: an unprovable pid is not believed, and the state dir refus…
brettheap Sep 30, 2026
026f00e
Fix round: the install-mode module says which of its cases is DB-back…
brettheap Sep 30, 2026
4aed627
Merge T070's fifth fix round (026f00ea) into T072
brettheap Sep 30, 2026
a0fb7c8
Fix round: pyproject's packaging note names the resolver that exists …
brettheap Sep 30, 2026
0f77d5c
Fix round: libpq's environment, the socket's path and a relative HOME…
brettheap Sep 30, 2026
379fbb1
Fix round: the socket's path trusts no group and no link it cannot vo…
brettheap Sep 30, 2026
84a6c04
T072: pixeltable-pgserver carries the server, and it authenticates by…
brettheap Sep 30, 2026
f8e6e9e
Fix round: the data path, fresh directories and readiness belong to t…
brettheap Sep 30, 2026
adeb6fe
Merge main (047bb4fa) into T071: phase 2 has landed
brettheap Oct 2, 2026
3185e7d
Merge T071's merge-from-main head (adeb6fed) into T070
brettheap Oct 2, 2026
c8fac05
T070, owed at the merge round: the standalone generate-and-open runs …
brettheap Oct 2, 2026
fe232fe
Merge T070's merge round (c8fac05e) into T072: phase 2 is on the base
brettheap Oct 2, 2026
19e32f0
T072, owed at the merge round: the real entry point, and every --loca…
brettheap Oct 2, 2026
67b8d9d
T075: an installed entry point serves all 42 bundle files; intent-fee…
brettheap Oct 2, 2026
c39d960
Fix round: a PostgreSQL scheme libpq would not read as a URI is refus…
brettheap Oct 2, 2026
9ae5e72
Merge T071's fix round (c39d960e) into T070
brettheap Oct 2, 2026
cdf7382
Fix round: the --local callers inherit none of the runner's runtime s…
brettheap Oct 2, 2026
94254b1
Merge #67's fix rounds (cdf7382b) into T072
brettheap Oct 2, 2026
6eb0bbd
T072: the env probe expects the child's own state directory, never th…
brettheap Oct 2, 2026
65b2058
T075: read the served URL from a file, not a copied pipe reader (Sona…
brettheap Oct 2, 2026
d61bb9e
T075: the sibling probe names what it found; the bundle comment count…
brettheap Oct 2, 2026
d1de1fd
Fix round: the healthy-local status case sets its schema with make_co…
brettheap Oct 2, 2026
4df679b
T075: the browser walk follows carried dynamic imports; S5's counts r…
brettheap Oct 2, 2026
a7cf266
Merge T072's fix rounds (6eb0bbdb) into T075
brettheap Oct 2, 2026
0488f5b
Fix round: nothing is made through a path the tree check would refuse…
brettheap Oct 2, 2026
fedfa75
Merge #67's fix round d1de1fd9 into T072
brettheap Oct 2, 2026
cac12d9
Merge T072's fix rounds (fedfa75d) into T075
brettheap Oct 2, 2026
71d24af
T075: the state directory's removal is retried, bounded, and checked
brettheap Oct 2, 2026
105f2f1
Fix round: no runtime setting the runner exports reaches a tests_runt…
brettheap Oct 2, 2026
3426c75
Fix round 12: the auth files are exactly 0600, and the cluster runs o…
brettheap Oct 2, 2026
f66e5f8
Merge #67's fix round 105f2f12 into T072
brettheap Oct 2, 2026
a985407
T072: the in-process local cases give themselves a short state directory
brettheap Oct 2, 2026
e214477
Adversarial review M1: a comma in the state directory is refused
brettheap Oct 2, 2026
c4f5df3
Adversarial review L1: the carrier is pinned below 0.7, and another m…
brettheap Oct 2, 2026
b2d80e9
Adversarial review L3: the directory creation starts from is judged b…
brettheap Oct 2, 2026
9e2f303
Adversarial review L2: the local verbs judge their socket before conn…
brettheap Oct 2, 2026
21bde1a
Adversarial review note: no replication connection, logical or physical
brettheap Oct 2, 2026
a3cf5e9
Merge T072's adversarial-review round (21bde1af) into T075
brettheap Oct 2, 2026
28e195b
Fix round 13: the server is found as the installed distribution's own…
brettheap Oct 2, 2026
d99e5cc
T075: the walk reads imports with comments removed; a regression hold…
brettheap Oct 2, 2026
0457b38
Merge T072's fix round 13 (28e195b9) into T075
brettheap Oct 2, 2026
bf9bcb0
Fix round 14: a named platform gate, resolution failures as reasons, …
brettheap Oct 3, 2026
57b7ed8
Merge main 66ff7257 into T072: #67 (T070) and #61 (T078) landed
brettheap Oct 3, 2026
058d96e
Fix round 15: on Linux the parent-death signal is armed, or the serve…
brettheap Oct 3, 2026
085ba0b
Merge main 2fc714d2 into T072: #62 (T079) landed
brettheap Oct 3, 2026
d751138
Merge T072's fix rounds 14-15 and main 2fc714d2 (085ba0b0) into T075
brettheap Oct 3, 2026
3ebccb3
Fix round 16: a local install's served role and database are the bund…
brettheap Oct 3, 2026
52a2b8d
Merge main 9a490405 into T072: #74 (T081) landed
brettheap Oct 3, 2026
1e642b2
Merge T072's fix round 16 (3ebccb3c) into T075
brettheap Oct 3, 2026
0b0d762
Merge T072's main-merge (52a2b8dc) into T075
brettheap Oct 3, 2026
4a9dbe9
Fix round 17: the /proc falsifier is gated, and a backslash in the ma…
brettheap Oct 3, 2026
8986158
Fix round 18a: both bundle DSNs name their schema, public (Copilot re…
brettheap Oct 3, 2026
c04690f
Fix round 18b: a live pid /proc will not describe fails closed (Copil…
brettheap Oct 3, 2026
bbd91a3
Merge T072's fix rounds 17-18 (c04690f8) into T075
brettheap Oct 3, 2026
308523d
Merge main 5e7ab003 into T075: #69 (T072) landed
brettheap Oct 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -297,14 +297,27 @@ where = ["src"]
# the hosted GET fallback by a packaging omission rather than by a deployment
# choice.
#
# `web/**` and not a list: the bundle is 41 files across one subdirectory and
# `web/**` and not a list: the bundle is 42 files across two subdirectories and
# grows by feature, and a hand-kept list would drift the first time a view is
# added. `tests/test_web_boundary.py`'s census is what holds the DIRECTORY
# honest — every file under `src/opendox/web/` carries a declared row with a
# class, and an unrowed file fails immediately — so the glob here ships exactly
# what that census counts rather than whatever happens to be on disk.
#
# AND `web/**/.*` BESIDE IT (plan 034 T075; #1144 10.2): "ships exactly what
# that census counts" was not true of a wheel. setuptools expands each pattern
# with the standard library's `glob`, and a `*` or `**` there never matches a
# name that starts with a dot, so `web/**` alone shipped 41 of the census's 42
Comment thread
brettheap marked this conversation as resolved.
# files: `vendor/.gitkeep`, a census row, never reached an install, and the
# installed `opendox generate-and-open --local` answered it 404. A pattern
# whose last part starts with the dot is the one that matches such a name, at
# any depth under `web/`. Measured with both builds an install can run, pip's
# isolated build and `--no-build-isolation` over the `test` extra's
# setuptools: 41 files without it, all 42 with it.
# `tests_runtime/test_served_bundle.py` holds the wheel to the tree's
# `src/opendox/web/`, and fetches every file from the installed entry point.
[tool.setuptools.package-data]
opendox = ["web/**"]
opendox = ["web/**", "web/**/.*"]
# THE VALIDATOR'S PACKAGED COPIES (plan 034 T057; #1144 7.1, as T007's batch G
# amends it; R1Q12 (a), openxFactory#656 comment 5850003126). openDox's own
# validator reads its spec leg's four schemas from `opendox/contracts/`, and
Expand Down
17 changes: 14 additions & 3 deletions tests/test_gate_loop_contributed.py
Original file line number Diff line number Diff line change
Expand Up @@ -1025,11 +1025,22 @@ def test_the_bundle_glob_and_the_setuptools_floor_are_one_guarantee() -> None:
Measured on a real build at `setuptools 84.0.0`: 40 entries under
`opendox/web/`, 36 of them under `opendox/web/views/` — the whole census
except `vendor/.gitkeep`, which `glob` skips as a dotfile and which exists
only to keep an otherwise-empty directory in git."""
only to keep an otherwise-empty directory in git.

Those figures are S5's, at its tree. PLAN 034 T075 (#1144 10.2: the
entry point serves the 42-file bundle) re-measured them, at the same
`setuptools 84.0.0`: `web/**` alone gave 41 entries, 37 of them under
`opendox/web/views/`, every census file but `vendor/.gitkeep` again. T075
put `web/**/.*` beside the recursive pattern, because the census counts
that dotfile and an installed entry point answered it 404; with both, the
wheel carries all 42. The recursive pattern is still first and still the
one this guarantee is about; the line is held verbatim as it now reads,
and `tests_runtime/test_served_bundle.py` holds the wheel to the tree."""
text = (ROOT / "pyproject.toml").read_text(encoding="utf-8")
assert 'opendox = ["web/**"]' in text, (
assert 'opendox = ["web/**", "web/**/.*"]' in text, (
"the bundle ships by a RECURSIVE glob; a single `*` would package "
"app.js without `web/views/`")
"app.js without `web/views/`; and its dotfile pattern beside it ships "
"the census's `vendor/.gitkeep` (plan 034 T075)")
floor = re.search(r'requires\s*=\s*\["setuptools>=(\d+)', text)
assert floor, "the build system must declare a setuptools floor at all"
assert int(floor.group(1)) >= 63, (
Expand Down
7 changes: 4 additions & 3 deletions tests/test_validator_input_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,15 +414,16 @@ def test_the_package_data_ships_the_record_and_every_copy() -> None:
"""7.1 settles that the copies travel as PACKAGE DATA, so an install has
them beside the validator. The package-data table names, under
`opendox.contracts`, exactly the record and every schema copy the record
pins, and the bundle's own line is unchanged. (A wheel built without it
pins, and the bundle's own line is unchanged by 7.1. (A wheel built without it
carries `opendox/contracts/__init__.py` alone, and its validator refuses,
naming the absent record.)"""
naming the absent record.) The bundle's line is the one plan 034 T075
left it as: the recursive pattern and the dotfile one beside it."""
import fnmatch
import tomllib

table = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
data = table["tool"]["setuptools"]["package-data"]
assert data["opendox"] == ["web/**"]
assert data["opendox"] == ["web/**", "web/**/.*"]
patterns = data["opendox.contracts"]
shipped = sorted(
relative for relative in (p.relative_to(PACKAGE).as_posix()
Expand Down
Loading
Loading