Current A682 outcome: replacement results pass for SaintJohn 629580 and 629508 in all three offline views. The five Moncton results stand. A682 attributes the former Saint John mismatch to an OR1-versus-GeoNB reference-selection error and withdraws 619072/619105. No numerical core file or threshold changed. Per the A682 addendum, replacement download receipts are provided by M6 server-side; the Mac receipt window is cancelled. The Mac offline placement packet is final; zero windows/export/replay. The A673 paragraph below records the earlier stop before A682’s ruling.
Current method: A673/A666, FS3 361c681def79cbce5549edc32f93f88360365e85 and contracts b707a0cf2108bc66cd7ee3c41d17bf0fb16b39c2. See current offline results: scale self-test PASS; five Moncton PASS; SaintJohn-619072 FAIL; SaintJohn-619105 not run under the required stop rule. Await Claude/M6 before any further placement acceptance run or live window.
Building identity now maps DTO modelVersionId through the outline pack to GLB host buildingId=city-houseId. Ground is the true union of index-order extras.faceKinds=base triangles in delivered ENU Z-up, projected horizontally. No DTO buildingId guard, Y-up reconversion, reveal-group eligibility or Z threshold is used. Missing host/ID/tags gives footprint-unidentifiable. Native EPSG:2953 gate: IoU ≥ 0.98 and symmetric Hausdorff ≤ 0.10 m, with a conservative sampling bound; stop on the first failure. DRAFT/notSurveyed and visual-only basemap status remain intact.
Private real bytes stay in ignored .external/private-placement-a673/, referenced by path plus verified SHA/size against Gate C receipts. The test-only private acceptance command is MITMON_RUN_A673_PLACEMENT=1 VITE_DEV_PORT=5183 npm run test:smoke -- tests/smoke/placement-a673.spec.ts --workers=1; do not rerun until the current failure is reviewed. Synthetic regressions use strict 5180 and do not read those private bytes. The T7 audit checks exclusion of all seven real fixtures and the polygon-clipping/projection closure from release output.
The sections below preserve historical preparation and attempt-2 provenance. Their original feature-guard, Z-threshold, renderer pin and scale-failure statements are superseded by A673/A666 above; they do not describe the current checker.
This is a separate dev/test-only checker at /placement-check, not Gate C. No real M6 model, authenticated API request, forward or export was used for this preparation. No server was started on 5173 or 8787; TEST Chromium used strict 5180 and intercepted every M6 request. Worker 8 owns Gate C. Live per-building evidence waits for the orchestrator’s later window.
The full supplied source note and byte-identical GeoJSON are preserved. SHA-256 913a15a25dea6743c24a08ae6244882b002bb8e10b7dc7ba8c2102eb5968c575 matches Mitch/M6. The pack contains five Moncton and two Saint John models, with full version IDs, original native EPSG:2953 rings, anchor E/N/Z, source and operation.
DRAFT until Gate C and every original notSurveyed string are retained verbatim in the page and measurements. These are official GeoNB/OGL-NB v2 outlines, not surveyed corners. Their operation has stated 1 m accuracy and the source note expects roughly 1–2 m versus web basemaps. Millimetre numerical agreement is not a surveyed or basemap accuracy claim. All seven source GeoReferences declare vertical datum/status unknown; Z is retained as local-ground provenance, and this checker performs no vertical datum conversion.
Projection uses the supplied operation, “Inverse of New Brunswick Stereographic (NAD83) + NAD83(CSRS) to WGS 84 (2)”, explicit E/N order, NB stereographic/GRS80 and the seven Helmert parameters. PROJ coordinate-frame rotation signs are reversed for proj4’s position-vector convention. No grid or network datum lookup is used. Every supplied native vertex and anchor is checked against the independently produced M6 WGS84 value, with a 0.001 m numerical tolerance; inverse native coordinates have the same tolerance. The previous independent PROJ controls remain in the existing georeferencing tests.
The page loads the model by its exact version ID through the existing signed-in API transport and bound public schemas. Parsed GeoReference fields must match the corresponding authoritative input before preview access. It selects only an approved LoD2 GLB with preview/use rights, validates access, bounded content, declared size/SHA and inspectGlb through verifyArtifact, then uses the unchanged FS3 GeographicScene.
A completed frame is measured in three camera states: overhead, tilted and pan/zoom. Only declared feature IDs with footprint reveal groups and mesh tags are accepted; they must identify one building. Ground vertices must lie within 0.01 m of local ENU Z=0 after mesh/world transforms. Missing/ambiguous/elevated ground fails closed; no roof, surroundings, visualization receiver, coverage tile or untagged whole-model hull is substituted.
The accepted ground vertices are projected orthogonally to local ENU Z=0 for the horizontal hull; no elevated mesh is flattened into eligibility. The mesh/world point then passes through the actual completed-frame camera matrix, CSS pixel coordinates and MapLibre inverse projection. Metrics are calculated independently in WGS84 ellipsoid local ENU metres and by inverse projection to native EPSG:2953 E/N metres:
Three comparisons remain separate: rendered hull versus original outline; rendered hull versus official convex hull; and official convex hull versus original outline (shape baseline). Moncton 292892 has concave notches. Its 0.529195 m native hull baseline is not evidence of a shifted model. Hulls also cannot establish wall/topology alignment at every notch or interior boundary. A later live check must review those actual wall/outline screenshots as well.
mocked-render-results.json records all 21 completed-frame measurements and metadata; mocked-render.png shows the actual renderer over OpenFreeMap with the official blue outline. The GLBs are generated only in a .test-fixture.ts file from the official WGS84 outlines as an ellipsoid ENU producer example, and intercepted HTTP uses contract-valid models with the exact expected GeoReferences. These bytes are not M6 GLBs and are never selectable/shipped by the application.
Maximum over the three camera states; boundary columns are sampled distances (add 0.005 m for the bound). Centroid is hull-to-hull; rotation is the absolute principal-axis difference.
| Reference | WGS84 boundary (m) | EPSG:2953 boundary (m) | WGS84 centroid (m) | WGS84 axis rotation (°) |
|---|---|---|---|---|
| Moncton 293607 | 0.014580 | 0.014580 | 0.000001 | 0.608013 |
| Moncton 292892 | 0.017660 | 0.017661 | 0.000094 | 0.137152 |
| Moncton 7111 | 0.030558 | 0.030559 | 0.000007 | 0.338849 |
| Moncton 2933 | 0.017320 | 0.017320 | 0.000004 | 0.129985 |
| Moncton 6924 | 0.017341 | 0.017342 | 0.000003 | 0.175923 |
| SaintJohn 619072 | 0.005371 | 0.005372 | 0.000000 | 0.188864 |
| SaintJohn 619105 | 0.007527 | 0.007527 | 0.000000 | 0.248130 |
The known FS3 spherical east-scale error is preserved: the seven real-reference 100 m east checks plus the earlier Moncton check remain eight expected failures at 0.05 m tolerance. These small building hull distances do not close that gate. Moncton 293607 is almost square, so the anisotropic scale error produces about 0.608° principal-axis difference despite a 0.015 m boundary distance. Browser tolerances describe this existing mock behaviour, not accepted live accuracy.
Tests also inject a 2 m east shift and 4° rotation into every model, detect both in both coordinate systems, reject models without tagged ground, and reject a wrong returned model ID before preview access. Pure metric tests recover the exact translation/rotation on a well-conditioned rectangle, check ring reversal/resampling/holes, detect interior concave-boundary maxima, and reject degenerate geometry. Across camera states, boundary and centroid drift must stay under 0.00001 m and axis drift under 0.001°. The per-reference buttons use verified in-memory bytes to revisit any successful reference for screenshots; identity changes clear previews, measurements and cache.
Approved FS1 commit: b707a0cf2108bc66cd7ee3c41d17bf0fb16b39c2; package revision 0.1.4, public wire 0.1.1. A bare scratch clone of the existing M6 repository supplied committed bytes via git archive; neither checkout was changed. The source checkout remained d09cec002d711ae5d3479ceb0923699844c4649a before and after. Archive regenerators require an explicit MITMON_M6_SOURCE scratch path and never checkout/reset or read the source worktree’s package bytes.
| Input | Local SHA-256 |
|---|---|
| contracts 0.1.4 npm archive | 99eef69613643a2cd53c4c3fc756ca66abf956d078ef571dae1247afa8f65eb9 |
| geo 0.1.4 npm archive | bee0de6bce536f4e3001e458078d60c95e4903af71c015782f1529fbddcb18de |
| supplied OpenAPI and b707 source OpenAPI | f7d7f43895af0c7c4e539fdad818a0e5797a24a5ae42e18dc8623405fe5718ed |
The promised independent package checksum handoff is PENDING; the above archives are locally generated/verified against the approved commit, not falsely attributed to an upstream checksum receipt. Exact source/file manifests are in contract-binding.json and fs3-binding.json.
Root-owned local archives plus npm $ overrides resolve the unchanged FS3 packages’ 0.1.2 declarations to one contracts/geo 0.1.4 copy. Geo math source is byte-identical to the prior version. Renderer commit/source/archive remain immutable at 2dd02d0750057b0d94be98e5a2df10b97f049cee; no scale compensation was added to app or test geometry. Contracts 0.1.4 accepts ZIP. Only this branch’s obsolete ZIP-negative mock expectations were changed to unsupported MIME; no worker 8 runner, approval or export was changed. The inactive older Gate C page’s wording will be superseded by worker 8’s instructed merge, not used as current live evidence.
Prepare explicit operator inputs without making API calls:
node scripts/prepare-placement.mjs \
~/mitmonlabs-handoff/reviews/PLACEMENT_CHECK_PACK_OUTLINES.geojson \
~/mitmonlabs-handoff/gate_c_checklist/mac-check-inputs.json
The two ignored .placement-* copies are hash-checked on dev-server start. The browser validates the public contract shape before enabling requests. There is no fixture verifier, runtime mock selector, token import/export or export action. TEST server setup uses committed reference files only and restores any existing operator files on shutdown.
Preparation tests:
npm test
npm run typecheck
npm run lint
npm run test:smoke -- tests/smoke/placement.spec.ts
VITE_API_ORIGIN=https://api.review.invalid npm run build
npm run audit:artifact
For the later live run only, the orchestrator coordinates the ports/origin and Mitch signs in normally. Open /placement-check, run the seven checks, inspect each reference and save sanitized geometry metrics/screenshots. Label them live dev-profile evidence explicitly. Do not promote the reference pack’s DRAFT status without M6/Gate C confirmation; do not infer survey accuracy, authorize exports or alter the Gate C workflow.
The dev route is guarded by import.meta.env.DEV. Release graph checks reject every app src/dev/ module, tests, private schemas and the proj4/wkt-parser/mgrs projection closure. Graph canaries verify both rejection and that the AO workspace’s own /dev/ path does not trigger false positives. Static output markers also reject the placement page/input endpoint. The normal release-profile build/audit contains 17 files and 295 browser modules with zero dev/test/private modules; the release origin/header policy is unchanged. This remains NOT DEPLOYABLE with https://api.review.invalid, not A459 certification. A459 and the reviewed FS3 correction are PENDING-UPSTREAM. No review bundle was made for this task.
These checks are local development/review verification only. Live per-building proof, upstream independent package checksum receipt, FS3 correction and A459 remain pending. No deployment, provider publication, new review bundle or Gate C export occurred.
The checker, projection/metric modules and test controls were read from worker 7’s b9efb9e into worker 8’s branch. No worker 7 files or branch were modified. Its binding overrides were not imported: this branch keeps M6’s accepted contracts 0.1.4 root/app and nested FS3 contracts 0.1.2, with the existing strict GLB adapter. FS3 source and georeferencing math remain unchanged. The historical worker 7 verification counts above are source provenance, not this branch’s verification results.
The official outline copy was prepared from the handoff GeoJSON and verified against SHA-256 913a15a25dea6743c24a08ae6244882b002bb8e10b7dc7ba8c2102eb5968c575. New sanitized placement receipts include model/access/content request IDs, statuses and timestamps. The dev-only sink rejects arbitrary values, preserves DRAFT/notSurveyed text exactly, and writes no identity or credentials. Render callbacks allow the fresh instrumented profile to capture each actual completed frame before the next view advances.
Current mocks run on strict 5180 only. Local build output audits reject the checker and its proj4/wkt-parser/mgrs closure. The accepted eight Gate C HTTP checks and coverage-tile containment remain distinct from these per-building comparisons. Numerical measurements and the FS3 east-scale defect require honest reporting; small building offsets do not certify the 100 m scale probe.
Live model/access/content receipts are 200 and verified downloads render, but every reference fails ambiguous-ground-building. The reviewed guard requires declared footprint features to identify exactly one non-empty building ID; zero/multiple/missing IDs are rejected. The bounded diagnostic distinguishes this post-download failure from content-fetch or operator gaps. No alternate roof, tile or untagged hull is substituted, and the DRAFT/notSurveyed status remains unchanged. M6’s intended building/footprint mapping is needed before per-building alignment metrics can be certified. Live results.
Placement is checker incompatible with real GLB structure – pending fix. The guard runs before mesh traversal; the evidence does not establish missing ground geometry/tags. Verified real bytes were memory-only and are no longer retained after the window. Read-only diagnosis lists the retained invariants and uncaptured structure facts, test-fixture assumptions, browser attribution, three schema-valid guard regressions and a proposed producer-convention adapter. The measurement implementation is unchanged; no placement is claimed.
The A673/A682 placement checker was integrated into the left-rail, named-route SPA; the Gate C runner was removed after M6 acceptance. Dev routes /placement-check and /a682-receipts are registered in apps/web/src/routes.ts only when import.meta.env.DEV is true, so release output excludes them; scripts/audit-static-artifact.mjs fails the build on any marker. Mocked specs run on the worker port 5180 (never 5173). Private A673/A682 GLBs stay in ~/mitmonlabs-handoff/test_fixtures/ and are never committed.