Changelog
v0.9.1 (2026-02-14)
Security hardening (P0-P3)
- Enforced fail-closed payment verification and atomic payment-tx claim handling in paid routes.
- Tightened spawn integrity with ownership binding and safer mutation ordering.
- Hardened Beats anchor canonicalization and continuity selection in the Beats service.
- Made public
/api/v1/verify/[hash]read-only for proofs; fresh signed proof issuance stays on paid reissue. - Upgraded authenticated route rate limiting from IP-only to multi-dimensional keys: endpoint path + authenticated subject, with path + IP fallback when subject is missing.
- Added fail-fast cost guards on paid routes so oversized/invalid payloads are rejected before auth/payment/DB work:
/api/v1/agent/spawn,/api/v1/agent/heartbeat,/api/v1/agent/reissue-proof,/api/v1/sigil(commitebcf57c). - Added route-level fail-fast tests:
tests/cost-guards-fastfail.test.ts,tests/heartbeat-cost-guards-fastfail.test.ts,tests/reissue-proof-cost-guards-fastfail.test.ts,tests/sigil-cost-guards-fastfail.test.ts. - Added payment-failure throttling regression coverage to ensure repeated invalid/replayed payment attempts
consume limiter budget and converge to
429(tests/payment-failure-throttling.test.ts, commit80046c3, tagsecurity-hardening-p3-2).
v0.9.0 (2026-02-13)
SIGIL identity tiers, heartbeat protocol, lineage proofs
- Breaking:
checkin()removed — server returns410 Gone. Useheartbeat()instead. - Breaking:
resync()removed — server returns410 Gone. Staleness resolved through market (re-register or purchase a new SIGIL). - Breaking: Registration no longer writes a Solana SPL Memo.
signatureandexplorer_urlremoved fromRegistrationResult. Birth records are DB-only. - Deprecated:
pulse(),computeBeat(),computeBeatsLite()— emitconsole.warn, will be removed in v1.0. - Added:
purchaseSigil({ identityClass, paymentTx })— acquire SIGIL identity tier (narrow_task,autonomous,orchestrator). - Added:
heartbeat({ paymentTx?, globalAnchor? })— single-call liveness proof replacingpulse()+checkin(). - Added:
reissueProof(paymentTx?)— request fresh lineage proof without advancing heartbeat counter. - Added:
getLatestProof()— return cached lineage proof (no network). - Added:
Provenonce.verifyProofLocally(proof, authorityPubKeyHex)— offline Ed25519 proof verification. - Added: Types:
LineageProof,Passport(alias),SigilResult,HeartbeatResult,IdentityClass. - Added:
getPassport()— alias forgetLatestProof(). - Added:
agent_public_keyinLineageProof— wallet address bound into signed proof data (prevents bearer-token impersonation). - Added: Ed25519-signed lineage proofs (Passports) with 24h validity window.
- Added: Fee summary endpoint (
GET /api/v1/fees), authority key endpoint (GET /api/v1/.well-known/authority-key). - Added:
startHeartbeat()now callsheartbeat()on interval (replaces old pulse+checkin loop). - Devnet: pass
paymentTx: 'devnet-skip'to bypass payment.
v0.8.0 (2026-02-12)
Chain-agnostic identity (D-62/63/64)
- Breaking: Default registration is now no-wallet (identity only). Pass
walletModel: 'self-custody'to generate a Solana wallet. - Wallet is optional at registration — three paths: no-wallet, Solana self-custody, Ethereum BYO
- Chain-agnostic wallets:
walletChainoption ('solana'or'ethereum') - Ethereum BYO registration via
walletAddress+walletSignFn(EIP-191personal_sign) - v2 hash formula:
sha256("root:v2:" + wallet + ":" + chain + ":" + ts + ":" + nonce) - 128-bit nonces (was 64-bit)
- Two-tier rate limits: 5/hr no-wallet, 10/hr wallet-bound
wallet_chainfield in all responses
v0.7.0 (2026-02-09)
Anchor-hash weaving + wallet-per-agent
- Global anchor hash woven into VDF seed (anti-pre-computation)
- Wallet-per-agent registration (Model A self-custody, Model B operator)
generateWalletKeypair()for client-side Ed25519 keypair generation- Two-phase challenge-response registration flow
- Difficulty adjustment wired into enforce endpoint
v0.6.0 (2026-02-09)
Anchor-hash weaving (anti-pre-computation)
- Global anchor hash woven into each beat’s VDF seed
Beattype gainsanchor_hashfieldcomputeBeat()andcomputeBeatsLite()acceptanchorHashparameter- Old SDK clients without anchor hash are rejected when anchors exist
v0.5.0 (2026-02-08)
New agent API paths
- Agent endpoints moved from
/api/v1/beat/*to/api/v1/agent/* - Old
/beat/*paths are deprecation proxies (sunset 2026-06-01) register()function added to SDKRegistrationResultandWalletInfotypes exported
v0.4.0 (2026-02-07)
Spot check enforcement
- Minimum 3 spot checks required
to_beatmust always be included in spot checkscreateCheckinProof()passesanchor_hashthrough
v0.3.0 (2026-02-06)
Security hardening
- Rate limiting on all endpoints
- HMAC signature length increased to 128-bit
- Input validation on all body-parsed routes
v0.2.0 (2026-02-05)
Beat chain and registration
BeatAgentclass with full lifecycle- Root and child registration with Solana SPL Memo birth records
v0.1.0 (2026-02-04)
Initial release
- VDF engine (
computeBeat,computeBeatsLite) - Basic agent lifecycle
Last updated on