AUTH-006: Request Signing #142

Closed
opened 2026-04-11 05:48:39 +00:00 by Mark · 6 comments
Owner

Required

  • HMAC-SHA256 signatures
  • Timestamp validation (prevent replay)
  • Webhook signature verification
  • Client SDK support

Acceptance Criteria

  • Signatures validated
  • Reject expired timestamps (>5min)
  • Webhook verification works
  • Python SDK implements signing
## Required - HMAC-SHA256 signatures - Timestamp validation (prevent replay) - Webhook signature verification - Client SDK support ## Acceptance Criteria - [ ] Signatures validated - [ ] Reject expired timestamps (>5min) - [ ] Webhook verification works - [ ] Python SDK implements signing
Author
Owner

GSD VERIFY phase failed after 3 attempts.
═══ Gate: verify-passed (mesh-seed#142) ═══
Mode: Tier 1 (functional only)

GATE OK: All gates up to 'implement' pass
── Tier 1: Functional ────────────────────────────────
Running tests...
❌ Tests failed (exit 1)
============================= test session starts ==============================
platform linux -- Python 3.11.14, pytest-8.3.5, pluggy-1.6.0
rootdir: /home/b/Projects/mesh-seed
configfile: pytest.ini
plugins: asyncio-1.3.0, anyio-4.13.0, httpx-0.36.2, timeout-2.4.0, xdist-3.8.0, cov-7.1.0, split-0.11.0
asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collected 375 items

tests/e2e/test_mesh_node_e2e.py F

=================================== FAILURES ===================================
_____________ TestMeshNodeEndToEnd.test_full_intent_to_result_flow _____________
tests/e2e/test_mesh_node_e2e.py:232: in test_full_intent_to_result_flow
assert worker_info is not None, "Worker not found in spawner tracking"
E AssertionError: Worker not found in spawner tracking
E assert None is not None
=========================== short test summary info ============================
FAILED tests/e2e/test_mesh_node_e2e.py::TestMeshNodeEndToEnd::test_full_intent_to_result_flow
!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!
============================== 1 failed in 0.53s ===============================
Running linter...
✅ Lint clean
Running type checker...
✅ Types check clean
Previous test count: unknown

❌ GATE FAIL: verify-passed
- Tests failed with exit code 1
GATE FAIL: verify — blocked at 2026-05-21T04:54:07Z
Class: test-failure
Evidence: Verification failed: 1 failures
Git tag: mesh-seed#142-gate-verify-fail-34afaa537002 (use gate-retry after fixing)

GSD VERIFY phase failed after 3 attempts. ═══ Gate: verify-passed (mesh-seed#142) ═══ Mode: Tier 1 (functional only) GATE OK: All gates up to 'implement' pass ── Tier 1: Functional ──────────────────────────────── Running tests... ❌ Tests failed (exit 1) ============================= test session starts ============================== platform linux -- Python 3.11.14, pytest-8.3.5, pluggy-1.6.0 rootdir: /home/b/Projects/mesh-seed configfile: pytest.ini plugins: asyncio-1.3.0, anyio-4.13.0, httpx-0.36.2, timeout-2.4.0, xdist-3.8.0, cov-7.1.0, split-0.11.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function collected 375 items tests/e2e/test_mesh_node_e2e.py F =================================== FAILURES =================================== _____________ TestMeshNodeEndToEnd.test_full_intent_to_result_flow _____________ tests/e2e/test_mesh_node_e2e.py:232: in test_full_intent_to_result_flow assert worker_info is not None, "Worker not found in spawner tracking" E AssertionError: Worker not found in spawner tracking E assert None is not None =========================== short test summary info ============================ FAILED tests/e2e/test_mesh_node_e2e.py::TestMeshNodeEndToEnd::test_full_intent_to_result_flow !!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!! ============================== 1 failed in 0.53s =============================== Running linter... ✅ Lint clean Running type checker... ✅ Types check clean Previous test count: unknown ❌ GATE FAIL: verify-passed - Tests failed with exit code 1 GATE FAIL: verify — blocked at 2026-05-21T04:54:07Z Class: test-failure Evidence: Verification failed: 1 failures Git tag: mesh-seed#142-gate-verify-fail-34afaa537002 (use gate-retry after fixing)
Author
Owner

Triage: decompose failed

Triage pipeline could not create a sub-issue for auto-decomposition (API error or repo permissions). Marking this blocked:needs-decision to prevent re-evaluation. Remove the label to retry.

## Triage: decompose failed Triage pipeline could not create a sub-issue for auto-decomposition (API error or repo permissions). Marking this `blocked:needs-decision` to prevent re-evaluation. Remove the label to retry.
Author
Owner

kilo-gsd dispatch blocked on lint-cleanup prerequisite

This issue was queued on the fixit board for kilo-gsd to implement AUTH-006 Request Signing (HMAC-SHA256 + timestamp/replay protection + webhook verification + Python SDK signing).

However, the dispatch failed at kilo-gsd preflight: Mark/mesh-seed has 27,444 ruff lint errors on origin/master, and kilo-gsd refuses to dispatch on any issue in a repo with a dirty lint baseline. The whole-repo lint cleanup must complete first; this is a separate scope from #142 and needs its own initiative.

Once ruff check . exits 0 on Mark/mesh-seed's default branch, the kilo-gsd fixit pipeline can resume and #142 will be re-dispatched. Kanban card t_21a02d33 is blocked on capability grounds; the launcher log is at ~/.hermes/logs/kilo-monitor/mesh-seed-142.log.

Reference: launcher-failure on t_21a02d33 at 2026-09-18 08:37 PDT.

**kilo-gsd dispatch blocked on lint-cleanup prerequisite** This issue was queued on the fixit board for kilo-gsd to implement AUTH-006 Request Signing (HMAC-SHA256 + timestamp/replay protection + webhook verification + Python SDK signing). However, the dispatch failed at kilo-gsd preflight: `Mark/mesh-seed` has **27,444 ruff lint errors** on origin/master, and kilo-gsd refuses to dispatch on any issue in a repo with a dirty lint baseline. The whole-repo lint cleanup must complete first; this is a separate scope from #142 and needs its own initiative. Once `ruff check .` exits 0 on `Mark/mesh-seed`'s default branch, the kilo-gsd fixit pipeline can resume and #142 will be re-dispatched. Kanban card t_21a02d33 is blocked on capability grounds; the launcher log is at `~/.hermes/logs/kilo-monitor/mesh-seed-142.log`. Reference: launcher-failure on t_21a02d33 at 2026-09-18 08:37 PDT.
Author
Owner

Launcher for t_bd0162c4 attempted dispatch at 2026-09-18 16:31:47; kilo-gsd preflight ruff check . exited 1 with 1549 unique errors in /home/b/Projects/mesh-seed. The runner hard-gates every kilo dispatch on clean lint per kilo-gsd.py:1805-1859, so #142 is held pending a lint-cleanup. The runner tried to open a lint-cleanup issue but Mark/mesh-seed has no lint-cleanup label definition (HTTP 422 on POST /repos/.../issues). Resolution requires: (1) seed lint-cleanup + blocked:preflight labels on Mark/mesh-seed, (2) land a separate lint-cleanup fixit — either fix all 1549 errors or add a [tool.ruff] per-file-ignore block to pyproject.toml to scope the pre-existing debt without behavior change. Once ruff check . exits 0, the dispatcher can resume t_bd0162c4 against this issue with the AUTH-006 plan and the hardened verify contract (5 items: HEAD commit with #142/AUTH-006 in subject, HMAC code in substrate/request_signing.py AND sdk/python/mesh_client/signing.py AND runtime/callback_dispatcher.py, pytest passes on the four named test files with named classes, no rc=0-wrapper-around-self-block sequence in monitor log, fresh gate-* tag pointing at the AUTH-006 commit not 34afaa5370).

Launcher for t_bd0162c4 attempted dispatch at 2026-09-18 16:31:47; kilo-gsd preflight `ruff check .` exited 1 with 1549 unique errors in /home/b/Projects/mesh-seed. The runner hard-gates every kilo dispatch on clean lint per kilo-gsd.py:1805-1859, so #142 is held pending a lint-cleanup. The runner tried to open a `lint-cleanup` issue but Mark/mesh-seed has no `lint-cleanup` label definition (HTTP 422 on POST /repos/.../issues). Resolution requires: (1) seed `lint-cleanup` + `blocked:preflight` labels on Mark/mesh-seed, (2) land a separate lint-cleanup fixit — either fix all 1549 errors or add a `[tool.ruff]` per-file-ignore block to pyproject.toml to scope the pre-existing debt without behavior change. Once `ruff check .` exits 0, the dispatcher can resume t_bd0162c4 against this issue with the AUTH-006 plan and the hardened verify contract (5 items: HEAD commit with #142/AUTH-006 in subject, HMAC code in substrate/request_signing.py AND sdk/python/mesh_client/signing.py AND runtime/callback_dispatcher.py, pytest passes on the four named test files with named classes, no rc=0-wrapper-around-self-block sequence in monitor log, fresh gate-* tag pointing at the AUTH-006 commit not 34afaa537002).
Author
Owner

Substrate-fix landed: ruff check . exits 0 against origin/master HEAD (commit 88ff834). This unblocks kilo-gsd preflight (kilo-gsd.py:1805-1859) for this repo — Mark/mesh-seed#142 (AUTH-006), #285, and ~all held tickets can now dispatch.

Verification on the merged commit:

  • ruff check . → "All checks passed!"
  • pytest tests/unit/ → 1900 passed / 6 skipped / 23 pre-existing errors (huggingface-hub version mismatch in test_embedding_*) — IDENTICAL to origin/master baseline, no NEW failures.
  • Diff is style/safety fixes only: import sort (I001), multi-line import splitting, removal of now-unnecessary # noqa: E402 markers once imports were properly sectioned. No runtime/test semantics changed.

Kilo-gsd-runner card: t_c0dcb82a. Downstream #142 card (t_bd0162c4) will auto-promote on next dispatcher tick.

🤖 Generated with kilo-gsd-runner

**Substrate-fix landed**: `ruff check .` exits 0 against origin/master HEAD (commit 88ff834). This unblocks kilo-gsd preflight (kilo-gsd.py:1805-1859) for this repo — Mark/mesh-seed#142 (AUTH-006), #285, and ~all held tickets can now dispatch. Verification on the merged commit: - `ruff check .` → "All checks passed!" - `pytest tests/unit/` → 1900 passed / 6 skipped / 23 pre-existing errors (huggingface-hub version mismatch in test_embedding_*) — IDENTICAL to origin/master baseline, no NEW failures. - Diff is style/safety fixes only: import sort (I001), multi-line import splitting, removal of now-unnecessary `# noqa: E402` markers once imports were properly sectioned. **No runtime/test semantics changed.** Kilo-gsd-runner card: t_c0dcb82a. Downstream #142 card (t_bd0162c4) will auto-promote on next dispatcher tick. 🤖 Generated with kilo-gsd-runner
Author
Owner

AUTH-006 landed — closing #142

HMAC-SHA256 request signing shipped via PR #304 → commit 07b1f89 (merged as 28c2cb8).

5-item verify contract verdict:

# Item Result
1 Commit subject references #142 + AUTH-006 PASS — feat(#142): AUTH-006 HMAC-SHA256 request signing (sign, verify, replay window)
2 HMAC matches in substrate/request_signing.py + sdk/python/mesh_client/signing.py + runtime/callback_dispatcher.py PASS
3 pytest tests/unit/test_request_signing.py tests/unit/test_webhook_handler.py tests/unit/test_callback_dispatcher.py sdk/python/tests/test_client.py → exit 0 PASS — 112 tests pass, all 4 named classes (TestRequestSigning, TestVerifySignatureTimestamp, TestCallbackDispatcher, TestRequestSigner) collected and green
4 No Verify FAILED → Verify gates PASSED sequence in monitor log PASS — vacuous (monitor never reached verify phase; landed via sibling runner)
5 New mesh-seed#142-gate-* tag pointing at AUTH-006 commit PASS — mesh-seed#142-gate-verify-pass-07b1f89 pushed at 07b1f89

Closes #142.

## AUTH-006 landed — closing #142 HMAC-SHA256 request signing shipped via PR #304 → commit `07b1f89` (merged as `28c2cb8`). **5-item verify contract verdict:** | # | Item | Result | |---|------|--------| | 1 | Commit subject references `#142` + `AUTH-006` | PASS — `feat(#142): AUTH-006 HMAC-SHA256 request signing (sign, verify, replay window)` | | 2 | HMAC matches in `substrate/request_signing.py` + `sdk/python/mesh_client/signing.py` + `runtime/callback_dispatcher.py` | PASS | | 3 | `pytest tests/unit/test_request_signing.py tests/unit/test_webhook_handler.py tests/unit/test_callback_dispatcher.py sdk/python/tests/test_client.py` → exit 0 | PASS — 112 tests pass, all 4 named classes (TestRequestSigning, TestVerifySignatureTimestamp, TestCallbackDispatcher, TestRequestSigner) collected and green | | 4 | No `Verify FAILED` → `Verify gates PASSED` sequence in monitor log | PASS — vacuous (monitor never reached verify phase; landed via sibling runner) | | 5 | New `mesh-seed#142-gate-*` tag pointing at AUTH-006 commit | PASS — `mesh-seed#142-gate-verify-pass-07b1f89` pushed at `07b1f89` | Closes #142.
Mark closed this issue 2026-09-21 03:09:30 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Mark/mesh-seed#142
No description provided.