Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
1cd340d
verification: add Simulator runner, STATE probe and UX checklist
SamGu-NRX Sep 26, 2026
05f70dc
verification: time states by the log clock; fix probe argument
SamGu-NRX Sep 26, 2026
78d6553
verification: check replay sessions against C3 and ground truth
SamGu-NRX Sep 26, 2026
2a6d3f7
verification: add end-to-end server check
SamGu-NRX Sep 26, 2026
42b9fdc
verification: probe checks the Simulator can read a host-path replay;…
SamGu-NRX Sep 26, 2026
e0959c2
verification: solver shim, per-use worktrees, margin rule for other u…
SamGu-NRX Sep 26, 2026
328373d
verification: record load average with e2e latency
SamGu-NRX Sep 26, 2026
2ae5a80
verification: add the scoreboard; e2e reports app exports
SamGu-NRX Sep 26, 2026
ede8be1
verification: regenerate scoreboard
SamGu-NRX Sep 26, 2026
c47c70e
verification: independent placement cases from the public goldens
SamGu-NRX Sep 26, 2026
5ed6fda
verification: count contract problems apart from case expectations
SamGu-NRX Sep 26, 2026
8610d63
verification: accessibility audit harness; probe gains a negative con…
SamGu-NRX Sep 26, 2026
0d4f1d6
verification: fix cases that missed public rules; accept a named raw-…
SamGu-NRX Sep 26, 2026
69592e6
verification: independent accessibility audit per screen
SamGu-NRX Sep 26, 2026
6cf8692
verification: pick the JSON-answering upload endpoint; variants keep …
SamGu-NRX Sep 26, 2026
0b21608
verification: scope app evidence to the app branch's runs; regenerate…
SamGu-NRX Sep 26, 2026
c692a8d
verification: goldens 07 and 09; cases can rule out one outcome and p…
SamGu-NRX Sep 26, 2026
820ac91
verification: real-geometry scene from ETH3D facade
SamGu-NRX Sep 26, 2026
9e25dbf
verification: regenerate scoreboard
SamGu-NRX Sep 26, 2026
fc1858e
verification: C5 check reads the review line; margin must be within e…
SamGu-NRX Sep 26, 2026
9038202
verification: runner waits only for compiling builds; reports keep ev…
SamGu-NRX Sep 26, 2026
1330a82
verification: start the product description of the capture app
SamGu-NRX Sep 26, 2026
e38ca04
verification: product description pilot, first Simulator pass, triage…
SamGu-NRX Sep 26, 2026
7c2c9ab
verification: make sim-app and make e2e; reports record peak memory
SamGu-NRX Sep 26, 2026
e18a2eb
verification: product description and UX review at t3/ios-mvf 0876e03…
SamGu-NRX Sep 26, 2026
60fe0d3
verification: recheck at t3/ios-mvf 525ea40; fix a race in the audit …
SamGu-NRX Sep 26, 2026
4b4425b
verification: scoreboard with the slow probes run
SamGu-NRX Sep 26, 2026
5e60831
verification: regenerate scoreboard
SamGu-NRX Sep 26, 2026
30e866c
verification: recheck at t3/ios-mvf beede15
SamGu-NRX Sep 26, 2026
97cebbf
verification: derive coverage radii from rules.yaml, add ordering, co…
SamGu-NRX Sep 26, 2026
3b6459c
verification: widen each clearance's reach by the battery's error, ch…
SamGu-NRX Sep 26, 2026
56bdde6
verification: recheck at t3/ios-mvf a39d0a5 and t3/server 739fb6f
SamGu-NRX Sep 26, 2026
683a386
verification: read ru_maxrss in kilobytes on Linux
SamGu-NRX Sep 26, 2026
eb903b7
verification: friction audit of the homeowner's path at t3/ios-mvf a3…
SamGu-NRX Sep 26, 2026
52aa87f
verification: recheck t3/server 779f0c3, hosted and 0bad4de; stale ro…
SamGu-NRX Sep 26, 2026
29b7b7d
verification: final app run on the hosted API at t3/ios-mvf 194f2eb
SamGu-NRX Sep 26, 2026
63350b1
verification: point the facade scene's rule sources at docs/04
SamGu-NRX Sep 26, 2026
e0e3ae6
verification: fix the review's nine findings; move the app reviews to…
SamGu-NRX Sep 27, 2026
5f73553
verification: count a past-end request as covering what lies beyond t…
SamGu-NRX Sep 27, 2026
4fe1e43
verification: cut the README to the experiment format; move what each…
SamGu-NRX Sep 27, 2026
5df7468
verification: require views strictly past the needed height; credit w…
SamGu-NRX Sep 27, 2026
3e95373
verification: check each sweep start alone; survive malformed answers…
SamGu-NRX Sep 27, 2026
544db3b
verification: say that sweep coverage samples starts, not the server'…
SamGu-NRX Sep 27, 2026
c114db2
verification: facing and headroom need the band past the battery by t…
SamGu-NRX Sep 27, 2026
1b62f94
verification: widen facing and headroom by the drifted error, as the …
SamGu-NRX Sep 27, 2026
de53ecd
verification: lay walls out and check declared heights as server 7133…
SamGu-NRX Sep 27, 2026
1a0433e
verification: scoreboard and result at server 7133283
SamGu-NRX Sep 27, 2026
77ae847
verification: a wall view without out_ft reached headroom height, as …
SamGu-NRX Sep 27, 2026
fcfecba
verification: claim only demonstrated reach in the ETH3D builder; owe…
SamGu-NRX Sep 27, 2026
36ac02f
verification: scoreboard and result at server 9176125
SamGu-NRX Sep 27, 2026
64d70d1
verification: app rows at t3/ios-mvf f14947e; read its bundle line; t…
SamGu-NRX Sep 27, 2026
33811e4
verification: close three false certifications; pin to server 4a9fa44
SamGu-NRX Sep 27, 2026
7761447
verification: sample ground cells at their centres as well as their e…
SamGu-NRX Sep 27, 2026
371c512
verification: pin to server 86b2b4d; scoreboard and result
SamGu-NRX Sep 27, 2026
21c8832
verification: a reject needs every start failing; a footprint needs i…
SamGu-NRX Sep 27, 2026
255bc84
verification: pin to server 3baa338; accept a pass by the smallest re…
SamGu-NRX Sep 27, 2026
379e5ad
verification: match server 3baa338's coverage, from the final Opus re…
SamGu-NRX Sep 27, 2026
b9f1601
verification: three more false certifications from Codex on 255bc84
SamGu-NRX Sep 27, 2026
fb20cf7
verification: app rows at #10's freeze c820cf1; band gaps under 0.01 …
SamGu-NRX Sep 27, 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
42 changes: 42 additions & 0 deletions .github/workflows/verification.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Verification

on:
push:
branches: [main]
paths:
- "verification/**"
- ".github/workflows/verification.yml"
pull_request:
paths:
- "verification/**"
- ".github/workflows/verification.yml"

permissions:
contents: read

concurrency:
group: verification-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
verification-checks:
name: Verification checks
runs-on: ubuntu-24.04
timeout-minutes: 10
defaults:
run:
working-directory: verification
steps:
# The default depth of 1 is enough: tests/test_gitref.py only reads HEAD, and a detached
# worktree of HEAD works in a shallow clone.
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
# Reads tool.uv.required-version from verification/pyproject.toml to pick the uv version.
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
with:
working-directory: verification
- run: uv sync --locked
- run: uv run ruff check .
- run: uv run ruff format --check .
- run: uv run pytest -q
46 changes: 46 additions & 0 deletions verification/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Independent verification. Every target runs from this folder; reports go to
# ~/house-scanning-data/reports/ (outside git) because runs can show dataset frames.

REF ?= origin/t3/ios-mvf
SERVER_REF ?= origin/t3/server
# Set SERVER_URL to use a running server (the hosted API) instead of starting one from SERVER_REF.
SERVER_URL ?=
SERVER = $(if $(SERVER_URL),--server-url $(SERVER_URL),--server-ref $(SERVER_REF))
REPLAY ?= $(HOME)/house-scanning-data/replays/advio-20-0040-0075
ARGS ?=

.PHONY: test sim sim-app sim-probe e2e scoreboard

test:
uv run ruff check .
uv run ruff format --check .
uv run pytest -q
Comment thread
SamGu-NRX marked this conversation as resolved.

# Build REF for the Simulator, run it with ARGS (e.g. ARGS="--replay <dir> --autopilot"),
# screenshot every STATE.
sim:
uv run python -m hsverify.simrun --ref $(REF) $(ARGS)

# The app at REF on the real ADVIO replay (C3), driven by its autopilot, uploading to the server
# started from SERVER_REF (or at SERVER_URL): a screenshot per STATE in ~/house-scanning-data/reports/sim/. Fails
# unless the run reaches the result state; the scan bundle is copied into the report as scan.zip.
sim-app:
uv run python -m hsverify.simrun --ref $(REF) --replay $(REPLAY) --autopilot \
$(SERVER) --extra-arg=-autopilotHold --extra-arg=3 \
--idle 60 --timeout 900 --require result --require-export --label replay $(ARGS)
Comment thread
SamGu-NRX marked this conversation as resolved.

# Every case in e2e/cases/ plus the ETH3D facade scene through the server's API at SERVER_REF;
# each result is validated against server/schemas/result.schema.json at the same ref.
e2e:
uv run python -m hsverify.e2e $(SERVER) --scene scenes/eth3d-facade/case.json $(ARGS)

# Self-test of the runner against a fixture app that logs a known STATE sequence.
sim-probe:
uv run python -m hsverify.simrun --ref HEAD --project verification/fixtures/state-probe/StateProbe.xcodeproj \
--scheme StateProbe --until probe_done --extra-arg=-probeArg --label probe

# Every open PR with its CI, and every overnight-plan metric with its evidence or gap. Writes
# SCOREBOARD.md and scoreboard/scoreboard.json. ARGS=--slow also runs the slow test probes;
# ARGS="--slow S2-1" runs only that one.
scoreboard:
uv run python -m hsverify.scoreboard $(ARGS)
36 changes: 36 additions & 0 deletions verification/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Verification (S4)

**Question.** Do the app and server branches do what the plan says? Pass: the app at
`t3/ios-mvf`'s head reaches a result from the real ADVIO replay and keeps its scan; every server
answer at `t3/server`'s head validates against the result schema and never passes without the
coverage its checks need; hostile inputs are refused, or answered with a valid result, within
10 s and 500 MB of server growth; each plan metric has evidence at the current head.

**Run**, from `verification/`, with uv (and Xcode 26 with an iOS Simulator for `sim-app`):

```
make sim-app # REF=, SERVER_REF= or SERVER_URL=
make e2e # ARGS="--app-export <sim report>"
make scoreboard # writes SCOREBOARD.md
make test
```

Reports go to `~/house-scanning-data/reports/`, outside git, because replay frames come from
non-commercial datasets. What each check asserts is in the docstrings of `hsverify/e2e.py`,
`resultcheck.py` and `simrun.py`.

**Result.** At `t3/server` `3baa338`, with the app's upload from `c820cf1` (#10's freeze, synthetic
replay, hosted server), 49 of 50 scenes pass (45 answered and checked; slowest real scene 0.48 s).
The ETH3D scene fails: after its one requested capture the server leaves pool unsure with no
request or reason.

**What it changed.** S2 fixed seven defects it found:
- unseen ground passing the pool check;
- a short reach cutoff;
- unbounded input cost;
- incomplete photo requests;
- repeated requests past a wall end;
- ground past a real end ignored;
- a facing gap called too close to call.

The friction audit (#61) became team decision 8.
Loading