Files
TORCH/docs/src-lock-ops-overview.md
google-labs-jules[bot]andPR0M3TH3AN aff47a7ba6 docs(scheduler): daily run for docs-code-investigator
- Documented `src/lock-ops.mjs` in `docs/src-lock-ops-overview.md`.
- Created required scheduler artifacts (`src/context/`, `src/todo/`, etc.).
- Completed scheduler cycle and updated `task-logs/daily/`.
- Updated `package-lock.json` with dependencies.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-16 02:17:45 +00:00

51 lines
2.3 KiB
Markdown

# `src/lock-ops.mjs` Overview
This module implements the core logic for distributed locking using Nostr relays. It handles querying for existing locks, publishing new lock events, and managing relay health and fallbacks.
## High-Level Summary
The `lock-ops` module provides the mechanism for agents to coordinate and avoid race conditions. It uses ephemeral Nostr events (Kind `30078` parameterized replaceable events, though currently using `app_data`) to represent locks. It includes robust retry logic, relay health scoring, and fallback mechanisms to ensure reliability even when some relays are slow or offline.
## Public Surface
### `queryLocks(relays, cadence, dateStr, namespace, deps)`
Queries the specified relays for active locks matching the cadence and date.
- **relays**: Array of relay URLs.
- **cadence**: 'daily' or 'weekly'.
- **dateStr**: Date string (YYYY-MM-DD).
- **namespace**: Application namespace (e.g., 'torch').
- **Returns**: Array of active lock objects.
### `publishLock(relays, event, deps)`
Publishes a lock event to the specified relays, ensuring a quorum is met.
- **relays**: Array of relay URLs.
- **event**: The Nostr event object to publish.
- **Returns**: The published event if successful, throws error otherwise.
### `parseLockEvent(event)`
Parses a raw Nostr event into a structured lock object.
- **event**: Raw Nostr event.
- **Returns**: Structured lock object with `agent`, `cadence`, `expiresAt`, etc.
## Key Flows
1. **Lock Acquisition**:
- `queryLocks` is called to check for existing locks.
- If no valid lock exists, a new lock event is created (external to this module).
- `publishLock` is called to broadcast the event.
- Race check (reading back) confirms ownership (handled by caller, `src/lib.mjs`).
2. **Relay Health & Fallback**:
- Relays are scored based on latency and success rate.
- Failed attempts penalize the relay score.
- If primary relays fail, fallback relays are used.
## Invariants
- Locks must have an expiration time.
- A lock is only valid if it is the latest event for the `d` tag.
- Publishing requires a minimum number of successful relays (quorum).
## When to Change
- If the relay selection or scoring algorithm needs tuning.
- If the underlying Nostr event structure changes.
- If new telemetry or logging requirements arise.