From 703c351ff2cfd73a778d39a491e7f26b976ef5f2 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 15 Feb 2026 22:15:06 +0000 Subject: [PATCH] [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 <53631862+PR0M3TH3AN@users.noreply.github.com> --- perf/constants-refactor/raw-numeric-hits.txt | 34 ++++ src/cmd-lock.mjs | 3 +- src/context/CONTEXT_2026-02-15T20-00-00Z.md | 3 + .../DECISIONS_2026-02-15T20-00-00Z.md | 3 + .../TEST_LOG_2026-02-15T20-00-00Z.md | 183 ++++++++++++++++++ src/todo/TODO_2026-02-15T20-00-00Z.md | 2 + ...00-00Z__const-refactor-agent__completed.md | 1 + 7 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 perf/constants-refactor/raw-numeric-hits.txt create mode 100644 src/context/CONTEXT_2026-02-15T20-00-00Z.md create mode 100644 src/decisions/DECISIONS_2026-02-15T20-00-00Z.md create mode 100644 src/test_logs/TEST_LOG_2026-02-15T20-00-00Z.md create mode 100644 src/todo/TODO_2026-02-15T20-00-00Z.md create mode 100644 task-logs/daily/2026-02-15T20-00-00Z__const-refactor-agent__completed.md diff --git a/perf/constants-refactor/raw-numeric-hits.txt b/perf/constants-refactor/raw-numeric-hits.txt new file mode 100644 index 0000000..0a15a99 --- /dev/null +++ b/perf/constants-refactor/raw-numeric-hits.txt @@ -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; diff --git a/src/cmd-lock.mjs b/src/cmd-lock.mjs index eadfb26..ca4318c 100644 --- a/src/cmd-lock.mjs +++ b/src/cmd-lock.mjs @@ -6,6 +6,7 @@ import { } from './torch-config.mjs'; import { RACE_CHECK_DELAY_MS, + KIND_APP_DATA, } from './constants.mjs'; import { getRoster } from './roster.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...'); const event = finalizeEvent( { - kind: 30078, + kind: KIND_APP_DATA, created_at: now, tags: [ ['d', `${namespace}-lock/${cadence}/${agent}/${dateStr}`], diff --git a/src/context/CONTEXT_2026-02-15T20-00-00Z.md b/src/context/CONTEXT_2026-02-15T20-00-00Z.md new file mode 100644 index 0000000..b49fc2e --- /dev/null +++ b/src/context/CONTEXT_2026-02-15T20-00-00Z.md @@ -0,0 +1,3 @@ +Goal: Refactor duplicated numeric constants +Scope: src/cmd-lock.mjs +Constraints: Preserve semantics diff --git a/src/decisions/DECISIONS_2026-02-15T20-00-00Z.md b/src/decisions/DECISIONS_2026-02-15T20-00-00Z.md new file mode 100644 index 0000000..00da998 --- /dev/null +++ b/src/decisions/DECISIONS_2026-02-15T20-00-00Z.md @@ -0,0 +1,3 @@ +# Decisions +- Replace 30078 with KIND_APP_DATA in src/cmd-lock.mjs +- Rationale: Centralize constant definitions, improve code clarity. diff --git a/src/test_logs/TEST_LOG_2026-02-15T20-00-00Z.md b/src/test_logs/TEST_LOG_2026-02-15T20-00-00Z.md new file mode 100644 index 0000000..b03b49b --- /dev/null +++ b/src/test_logs/TEST_LOG_2026-02-15T20-00-00Z.md @@ -0,0 +1,183 @@ + +> torch-lock@0.1.0 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) + + +> torch-lock@0.1.0 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 diff --git a/src/todo/TODO_2026-02-15T20-00-00Z.md b/src/todo/TODO_2026-02-15T20-00-00Z.md new file mode 100644 index 0000000..b1182bc --- /dev/null +++ b/src/todo/TODO_2026-02-15T20-00-00Z.md @@ -0,0 +1,2 @@ +# Todo +- [x] Replace 30078 with KIND_APP_DATA in src/cmd-lock.mjs diff --git a/task-logs/daily/2026-02-15T20-00-00Z__const-refactor-agent__completed.md b/task-logs/daily/2026-02-15T20-00-00Z__const-refactor-agent__completed.md new file mode 100644 index 0000000..c27d2f1 --- /dev/null +++ b/task-logs/daily/2026-02-15T20-00-00Z__const-refactor-agent__completed.md @@ -0,0 +1 @@ +Refactored src/cmd-lock.mjs to use KIND_APP_DATA.