site: the redirect is a 307, and card 43's line numbers had moved

Two small corrections found while checking 0.4-alpha's deploy.

wrangler.jsonc claimed the slashless form redirects with a 301; measured
against the live site it is a 307. The code is the host's choice rather
than anything this repo sets, so the post-deploy check now says to
confirm that it redirects at all — the property the site depends on —
and records the observed code beside it rather than asserting one.

Card 43 already describes the two test_boards_sync failures a team-mode
checkout sees, and still describes them correctly; only its pointer into
the test file had drifted — reload() sits at 598 now, not 481.
config.py:53-69 is still exact.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
istos
2026-08-03 07:02:41 +02:00
co-authored by Claude Opus 5
parent 080d2d767e
commit dff4a42a86
3 changed files with 7 additions and 5 deletions
+3 -1
View File
@@ -127,7 +127,9 @@ answers rather than files:
1. `https://bench.12vectors.com/` serves the landing page over TLS.
2. `https://bench.12vectors.com/concepts/claiming-a-card` redirects to
the same path with a trailing slash, and no url anywhere ends in
`.html`.
`.html`. Measured, the redirect is a **307** — the host's choice, not
a setting this repo holds, so check that it redirects at all rather
than which code it picks.
3. A path that does not exist — `/nope/` — renders the site's own 404
page **with a 404 status**, not the landing page with a 200.
4. `curl -sI https://bench.12vectors.com/` shows
+1 -1
View File
@@ -19,7 +19,7 @@
// so a deploy from a clean checkout builds first.
"directory": "./dist",
// /concepts/claiming-a-card -> 301 -> /concepts/claiming-a-card/,
// /concepts/claiming-a-card -> 307 -> /concepts/claiming-a-card/,
// which is the url the pages link and the one <link rel=canonical>
// names. One page, one address: the slashless form redirects rather
// than serving a second copy, and no url ever ends in .html.
@@ -18,7 +18,7 @@ tests are about — the assertion reads that file and fails. CI has no
a dict and then does `values.update(os.environ)`. Process environment
beats the file, and the file beats the defaults. That precedence is
right and documented; what follows from it is not obvious.
- `tests/test_boards_sync.py:481-496``TheGateImpliesCommitMoves.reload()`
- `tests/test_boards_sync.py:598-613``TheGateImpliesCommitMoves.reload()`
**pops** `BOARD_SYNC` and `BOARD_COMMIT_MOVES` from `os.environ` and
reloads `config`, to stand for a machine that has set neither. Popping
removes the only layer that was overriding `local/.env`, so the reload
@@ -52,8 +52,8 @@ tests, `tests/test_boards_sync.py` first.
`tests/__init__.py`, which every run imports — that sets the override
before `config` is first imported, so no individual test has to
remember. Note that several test modules import `config` at module
scope (`test_boards_sync.py:27`), so wherever this lands it has to
happen first.
scope (`tests/test_boards_sync.py:27`), so wherever this lands it has
to happen first.
- **Say it where it will be read.** One line in the `_load_env()`
docstring: the process environment is the only layer above the file,
so removing a variable does not reveal the default, it reveals the