Skip to content

HAC-341: the root URL served a blank page, and prepare the cold-read kit - #33

Merged
qmarcelle merged 1 commit into
mainfrom
hac/341-cold-read-kit
Aug 23, 2026
Merged

HAC-341: the root URL served a blank page, and prepare the cold-read kit#33
qmarcelle merged 1 commit into
mainfrom
hac/341-cold-read-kit

Conversation

@qmarcelle

Copy link
Copy Markdown
Contributor

/ and /cockpit rendered nothing

vercel.json rewrites / and /cockpit onto media/hac-341/cockpit.html. A
rewrite serves those bytes without changing the request URL, and a
document-relative specifier resolves against the request URL — so

import { armView } from './lib/arm-view.mjs';

resolved to /lib/arm-view.mjs and aborted. Same for ./lib/guide.mjs and the
./evidence/view-model.json fetch.

Measured against the live deployment:

URL HTTP body text
/media/hac-341/cockpit.html?… 200 1628 chars, renders the run
/cockpit?… 200 15 chars — "Skip to the run"
/?… 200 15 chars — "Skip to the run"

Those are the two URLs a judge visits. #27 made / stop 404ing; it did not make
it work.

Nothing caught it because every gate loads the file path directly — the one
path where the relative form happens to resolve.

Fix

The three references are anchored at /media/hac-341/, and the cockpit gate now
refuses a document-relative import/fetch statically: no server, no
deployment, and it fails on the specifier rather than on the blank page. One
negative proof asserts the mutation lands.

Cold-read kit

media/hac-341/cold-read/ — a moderator script to read verbatim and a
per-reader response sheet.

Status: READY_FOR_HUMAN_TEST. Prepared, not run, nothing claimed. HAC-341
stays open until three real readers complete it.

It names the public custom domain deliberately: every *.vercel.app URL for
this project is behind Vercel SSO (ssoProtection: all_except_custom_domains),
so a deployment URL would send a cold reader to a login page. All six tester
URLs verified HTTP 200 logged out on interlock.marcellelabs.io.

The sheet records verbatim answers rather than scores, and treats inferring
Agent Runtime / Agent Gateway, collapsing the two proof classes, or reading
ALLOW as authorized / EXECUTED as OBSERVED as automatic failures that
override any score.

Verification

  • pnpm run check exit 0
  • 645 tests
  • cockpit visual/contrast gate: 5606 text nodes, 46 scenarios, 0 failures, min 5.15:1

## `/` and `/cockpit` rendered nothing

`vercel.json` rewrites `/` and `/cockpit` onto `media/hac-341/cockpit.html`. A
rewrite serves those bytes without changing the request URL, and a
document-relative specifier resolves against the *request* URL — so

    import { armView } from './lib/arm-view.mjs'

resolved to `/lib/arm-view.mjs` and aborted. Same for `./lib/guide.mjs` and the
`./evidence/view-model.json` fetch. Both entry points returned HTTP 200 and
rendered a blank page with the body text "Skip to the run". Confirmed against
the live deployment: `/media/hac-341/cockpit.html` renders 1628 characters,
`/` and `/cockpit` render 15.

These are the two URLs a judge visits. #27 made `/` stop 404ing; it did not
make it work.

Nothing caught it because every gate loads the file path directly, which is the
one path where the relative form happens to resolve. The three references are
now anchored at `/media/hac-341/`, and the cockpit gate refuses a
document-relative import or fetch statically — no server, no deployment, and it
fails on the specifier rather than on the blank page. One negative proof.

## Cold-read kit

`media/hac-341/cold-read/` — moderator script and per-reader response sheet.
Status is READY_FOR_HUMAN_TEST: prepared, not run, nothing claimed.

It names the public custom domain, because every `*.vercel.app` URL for this
project is behind Vercel SSO (`ssoProtection: all_except_custom_domains`) and
would send a cold reader to a login page. All six tester URLs verified 200
logged out.

The sheet records verbatim answers rather than scores, and lists the automatic
failures — inferring Agent Runtime or Agent Gateway, collapsing the two proof
classes into one experiment, reading ALLOW as authorized or EXECUTED as
OBSERVED — as overriding any score.

pnpm run check exit 0, 645 tests, typecheck clean.
Copilot AI lite review requested due to automatic review settings August 23, 2026 15:29
@vercel

vercel Bot commented Aug 23, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
interlock Building Building Preview Aug 23, 2026 3:29pm

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@sonarqubecloud

Copy link
Copy Markdown

@codecov

codecov Bot commented Aug 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@qmarcelle
qmarcelle merged commit 574edef into main Aug 23, 2026
24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants