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

6.4 KiB
Raw Permalink Blame History

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)

sudo rm /etc/systemd/system/verae-mcp-timestamping.service.d/go-cutover.conf
sudo systemctl daemon-reload
sudo systemctl restart verae-mcp-timestamping.service