verae-mcp-timestamping-serv.../docs/test-reports/2026-09-29T162528Z-go-mcp-cutover/TEST-REPORT.md
George Lambert f021ee46b4 docs: L5/L7 PASS after laptop VeraeTime login refresh
Refreshed ~/.verae/auth.properties via verae-timestamp login; retested
ApplicationClient global hash_report and transaction_log_test (unique 1).
2026-09-29 12:33:19 -04:00

145 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Go MCP cutover — full test report
**Run ID:** `2026-09-29T162528Z-go-mcp-cutover`
**Finished (UTC):** 2026-09-29T16:28:00Z (approx)
**Subject under test:** Go `verae-mcp-timestamping-server` on ns1 replacing Python
**Binary:** `/opt/verae/verae-mcp-timestamping-server-go/bin/verae-mcp-timestamping-server`
**Git (local):** `a249564` (+ Caddy fix for `mcp.georgelambert.org` during this run)
**Forgejo:** https://git.georgelambert.org/marchon/verae-mcp-timestamping-server-go
## Executive summary
| Metric | Value |
| --- | --- |
| Cases run | **15** |
| Passed | **15** (after L5/L7 retest) |
| Failed | **0** |
| Go MCP live path | **Healthy** (`127.0.0.1:8000`, embedded NATS `127.0.0.1:4229`) |
Initial run had 2 laptop-auth failures (expired `~/.verae/auth.properties`). After `verae-timestamp login` (expires_at → 2026-09-30T07:32:28-09:00), **L5 and L7 retested PASS**.
## Deploy snapshot
| Setting | Value |
| --- | --- |
| systemd unit | `verae-mcp-timestamping.service` |
| Drop-ins | `go-cutover.conf`, `verae-ai.conf` |
| `VERAE_MCP_PORT` | `8000` |
| `VERAE_NATS_LISTEN` | `127.0.0.1:4229` |
| `VERAE_MCP_REQUIRE_BEARER` | `0` (host-token fallback) |
| `VERAE_AUTH_PROPERTIES` | `/var/lib/verae-mcp/auth.properties` |
| Public hosts | `mcp.verae.ai`, `mcp.veraetime.net`, `mcp.georgelambert.org` → `127.0.0.1:8000` |
**During this run:** `mcp.georgelambert.org` Caddy upstream was corrected from `10.1.10.128:8000` (502) to `127.0.0.1:8000`. A `.bak` file that caused “ambiguous site definition” was moved out of `/etc/caddy/sites/`.
## Results matrix
| ID | Case | Status | Notes |
| --- | --- | --- | --- |
| U1 | Go unit tests (`go test ./...`) | **PASS** | authctx, embednats, ledger, server, tools, veraetime, digest, tsnats |
| U2 | Python client unit tests | **PASS** | 47 passed |
| U3 | Python server unit tests | **PASS** | 34 passed |
| L1 | Public MCP suite (`mcp.verae.ai`) | **PASS** | tools/list (7 tools), global hash_report, local stamp+verify, session valid admin |
| L2 | MCP global stamp (unique digest) | **PASS** | host-token fallback |
| L3 | MCP 20× same digest global stamp | **PASS** | unique=1, same=True, ~3.92s, CID `QmXgqQn8…` |
| L4 | Python `ApplicationClient` via MCP | **PASS** | local stamp, verify, hash_report |
| L5 | `ApplicationClient` direct VeraeTime | **PASS** (retest) | After `verae-timestamp login`; hash_report global ≥1 receipt |
| L6 | CLI `verae-timestamp hash` | **PASS** | 64-hex digest |
| L7 | `transaction_log_test.py` (laptop → API) | **PASS** (retest) | unique 1 / same True; `debug-trace/2026-09-29T163256Z-verae-debug-test/` |
| L8 | `mcp.veraetime.net` tools/list | **PASS** | same Go process |
| L9 | `mcp.georgelambert.org` MCP | **PASS** | after Caddy upstream fix; session OK |
| L10 | `pkg/tsnats` → embedded NATS `:4229` | **PASS** | local stamp via SSH tunnel |
| L11 | Static site pages on `mcp.verae.ai` | **PASS** | `/`, developers, ways, openapi, app, explorer |
| L12 | ns1 loopback 5× global idempotent | **PASS** | unique=1, same CID `QmXgqQn8…` |
## Case details
### U1 — Go unit tests
All packages green. No FAIL lines in `logs/u1-go-unit.txt`.
### U2 / U3 — Python suites
Client 47 passed; server 34 passed. Confirms Application Client and Python GlobalClient libraries still build/test while Go owns production MCP.
### L1 — Public MCP suite (`https://mcp.verae.ai/mcp`)
1. `initialize` → `Mcp-Session-Id` present (stateful).
2. `tools/list` → `create_user`, `hash_report`, `login`, `session`, `signup`, `stamp`, `verify`.
3. `hash_report` global on Verae-Debug-Test digest → receipt `QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ`.
4. `stamp` scope=local → receipt issued; `verify` OK.
5. `session` → `valid: true`, `username: admin`, `role: admin` (host-token keeper).
### L2 / L3 — Global stamp paths
- L2: fresh digest stamped globally without client Bearer (`REQUIRE_BEARER=0`).
- L3: 20 sequential global stamps of digest `469e6159…` all returned the same CID; elapsed ~3.92s.
### L4 — ApplicationClient (MCP transport)
Local stamp → verify → hash_report through `https://mcp.verae.ai/mcp` succeeded.
### L5 / L7 — Laptop direct VeraeTime
**Initial fail:** expired laptop JWT (`expires_at=2026-09-29T06:20:17-09:00`).
**Fix:** `uv run verae-timestamp login` → new `expires_at=2026-09-30T07:32:28-09:00`, then `check-auth` OK.
**Retest:**
- L5: `ApplicationClient.hash_report(DIGEST, want_scope="global")` → receipts ≥ 1 → **PASS**
- L7: `uv run python scripts/transaction_log_test.py` → unique 1, same True → **PASS**
Output: `debug-trace/2026-09-29T163256Z-verae-debug-test/`
### L6 — CLI hash
`verae-timestamp hash` produced a valid SHA-256.
### L8 / L9 — Sibling public hostnames
- `mcp.veraetime.net`: PASS.
- `mcp.georgelambert.org`: initially 502 (wrong upstream); after Caddy fix → PASS.
### L10 — Embedded NATS client
`pkg/tsnats.Connect(nats://127.0.0.1:14229)` (tunnel to ns1 `:4229`) → `Stamp` scope=local → receipt ID returned.
### L11 — Static docs site
HTTP 200 for index, developers, ways, OpenAPI YAML, app, explorer.
### L12 — On-host MCP idempotency
From ns1 to `127.0.0.1:8000` with `Host: mcp.verae.ai`, 5× global stamp of Verae-Debug-Test → one CID.
## Failures — root cause and remediation
| ID | Root cause | Remediation | Status |
| --- | --- | --- | --- |
| L5 | Expired laptop JWT | `verae-timestamp login` then retest | **Fixed** |
| L7 | Same expired laptop JWT (20× 401) | Same login; retest wrote new debug-trace | **Fixed** |
## Artifacts
| Path | Contents |
| --- | --- |
| `results.csv` | Machine-readable PASS/FAIL |
| `logs/` | Per-case stdout/stderr |
| `logs/deploy-state.txt` | systemd drop-in snapshot |
| `logs/l3-20stamp.txt` | 20× CID list |
| `logs/l7-txlog.txt` | Laptop transaction_log output (401) |
Laptop `transaction_log_test` also wrote:
`verae-mcp-timestamping-server/debug-trace/2026-09-29T162648Z-verae-debug-test/`
## Conclusion
The Go MCP service on ns1 is **production-viable** for AI MCP clients and NATS bulk clients under the tested cases. Public tool parity, local ledger, global VeraeTime via host-token fallback, embedded NATS, and static docs all passed. Remaining fails are local developer credentials for direct API scripts.
## Rollback (reference)
```sh
sudo rm /etc/systemd/system/verae-mcp-timestamping.service.d/go-cutover.conf
sudo systemctl daemon-reload
sudo systemctl restart verae-mcp-timestamping.service
```