mirror of
https://github.com/PR0M3TH3AN/TORCH.git
synced 2026-11-06 12:51:54 +00:00
[constants] replace magic number 30078 with KIND_APP_DATA in cmd-lock.mjs
Refactored src/cmd-lock.mjs to use KIND_APP_DATA constant instead of hardcoded 30078. Added refactor artifacts. Created task completion log. Co-authored-by: PR0M3TH3AN <[email protected]>
This commit is contained in:
1 parent
04bafc92bb
commit
703c351ff2
7 files changed
+228
-1
No files matched your search
@@ -0,0 +1,34 @@
|
|||||||
|
src/test_logs/TEST_LOG_2026-02-15T16-15-05Z.md:# {"event":"relay_health_snapshot","reason":"query:periodic","relays":[{"relay":"wss://nos.lol","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"f-ailureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.damus.io","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"f-ailureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.nostr.band","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"f-ailureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.primal.net","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"f-ailureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.snort.social","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"f-ailureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null}]}
|
||||||
|
src/test_logs/TEST_LOG_2026-02-15T01-22-33Z.md:# {"event":"relay_health_snapshot","reason":"query:periodic","relays":[{"relay":"wss://nos.lol","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"failureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.damus.io","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"failureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.nostr.band","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"failureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.primal.net","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"failureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.snort.social","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"failureStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null}]}
|
||||||
|
src/test_logs/TEST_LOG_2026-02-15T19-12-02Z.md:# {"event":"relay_health_snapshot","reason":"query:periodic","relays":[{"relay":"wss://nos.lol","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.damus.io","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.nostr.band","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.primal.net","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.snort.social","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null}]}
|
||||||
|
src/test_logs/TEST_LOG_2026-02-15T19-12-02Z.md:# {"event":"relay_health_snapshot","reason":"query:periodic","relays":[{"relay":"wss://nos.lol","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.damus.io","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.nostr.band","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.primal.net","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.snort.social","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null}]}
|
||||||
|
src/test_logs/TEST_LOG_2026-02-15T19-12-02Z.md:# {"event":"relay_health_snapshot","reason":"query:periodic","relays":[{"relay":"wss://nos.lol","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.damus.io","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.nostr.band","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.primal.net","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.snort.social","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null}]}
|
||||||
|
src/test_logs/TEST_LOG_2026-02-15T19-12-02Z.md:# {"event":"relay_health_snapshot","reason":"query:periodic","relays":[{"relay":"wss://nos.lol","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.damus.io","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.nostr.band","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.primal.net","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.snort.social","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null}]}
|
||||||
|
src/test_logs/TEST_LOG_2026-02-15T19-12-02Z.md:# {"event":"relay_health_snapshot","reason":"query:periodic","relays":[{"relay":"wss://nos.lol","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.damus.io","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.nostr.band","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.primal.net","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null},{"relay":"wss://relay.snort.social","score":0.6,"sampleSize":0,"successRate":0.5,"timeoutRate":0,"averageLatencyMs":null,"issueStreak":0,"quarantined":false,"quarantineRemainingMs":0,"cooldownMs":30000,"lastResultAt":null}]}
|
||||||
|
src/docs/TORCH.md:The TORCH dashboard subscribes to Nostr relays for **kind 30078** events tagged with the `#torch-agent-lock` hashtag. These are the same events agents publish via `bin/torch-lock.mjs` when they claim tasks using the TORCH protocol.
|
||||||
|
src/docs/TORCH.md:**Filter:** `{"kinds":[30078],"#t":["torch-agent-lock"]}`
|
||||||
|
src/docs/TORCH.md:To follow in any Nostr client, subscribe to kind 30078 with `#t = torch-agent-lock` on the relays above.
|
||||||
|
src/docs/TORCH.md:- Kind: `30078` (NIP-33 parameterized replaceable)
|
||||||
|
src/docs/TORCH.md:- `nostrLock.queryTimeoutMs`: `10000`
|
||||||
|
src/decisions/DECISIONS_2026-02-15T20-00-00Z.md:- Replace 30078 with KIND_APP_DATA in src/cmd-lock.mjs
|
||||||
|
src/constants.mjs:export const DEFAULT_TTL = 7200;
|
||||||
|
src/constants.mjs:export const KIND_APP_DATA = 30078;
|
||||||
|
src/lib.mjs: * 3. Generate a new ephemeral keypair and build a lock event (kind 30078).
|
||||||
|
src/lib.mjs: NOSTR_LOCK_TTL Lock TTL in seconds (default: 7200)
|
||||||
|
src/lib.mjs: NOSTR_LOCK_QUERY_TIMEOUT_MS Relay query timeout in milliseconds (default: 15000)
|
||||||
|
src/todo/TODO_2026-02-15T20-00-00Z.md:- [ ] Replace 30078 with KIND_APP_DATA in src/cmd-lock.mjs
|
||||||
|
src/prompts/daily/const-refactor-agent.md:- Do **not** replace numeric literals that are coincidentally equal but semantically different (e.g., 5000 used as a timeout vs used as an array length). Use code context and names to decide.
|
||||||
|
src/prompts/daily/const-refactor-agent.md: - Common ms timeouts: `5000`, `10000`, `15000`, `30000`, `60000`
|
||||||
|
src/prompts/daily/const-refactor-agent.md: - TTLs: `600000` (10m), `60000` (1m), etc.
|
||||||
|
src/prompts/daily/const-refactor-agent.md: rg --hidden --no-ignore -n --glob 'js/**/*.js' -e '\b(5000|10000|30000|60000|15000|3|5|0\.5|0\.8|600000|100)\b' > perf/constants-refactor/raw-numeric-hits.txt
|
||||||
|
src/prompts/daily/const-refactor-agent.md: "value": 5000,
|
||||||
|
src/prompts/daily/const-refactor-agent.md: - const TIMEOUT = 5000;
|
||||||
|
src/prompts/daily/const-refactor-agent.md: - Make only the necessary replacements per candidate group so PRs are small and focused (for example, handle all 5000->FAST_RELAY_TIMEOUT_MS replacements in relay-related files in one PR; do not change unrelated files in same PR).
|
||||||
|
src/prompts/daily/const-refactor-agent.md: - 5000 ms used for fast relay timeout:
|
||||||
|
src/prompts/daily/const-refactor-agent.md: - Title: `[constants] extract FAST_RELAY_TIMEOUT_MS (5000) → js/integration/relayConstants.js`
|
||||||
|
src/prompts/daily/const-refactor-agent.md: - Example: `5000` as `RELAY_TIMEOUT_MS` vs `5000` as `SOME_API_LIMIT_MS` — do not conflate.
|
||||||
|
src/prompts/daily/const-refactor-agent.md:rg --hidden --no-ignore -n --glob 'js/**/*.js' '\b(5000|10000|30000|60000|15000|3|5|0.5|600000)\b' > perf/constants-refactor/raw-hits.txt
|
||||||
|
src/prompts/daily/const-refactor-agent.md:- Discover `5000` appears in `src/relayManager.js`, `js/integration/watchHistory.js`, `js/integration/relayClient.js`.
|
||||||
|
src/prompts/daily/const-refactor-agent.md:* Replace literal `5000` usages with `FAST_RELAY_TIMEOUT_MS`.
|
||||||
|
src/cmd-lock.mjs: kind: 30078,
|
||||||
|
src/services/memory/cache.js:const DEFAULT_MAX_TOTAL_EVENTS = 5000;
|
||||||
+2
-1
@@ -6,6 +6,7 @@ import {
|
|||||||
} from './torch-config.mjs';
|
} from './torch-config.mjs';
|
||||||
import {
|
import {
|
||||||
RACE_CHECK_DELAY_MS,
|
RACE_CHECK_DELAY_MS,
|
||||||
|
KIND_APP_DATA,
|
||||||
} from './constants.mjs';
|
} from './constants.mjs';
|
||||||
import { getRoster } from './roster.mjs';
|
import { getRoster } from './roster.mjs';
|
||||||
import { queryLocks, publishLock } from './lock-ops.mjs';
|
import { queryLocks, publishLock } from './lock-ops.mjs';
|
||||||
@@ -55,7 +56,7 @@ export async function cmdLock(agent, cadence, dryRun = false) {
|
|||||||
console.error('Step 3: Building lock event...');
|
console.error('Step 3: Building lock event...');
|
||||||
const event = finalizeEvent(
|
const event = finalizeEvent(
|
||||||
{
|
{
|
||||||
kind: 30078,
|
kind: KIND_APP_DATA,
|
||||||
created_at: now,
|
created_at: now,
|
||||||
tags: [
|
tags: [
|
||||||
['d', `${namespace}-lock/${cadence}/${agent}/${dateStr}`],
|
['d', `${namespace}-lock/${cadence}/${agent}/${dateStr}`],
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
Goal: Refactor duplicated numeric constants
|
||||||
|
Scope: src/cmd-lock.mjs
|
||||||
|
Constraints: Preserve semantics
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Decisions
|
||||||
|
- Replace 30078 with KIND_APP_DATA in src/cmd-lock.mjs
|
||||||
|
- Rationale: Centralize constant definitions, improve code clarity.
|
||||||
@@ -0,0 +1,183 @@
|
|||||||
|
|
||||||
|
> [email protected] lint
|
||||||
|
> eslint .
|
||||||
|
|
||||||
|
|
||||||
|
/app/scripts/agent/smoke-test.mjs
|
||||||
|
23:7 warning 'CONFIRM_PUBLIC' is assigned a value but never used no-unused-vars
|
||||||
|
48:14 warning 'e' is defined but never used no-unused-vars
|
||||||
|
|
||||||
|
/app/scripts/benchmark-dashboard.mjs
|
||||||
|
25:14 warning 'e' is defined but never used no-unused-vars
|
||||||
|
62:22 warning 'e' is defined but never used no-unused-vars
|
||||||
|
|
||||||
|
/app/src/lib.mjs
|
||||||
|
70:14 warning '_' is assigned a value but never used no-unused-vars
|
||||||
|
|
||||||
|
/app/test-audit/run-flaky-check.mjs
|
||||||
|
18:24 warning 'code' is defined but never used no-unused-vars
|
||||||
|
|
||||||
|
/app/test-audit/run-static-analysis.mjs
|
||||||
|
15:12 warning 'e' is defined but never used no-unused-vars
|
||||||
|
|
||||||
|
/app/test/lib.test.mjs
|
||||||
|
102:11 warning 'mockPublishLock' is assigned a value but never used no-unused-vars
|
||||||
|
356:11 warning 'mockPublishLock' is assigned a value but never used no-unused-vars
|
||||||
|
|
||||||
|
/app/test/nostr-lock.test.mjs
|
||||||
|
1:10 warning 'test' is defined but never used no-unused-vars
|
||||||
|
|
||||||
|
✖ 10 problems (0 errors, 10 warnings)
|
||||||
|
|
||||||
|
|
||||||
|
> [email protected] test:unit:lock-backend
|
||||||
|
> node --test test/lock-ops.test.mjs test/lock-ops-publish-retry.test.mjs
|
||||||
|
|
||||||
|
TAP version 13
|
||||||
|
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||||
|
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||||
|
# (node:2424) ExperimentalWarning: The MockTimers API is an experimental feature and might change at any time
|
||||||
|
# (Use `node --trace-warnings ...` to show where the warning was created)
|
||||||
|
# Subtest: publishLock retry behavior
|
||||||
|
# Subtest: succeeds immediately on first attempt without retries
|
||||||
|
ok 1 - succeeds immediately on first attempt without retries
|
||||||
|
---
|
||||||
|
duration_ms: 10.07528
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: retries a transient failure then succeeds within retry budget with bounded jitter
|
||||||
|
ok 2 - retries a transient failure then succeeds within retry budget with bounded jitter
|
||||||
|
---
|
||||||
|
duration_ms: 2.606726
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: returns terminal relay_publish_quorum_failure after exhausting retry budget
|
||||||
|
ok 3 - returns terminal relay_publish_quorum_failure after exhausting retry budget
|
||||||
|
---
|
||||||
|
duration_ms: 2.711407
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: short-circuits non-retryable failures without extra attempts
|
||||||
|
ok 4 - short-circuits non-retryable failures without extra attempts
|
||||||
|
---
|
||||||
|
duration_ms: 2.747843
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
1..4
|
||||||
|
ok 1 - publishLock retry behavior
|
||||||
|
---
|
||||||
|
duration_ms: 19.734333
|
||||||
|
type: 'suite'
|
||||||
|
...
|
||||||
|
# Published to 2/2 relays (required=1, timeout=200ms)
|
||||||
|
# {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"elapsedMs":1}],"totalElapsedMs":1}
|
||||||
|
# Published to 1/2 relays (required=1, timeout=200ms)
|
||||||
|
# {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"elapsedMs":1}],"totalElapsedMs":1}
|
||||||
|
# Published to 1/2 relays (required=1, timeout=200ms)
|
||||||
|
# {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"elapsedMs":1}],"totalElapsedMs":1}
|
||||||
|
# Published to 1/2 relays (required=1, timeout=200ms)
|
||||||
|
# {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":2,"elapsedMs":0}],"totalElapsedMs":0}
|
||||||
|
# Published to 1/2 relays (required=1, timeout=200ms)
|
||||||
|
# {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":1,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":1,"elapsedMs":0}],"totalElapsedMs":0}
|
||||||
|
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||||
|
# {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":1,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":1,"elapsedMs":0}],"totalElapsedMs":0}
|
||||||
|
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||||
|
# {"event":"lock_publish_quorum_met","correlationId":"none","attemptId":"1","publishAttempt":1,"successCount":1,"relayAttemptedCount":3,"requiredSuccesses":1,"timeoutMs":200,"retryTimeline":[{"publishAttempt":1,"successCount":1,"relayAttemptedCount":3,"elapsedMs":0}],"totalElapsedMs":0}
|
||||||
|
# Published to 1/3 relays (required=1, timeout=200ms)
|
||||||
|
# Subtest: lock-ops
|
||||||
|
# Subtest: parseLockEvent
|
||||||
|
# Subtest: parses a valid lock event correctly
|
||||||
|
ok 1 - parses a valid lock event correctly
|
||||||
|
---
|
||||||
|
duration_ms: 1.753646
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
1..1
|
||||||
|
ok 1 - parseLockEvent
|
||||||
|
---
|
||||||
|
duration_ms: 2.739357
|
||||||
|
type: 'suite'
|
||||||
|
...
|
||||||
|
# Subtest: queryLocks
|
||||||
|
# Subtest: falls back to fallback relays when primary query fails
|
||||||
|
ok 1 - falls back to fallback relays when primary query fails
|
||||||
|
---
|
||||||
|
duration_ms: 15.579432
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
1..1
|
||||||
|
ok 2 - queryLocks
|
||||||
|
---
|
||||||
|
duration_ms: 15.854897
|
||||||
|
type: 'suite'
|
||||||
|
...
|
||||||
|
# Subtest: publishLock
|
||||||
|
# Subtest: retries transient failures and succeeds on a later attempt
|
||||||
|
ok 1 - retries transient failures and succeeds on a later attempt
|
||||||
|
---
|
||||||
|
duration_ms: 6.237703
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: fails after retry budget is exhausted for persistent transient failures
|
||||||
|
ok 2 - fails after retry budget is exhausted for persistent transient failures
|
||||||
|
---
|
||||||
|
duration_ms: 2.28717
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: fails without retry for persistent validation failures
|
||||||
|
ok 3 - fails without retry for persistent validation failures
|
||||||
|
---
|
||||||
|
duration_ms: 1.145815
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: includes per-relay reason categories and retry metadata in failure diagnostics
|
||||||
|
ok 4 - includes per-relay reason categories and retry metadata in failure diagnostics
|
||||||
|
---
|
||||||
|
duration_ms: 1.637662
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: returns success when mixed relay outcomes still satisfy quorum
|
||||||
|
ok 5 - returns success when mixed relay outcomes still satisfy quorum
|
||||||
|
---
|
||||||
|
duration_ms: 1.164031
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: uses fallback relays to satisfy min success quorum
|
||||||
|
ok 6 - uses fallback relays to satisfy min success quorum
|
||||||
|
---
|
||||||
|
duration_ms: 1.480202
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: quarantines repeatedly failing relays and still reaches quorum with one healthy relay
|
||||||
|
ok 7 - quarantines repeatedly failing relays and still reaches quorum with one healthy relay
|
||||||
|
---
|
||||||
|
duration_ms: 2.491078
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
# Subtest: uses fallback and min active pool to reintroduce quarantined relay when needed
|
||||||
|
ok 8 - uses fallback and min active pool to reintroduce quarantined relay when needed
|
||||||
|
---
|
||||||
|
duration_ms: 1.083114
|
||||||
|
type: 'test'
|
||||||
|
...
|
||||||
|
1..8
|
||||||
|
ok 3 - publishLock
|
||||||
|
---
|
||||||
|
duration_ms: 18.308594
|
||||||
|
type: 'suite'
|
||||||
|
...
|
||||||
|
1..3
|
||||||
|
ok 2 - lock-ops
|
||||||
|
---
|
||||||
|
duration_ms: 37.980069
|
||||||
|
type: 'suite'
|
||||||
|
...
|
||||||
|
1..2
|
||||||
|
# tests 14
|
||||||
|
# suites 5
|
||||||
|
# pass 14
|
||||||
|
# fail 0
|
||||||
|
# cancelled 0
|
||||||
|
# skipped 0
|
||||||
|
# todo 0
|
||||||
|
# duration_ms 205.968263
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Todo
|
||||||
|
- [x] Replace 30078 with KIND_APP_DATA in src/cmd-lock.mjs
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Refactored src/cmd-lock.mjs to use KIND_APP_DATA.
|
||||||
Reference in new issue
Block a user