# Mi'gmaq v1 Deployment Verification

**Verified:** 2026-07-12  
**Release:** `migmaq-nllb-lora@1.0.0-rc1`  
**Public status:** guarded, noncommercial research preview

## Public routes

| Route | Result |
|---|---|
| `https://mobtranslate.com/labs/migmaq` | 200; live browser translation passed |
| `https://mobtranslate.com/api/labs/migmaq` | real inference passed; empty input 400; 401-character input 413 |
| `https://mobtranslate.com/dictionaries/migmaq` | 200; 7,062 canonical browse entries |
| `https://mobtranslate.com/models` | 200; research-preview action and complete model download visible |
| `https://mobtranslate.com/docs/migmaq-model-card.html` | 200 |
| model archive | 200/206; byte ranges supported |
| dataset archive | 200 |

The public API does not persist submitted sentence text. The Python inference service is loopback-only; Next is the bounded public proxy.

## Service verification

`mobtranslate-migmaq-v1-infer.service` loaded the verified merged weights under CPU float32 with four beams, no-repeat trigram, repetition penalty 1.10, and length penalty 1.0. It warmed up before readiness, completed held-out and public requests, used no cgroup swap, and had zero restarts. Observed peak memory was 5,371,129,856 bytes. Requests completed in roughly 4-7.5 seconds during verification.

The obsolete Kuku Yalanji v21.1 process was disabled. The current `kuku-v2-infer.service` remained active, and both `/labs/v2` and `/api/labs/v2` passed after deployment. `/translate/v2` now presents the current Kuku Yalanji research client rather than depending on the retired process.

## Artifact verification

- Complete merged-model archive: 2,247,094,395 bytes.
- Archive SHA-256: `2abe9602ee2b47cee8037b6839ce8faa052f867280591d0d917b2eea4260d591`.
- Archive member listing and gzip stream validation: pass.
- Public one-byte range request: HTTP 206 from origin and Cloudflare.
- Model manifest, frozen-test predictions, adapter directory, merged directory, and recovery checkpoint are browseable under the versioned artifact path.

## Browser verification

The translator was inspected at 1440 by 900 and 390 by 844. The desktop two-column surface, mobile stacked surface, warning, copy control, examples, state transitions, dictionary/model links, and generated text all rendered without overlap. Mobile document width equalled viewport width (`390`), so there was no page-level horizontal overflow. A browser-submitted English sentence produced `Negm etlmisga'sit.` and displayed model identity and latency.

Saved screenshots under `reports/ui-verification/` include:

- `migmaq-desktop-1440x900.png`;
- `migmaq-desktop-output-settled-1440x900.png`;
- `migmaq-mobile-output-390x844.png`;
- `migmaq-mobile-full-390.png`;
- `models-migmaq-desktop-1440x900.png`;
- `migmaq-dictionary-canonical-7062-desktop.png`;
- `migmaq-word-recordings-desktop.png`.

## Dictionary and audio verification

The first dictionary page was checked after the non-destructive canonical browse migration. It reports 7,062 entries, seven canonical word classes, and no repeated same-class headwords in the first 50 rows. The `agase'wa'latl` detail page exposes three word recordings and one example-recording control with Mi'gmaq Online attribution and CC BY-NC status. A real playback request returned HTTP 206 from `/api/storage/recordings/imports/mikmaq-online/...mp3`.

## External-script observation

The application origin is error-free when third-party analytics are blocked. Cloudflare Zaraz injects `https://openpanel.dev/op1.js`; that cross-origin script currently throws an opaque line-0 `TypeError` in a fresh Chromium session. Loading only `mobtranslate.com` removes the error. The translator request, React state, API, and inference service do not throw. This is retained as an external analytics issue rather than being misattributed to the Mi'gmaq application.

## Build and test record

- focused Mi'gmaq source/dataset tests: 6/6 passed;
- TypeScript check: passed after final query changes;
- targeted ESLint over changed translator, model-registry, DB-query, and type files: passed;
- production build with production environment: passed, 353/353 static pages generated;
- existing `jose` Edge-runtime warnings remain unrelated to these routes;
- web restart: clean, zero web-service restarts after deployment.

