> torch-lock@0.1.0 test > npm run validate:scheduler && npm run test:integration:e2e && node --test test/*.test.mjs tests/*.test.js > torch-lock@0.1.0 validate:scheduler > node scripts/validate-scheduler-roster.mjs && node scripts/validate-prompt-contract.mjs && node scripts/validate-scheduler-flow-parity.mjs && npm run validate:scheduler-failure-schema Scheduler tables, roster, and prompt filenames are in sync. Prompt contract validated for all daily/weekly prompts. Scheduler flow parity validated for prompts and scheduler implementation. > torch-lock@0.1.0 validate:scheduler-failure-schema > node --test test/scheduler-lock-failure-schema.contract.test.mjs TAP version 13 # Subtest: scheduler lock backend failure artifact matches required frontmatter schema ok 1 - scheduler lock backend failure artifact matches required frontmatter schema --- duration_ms: 240.151274 type: 'test' ... # Subtest: schema contract catches missing required lock-backend field ok 2 - schema contract catches missing required lock-backend field --- duration_ms: 2.010764 type: 'test' ... # Subtest: schema contract catches misnamed lock-backend key ok 3 - schema contract catches misnamed lock-backend key --- duration_ms: 0.823847 type: 'test' ... 1..3 # tests 3 # suites 0 # pass 3 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 437.513779 > torch-lock@0.1.0 test:integration:e2e > node --test test/scheduler-preflight-lock.e2e.test.mjs TAP version 13 # Subtest: lock preflight e2e: successful lock writes completed status snapshot ok 1 - lock preflight e2e: successful lock writes completed status snapshot --- duration_ms: 446.709108 type: 'test' ... # Subtest: lock preflight e2e: exit code 2 quorum failure persists failed backend status and prompt-not-started marker ok 2 - lock preflight e2e: exit code 2 quorum failure persists failed backend status and prompt-not-started marker --- duration_ms: 101.712441 type: 'test' ... # Subtest: lock preflight e2e: non-lock failure exits failed without prompt parse/schema classification ok 3 - lock preflight e2e: non-lock failure exits failed without prompt parse/schema classification --- duration_ms: 112.476161 type: 'test' ... 1..3 # tests 3 # suites 0 # pass 3 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 747.186893 TAP version 13 # Subtest: parseArgs should parse basic command ok 1 - parseArgs should parse basic command --- duration_ms: 1.62826 type: 'test' ... # Subtest: parseArgs should parse agent and cadence ok 2 - parseArgs should parse agent and cadence --- duration_ms: 0.300791 type: 'test' ... # Subtest: parseArgs should parse equals sign syntax ok 3 - parseArgs should parse equals sign syntax --- duration_ms: 2.038441 type: 'test' ... # Subtest: parseArgs should parse dry-run flag ok 4 - parseArgs should parse dry-run flag --- duration_ms: 0.357196 type: 'test' ... # Subtest: parseArgs should parse port with default ok 5 - parseArgs should parse port with default --- duration_ms: 0.200408 type: 'test' ... # Subtest: parseArgs should parse custom port ok 6 - parseArgs should parse custom port --- duration_ms: 0.238208 type: 'test' ... # Subtest: parseArgs should parse ignore-logs flag ok 7 - parseArgs should parse ignore-logs flag --- duration_ms: 0.282932 type: 'test' ... # Subtest: parseArgs should parse memory flags ok 8 - parseArgs should parse memory flags --- duration_ms: 1.109769 type: 'test' ... # Subtest: parseArgs should parse memory flags with equals ok 9 - parseArgs should parse memory flags with equals --- duration_ms: 0.691829 type: 'test' ... # Subtest: src/lib.mjs # Subtest: cmdCheck # Subtest: returns correct structure with empty locks ok 1 - returns correct structure with empty locks --- duration_ms: 3.991071 type: 'test' ... # Subtest: identifies locked agents ok 2 - identifies locked agents --- duration_ms: 0.734622 type: 'test' ... # Subtest: excludes paused agents ok 3 - excludes paused agents --- duration_ms: 0.989105 type: 'test' ... # Subtest: identifies unknown locked agents ok 4 - identifies unknown locked agents --- duration_ms: 1.393716 type: 'test' ... 1..4 ok 1 - cmdCheck --- duration_ms: 9.243112 type: 'suite' ... # Subtest: cmdLock # Subtest: successfully locks an available agent ok 1 - successfully locks an available agent --- duration_ms: 17.055303 type: 'test' ... # Subtest: fails if agent is not in roster ok 2 - fails if agent is not in roster --- duration_ms: 1.596473 type: 'test' ... # Subtest: fails if agent is already locked ok 3 - fails if agent is already locked --- duration_ms: 0.657366 type: 'test' ... # Subtest: fails if agent is already completed ok 4 - fails if agent is already completed --- duration_ms: 0.858999 type: 'test' ... # Subtest: fails if race check is lost ok 5 - fails if race check is lost --- duration_ms: 11.086878 type: 'test' ... # Subtest: handles race condition with identical timestamps using eventId tie-breaker (we win) ok 6 - handles race condition with identical timestamps using eventId tie-breaker (we win) --- duration_ms: 20.417519 type: 'test' ... # Subtest: handles race condition with identical timestamps using eventId tie-breaker (we lose) ok 7 - handles race condition with identical timestamps using eventId tie-breaker (we lose) --- duration_ms: 2.852204 type: 'test' ... # Subtest: dry run does not publish ok 8 - dry run does not publish --- duration_ms: 0.842969 type: 'test' ... 1..8 ok 2 - cmdLock --- duration_ms: 57.040769 type: 'suite' ... # Subtest: cmdList # Subtest: lists active locks ok 1 - lists active locks --- duration_ms: 1.344673 type: 'test' ... # Subtest: warns about unknown agents ok 2 - warns about unknown agents --- duration_ms: 0.449696 type: 'test' ... # Subtest: handles no locks ok 3 - handles no locks --- duration_ms: 0.294865 type: 'test' ... 1..3 ok 3 - cmdList --- duration_ms: 2.298278 type: 'suite' ... # Subtest: cmdComplete # Subtest: successfully completes an active lock ok 1 - successfully completes an active lock --- duration_ms: 1.953578 type: 'test' ... # Subtest: fails if no active lock found ok 2 - fails if no active lock found --- duration_ms: 0.491134 type: 'test' ... # Subtest: detects already completed task ok 3 - detects already completed task --- duration_ms: 0.331869 type: 'test' ... 1..3 ok 4 - cmdComplete --- duration_ms: 2.939241 type: 'suite' ... 1..4 ok 10 - src/lib.mjs --- duration_ms: 72.858459 type: 'suite' ... # Published to 1/3 relays (required=1, timeout=25ms) # Published to 2/2 relays (required=2, timeout=25ms) # Published to 2/3 relays (required=2, timeout=25ms) # (node:11408) 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: ci-resilience lock acquisition under unstable relays # Subtest: recovers after all relays are down for an initial outage window ok 1 - recovers after all relays are down for an initial outage window --- duration_ms: 29.835505 type: 'test' ... # Subtest: survives intermittent timeout spikes and reaches quorum with bounded retries ok 2 - survives intermittent timeout spikes and reaches quorum with bounded retries --- duration_ms: 6.771204 type: 'test' ... # Subtest: handles staggered relay recovery and never exceeds retry budget ok 3 - handles staggered relay recovery and never exceeds retry budget --- duration_ms: 3.339809 type: 'test' ... 1..3 ok 11 - ci-resilience lock acquisition under unstable relays --- duration_ms: 42.319195 type: 'suite' ... # Published to 1/1 relays (required=1, timeout=200ms) # Published to 1/1 relays (required=1, timeout=200ms) # (node:11427) 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: 5.542474 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.517607 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: 4.304852 type: 'test' ... # Subtest: short-circuits non-retryable failures without extra attempts ok 4 - short-circuits non-retryable failures without extra attempts --- duration_ms: 1.598146 type: 'test' ... 1..4 ok 12 - publishLock retry behavior --- duration_ms: 15.452743 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":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":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":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.501063 type: 'test' ... 1..1 ok 1 - parseLockEvent --- duration_ms: 2.551245 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: 16.143847 type: 'test' ... 1..1 ok 2 - queryLocks --- duration_ms: 16.470971 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: 7.321713 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.316131 type: 'test' ... # Subtest: fails without retry for persistent validation failures ok 3 - fails without retry for persistent validation failures --- duration_ms: 1.137998 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.87285 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.191763 type: 'test' ... # Subtest: uses fallback relays to satisfy min success quorum ok 6 - uses fallback relays to satisfy min success quorum --- duration_ms: 1.198319 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.410316 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: 0.989401 type: 'test' ... 1..8 ok 3 - publishLock --- duration_ms: 19.335294 type: 'suite' ... 1..3 ok 13 - lock-ops --- duration_ms: 39.426323 type: 'suite' ... # memory_telemetry { # event: 'memory:ingested', # payload: { # memory_id: 'cb3ab94f-63e2-43e4-a994-01a3b23ab509', # agent_id: 'agent-telemetry', # dedupe_key: '4b1ed30fca4d37f2ab4b64612772244982594e9bc5dc6a86f122edec877cd483', # chunk_events: 1, # window_start: 0, # window_end: 1771202046330 # }, # ts: 1771202046335 # } # memory_metric { # metric: 'memory_ingested_total', # payload: { count: 1 }, # ts: 1771202046336 # } # memory_metric { # metric: 'memory_retrieved_total', # payload: { count: 4, cache_hit: false }, # ts: 1771202046339 # } # memory_telemetry { # event: 'memory:pruned', # payload: { pruned_count: 1, retention_ms: 1000, dry_run: true }, # ts: 1771202046340 # } # memory_metric { # metric: 'memory_pruned_total', # payload: { count: 0, retention_ms: 1000, dry_run: true }, # ts: 1771202046341 # } # memory_telemetry { # event: 'memory:prune_skipped', # payload: { reason: 'flag_disabled', retention_ms: 1000 }, # ts: 1771202046341 # } # Subtest: listMemories, inspectMemory, pinMemory, and unpinMemory support admin hooks ok 14 - listMemories, inspectMemory, pinMemory, and unpinMemory support admin hooks --- duration_ms: 2.5615 type: 'test' ... # Subtest: triggerPruneDryRun returns candidate metadata without deleting records ok 15 - triggerPruneDryRun returns candidate metadata without deleting records --- duration_ms: 0.471388 type: 'test' ... # Subtest: memoryStats reports counts/rates and retrieval telemetry remains redaction-safe ok 16 - memoryStats reports counts/rates and retrieval telemetry remains redaction-safe --- duration_ms: 10.727121 type: 'test' ... # Subtest: runPruneCycle respects prune feature-flag modes ok 17 - runPruneCycle respects prune feature-flag modes --- duration_ms: 1.313773 type: 'test' ... # Subtest: stores runtime events in signer/session namespace and clears scope ok 18 - stores runtime events in signer/session namespace and clears scope --- duration_ms: 2.743132 type: 'test' ... # Subtest: expires runtime events and records expiration metrics ok 19 - expires runtime events and records expiration metrics --- duration_ms: 10.584138 type: 'test' ... # Subtest: enforces LRU bounds and tracks eviction metrics ok 20 - enforces LRU bounds and tracks eviction metrics --- duration_ms: 0.627116 type: 'test' ... # Subtest: blocks decrypted/session-sensitive data from durable promotion without sanitizer pass ok 21 - blocks decrypted/session-sensitive data from durable promotion without sanitizer pass --- duration_ms: 0.355843 type: 'test' ... # Subtest: createEmbedderAdapter selects in-memory backend and supports vector CRUD ok 22 - createEmbedderAdapter selects in-memory backend and supports vector CRUD --- duration_ms: 1.655848 type: 'test' ... # Subtest: createEmbedderAdapter reads backend from environment ok 23 - createEmbedderAdapter reads backend from environment --- duration_ms: 0.52594 type: 'test' ... # Subtest: memory feature flags parse defaults and canary allow-lists ok 24 - memory feature flags parse defaults and canary allow-lists --- duration_ms: 1.295328 type: 'test' ... # Subtest: memory prune flag supports off, dry-run, and active modes ok 25 - memory prune flag supports off, dry-run, and active modes --- duration_ms: 0.293935 type: 'test' ... # Subtest: ingestMemoryWindow gathers sources, redacts pii, chunks, embeds, links, and emits telemetry ok 26 - ingestMemoryWindow gathers sources, redacts pii, chunks, embeds, links, and emits telemetry --- duration_ms: 5.972327 type: 'test' ... # Subtest: ingestMemoryWindow dedupes overlapping windows by hashed content + agent + timestamp bucket ok 27 - ingestMemoryWindow dedupes overlapping windows by hashed content + agent + timestamp bucket --- duration_ms: 1.084625 type: 'test' ... # Subtest: createLifecyclePlan respects delete safety constraints and logs reasons ok 28 - createLifecyclePlan respects delete safety constraints and logs reasons --- duration_ms: 2.538435 type: 'test' ... # Subtest: createLifecyclePlan condenses near-duplicates and archives merged source records ok 29 - createLifecyclePlan condenses near-duplicates and archives merged source records --- duration_ms: 1.064069 type: 'test' ... # Subtest: applyLifecycleActions executes keep/archive/delete and merge markers ok 30 - applyLifecycleActions executes keep/archive/delete and merge markers --- duration_ms: 1.380832 type: 'test' ... # Subtest: filterAndRankMemories applies metadata filters and composite score ok 31 - filterAndRankMemories applies metadata filters and composite score --- duration_ms: 3.045455 type: 'test' ... # Subtest: formatMemoriesForPrompt returns prompt blocks and enforces token budget trimming ok 32 - formatMemoriesForPrompt returns prompt blocks and enforces token budget trimming --- duration_ms: 2.755406 type: 'test' ... # Subtest: isMemoryRetrievalEnabled supports global toggle and agent canary list ok 33 - isMemoryRetrievalEnabled supports global toggle and agent canary list --- duration_ms: 0.515142 type: 'test' ... # Subtest: renderPromptWithMemoryContext injects bounded memory block before base prompt ok 34 - renderPromptWithMemoryContext injects bounded memory block before base prompt --- duration_ms: 0.848686 type: 'test' ... # Subtest: createDbAdvisoryLockProvider acquires and releases postgres advisory locks ok 35 - createDbAdvisoryLockProvider acquires and releases postgres advisory locks --- duration_ms: 2.468697 type: 'test' ... # Subtest: startMemoryMaintenanceScheduler runs all jobs and emits metrics including retries ok 36 - startMemoryMaintenanceScheduler runs all jobs and emits metrics including retries --- duration_ms: 26.999776 type: 'test' ... # Subtest: startMemoryMaintenanceScheduler skips jobs when feature flags disable memory ok 37 - startMemoryMaintenanceScheduler skips jobs when feature flags disable memory --- duration_ms: 11.083524 type: 'test' ... # Subtest: normalizeMemoryItem applies durable schema defaults and coercions ok 38 - normalizeMemoryItem applies durable schema defaults and coercions --- duration_ms: 4.280892 type: 'test' ... # Subtest: validateMemoryItem reports field-level errors ok 39 - validateMemoryItem reports field-level errors --- duration_ms: 0.524269 type: 'test' ... # Subtest: ingestEvents rejects invalid writes and logs structured validation details ok 40 - ingestEvents rejects invalid writes and logs structured validation details --- duration_ms: 4.703274 type: 'test' ... # Subtest: loadMemoryPromptTemplates loads all memory prompt templates from disk ok 41 - loadMemoryPromptTemplates loads all memory prompt templates from disk --- duration_ms: 1.48071 type: 'test' ... # Subtest: summarizeEvents retries with repair prompt when first response is malformed JSON ok 42 - summarizeEvents retries with repair prompt when first response is malformed JSON --- duration_ms: 2.203644 type: 'test' ... # Subtest: summarizeEvents falls back to deterministic minimal summary with conservative importance when parsing fails twice ok 43 - summarizeEvents falls back to deterministic minimal summary with conservative importance when parsing fails twice --- duration_ms: 2.635429 type: 'test' ... # Subtest: CLI Smoke Test # Subtest: should print usage when no args provided ok 1 - should print usage when no args provided --- duration_ms: 291.301346 type: 'test' ... # Subtest: should fail when checking without cadence ok 2 - should fail when checking without cadence --- duration_ms: 349.552153 type: 'test' ... # Subtest: should include paused agents in check output ok 3 - should include paused agents in check output --- duration_ms: 1111.685006 type: 'test' ... 1..3 ok 44 - CLI Smoke Test --- duration_ms: 1756.372585 type: 'suite' ... # Initializing torch configuration in /app/test-ops-vSSqGn/project1/torch... # Copying application directories... # Copied src/ # Copied bin/ # Copied dashboard/ # Copied landing/ # Copied assets/ # Copied scripts/ # Copying application files... # Copied package.json # Copied build.mjs # Copied README.md # Copied torch-config.example.json # Created torch/roster.json # Created torch/META_PROMPTS.md # Created torch/scheduler-flow.md # Created torch/daily-scheduler.md # Created torch/weekly-scheduler.md # Created 22 files in torch/prompts/daily/ # Created 21 files in torch/prompts/weekly/ # Created torch-config.json with namespace "torch-f7eb217c" # Initialization complete. # You can now customize the files in torch/ and torch/prompts/. # Initializing torch configuration in /app/test-ops-vSSqGn/project2/torch... # Initializing torch configuration in /app/test-ops-vSSqGn/project3/torch... # Copying application directories... # Copied src/ # Copied bin/ # Copied dashboard/ # Copied landing/ # Copied assets/ # Copied scripts/ # Copying application files... # Copied package.json # Copied build.mjs # Copied README.md # Copied torch-config.example.json # Created torch/roster.json # Created torch/META_PROMPTS.md # Created torch/scheduler-flow.md # Created torch/daily-scheduler.md # Created torch/weekly-scheduler.md # Created 22 files in torch/prompts/daily/ # Created 21 files in torch/prompts/weekly/ # Created torch-config.json with namespace "torch-d0803fd4" # Initialization complete. # You can now customize the files in torch/ and torch/prompts/. # Updating torch configuration in /app/test-ops-vSSqGn/project3/torch... # Creating backup at torch/_backups/backup_2026-02-16T00-34-06-883Z... # Updating application directories... # Updated src/ # Updated bin/ # Updated dashboard/ # Updated landing/ # Updated assets/ # Updated scripts/ # Updating application files... # Updated package.json # Updated build.mjs # Updated README.md # Updated torch-config.example.json # Updating static files... # Updated META_PROMPTS.md # Updated scheduler-flow.md # Updated daily-scheduler.md # Updated weekly-scheduler.md # Skipped roster.json (preserved) # Updating prompts... # daily/: 0 added, 0 updated, 22 preserved # weekly/: 0 added, 0 updated, 21 preserved # Update complete. # Initializing torch configuration in /app/test-ops-vSSqGn/project4/torch... # Copying application directories... # Copied src/ # Copied bin/ # Copied dashboard/ # Copied landing/ # Copied assets/ # Copied scripts/ # Copying application files... # Copied package.json # Copied build.mjs # Copied README.md # Copied torch-config.example.json # Created torch/roster.json # Created torch/META_PROMPTS.md # Created torch/scheduler-flow.md # Created torch/daily-scheduler.md # Created torch/weekly-scheduler.md # Created 22 files in torch/prompts/daily/ # Created 21 files in torch/prompts/weekly/ # Created torch-config.json with namespace "torch-bf757dfd" # Initialization complete. # You can now customize the files in torch/ and torch/prompts/. # Updating torch configuration in /app/test-ops-vSSqGn/project4/torch... # Creating backup at torch/_backups/backup_2026-02-16T00-34-07-078Z... # Updating application directories... # Updated src/ # Updated bin/ # Updated dashboard/ # Updated landing/ # Updated assets/ # Updated scripts/ # Updating application files... # Updated package.json # Updated build.mjs # Updated README.md # Updated torch-config.example.json # Updating static files... # Updated META_PROMPTS.md # Updated scheduler-flow.md # Updated daily-scheduler.md # Updated weekly-scheduler.md # Overwrote roster.json (forced) # Updating prompts... # daily/: 0 added, 22 updated, 0 preserved # weekly/: 0 added, 21 updated, 0 preserved # Update complete. # Initializing torch configuration in /app/test-ops-vSSqGn/project5/torch... # Copying application directories... # Copied src/ # Copied bin/ # Copied dashboard/ # Copied landing/ # Copied assets/ # Copied scripts/ # Copying application files... # Copied package.json # Copied build.mjs # Copied README.md # Copied torch-config.example.json # Created torch/roster.json # Created torch/META_PROMPTS.md # Created torch/scheduler-flow.md # Created torch/daily-scheduler.md # Created torch/weekly-scheduler.md # Created 22 files in torch/prompts/daily/ # Created 21 files in torch/prompts/weekly/ # Created torch-config.json with namespace "torch-d9f56ede" # Initialization complete. # You can now customize the files in torch/ and torch/prompts/. # Updating torch configuration in /app/test-ops-vSSqGn/project5/torch... # Creating backup at torch/_backups/backup_2026-02-16T00-34-07-295Z... # Updating application directories... # Updated src/ # Updated bin/ # Updated dashboard/ # Updated landing/ # Updated assets/ # Updated scripts/ # Updating application files... # Updated package.json # Updated build.mjs # Updated README.md # Updated torch-config.example.json # Updating static files... # Updated META_PROMPTS.md # Updated scheduler-flow.md # Updated daily-scheduler.md # Updated weekly-scheduler.md # Skipped roster.json (preserved) # Updating prompts... # daily/: 0 added, 0 updated, 22 preserved # weekly/: 0 added, 0 updated, 21 preserved # Update complete. # Initializing torch configuration in /app/test-ops-vSSqGn/project_roster/torch... # Copying application directories... # Copied src/ # Copied bin/ # Copied dashboard/ # Copied landing/ # Copied assets/ # Copied scripts/ # Copying application files... # Copied package.json # Copied build.mjs # Copied README.md # Copied torch-config.example.json # Created torch/roster.json # Created torch/META_PROMPTS.md # Created torch/scheduler-flow.md # Created torch/daily-scheduler.md # Created torch/weekly-scheduler.md # Created 22 files in torch/prompts/daily/ # Created 21 files in torch/prompts/weekly/ # Created torch-config.json with namespace "torch-5167c881" # Initialization complete. # You can now customize the files in torch/ and torch/prompts/. # Checking locks: namespace=torch-5167c881, cadence=daily, date=2026-02-16 # Relays: wss://relay.damus.io, wss://nos.lol, wss://relay.primal.net # {"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}]} # Initializing torch configuration in /app/test-ops-vSSqGn/project_config_init/torch... # Copying application directories... # Copied src/ # Copied bin/ # Copied dashboard/ # Copied landing/ # Copied assets/ # Copied scripts/ # Copying application files... # Copied package.json # Copied build.mjs # Copied README.md # Copied torch-config.example.json # Created torch/roster.json # Created torch/META_PROMPTS.md # Created torch/scheduler-flow.md # Created torch/daily-scheduler.md # Created torch/weekly-scheduler.md # Created 22 files in torch/prompts/daily/ # Created 21 files in torch/prompts/weekly/ # Created torch-config.json with namespace "torch-0d7d4500" # Initialization complete. # You can now customize the files in torch/ and torch/prompts/. # Subtest: cmdInit creates directory structure and files ok 45 - cmdInit creates directory structure and files --- duration_ms: 116.425575 type: 'test' ... # Subtest: cmdInit fails if directory exists without force ok 46 - cmdInit fails if directory exists without force --- duration_ms: 1.918692 type: 'test' ... # Subtest: cmdUpdate preserves modified prompt ok 47 - cmdUpdate preserves modified prompt --- duration_ms: 229.559826 type: 'test' ... # Subtest: cmdUpdate overwrites prompt with force ok 48 - cmdUpdate overwrites prompt with force --- duration_ms: 184.60354 type: 'test' ... # Subtest: cmdUpdate creates backup ok 49 - cmdUpdate creates backup --- duration_ms: 183.381503 type: 'test' ... # Subtest: torch-lock check respects local roster ok 50 - torch-lock check respects local roster --- duration_ms: 1146.057253 type: 'test' ... # Subtest: cmdInit creates torch-config.json with random namespace ok 51 - cmdInit creates torch-config.json with random namespace --- duration_ms: 56.595345 type: 'test' ... # Published to 1/3 relays (required=1, timeout=80ms) # Subtest: relay fanout quorum integration # Subtest: passes with required=1 when one relay succeeds and two fail ok 1 - passes with required=1 when one relay succeeds and two fail --- duration_ms: 171.873039 type: 'test' ... # Subtest: fails with quorum error for required=1 when all relays fail ok 2 - fails with quorum error for required=1 when all relays fail --- duration_ms: 103.155412 type: 'test' ... # Subtest: fails with required=2 when only one relay succeeds ok 3 - fails with required=2 when only one relay succeeds --- duration_ms: 108.682399 type: 'test' ... # Published to 2/3 relays (required=2, timeout=80ms) # Subtest: passes when delayed successes reach quorum before timeout ok 4 - passes when delayed successes reach quorum before timeout --- duration_ms: 97.633222 type: 'test' ... 1..4 ok 52 - relay fanout quorum integration --- duration_ms: 484.115912 type: 'suite' ... # Subtest: raises all-relays-down duration alert after threshold ok 53 - raises all-relays-down duration alert after threshold --- duration_ms: 2.80821 type: 'test' ... # Subtest: raises success-rate alert when rolling health falls below threshold ok 54 - raises success-rate alert when rolling health falls below threshold --- duration_ms: 0.354661 type: 'test' ... # Subtest: fails required memory policy when retrieval/storage evidence is missing ok 55 - fails required memory policy when retrieval/storage evidence is missing --- duration_ms: 867.491516 type: 'test' ... # Subtest: accepts required memory policy when markers or artifacts are produced ok 56 - accepts required memory policy when markers or artifacts are produced --- duration_ms: 917.292328 type: 'test' ... # Subtest: records backend failure metadata when lock command exits with code 2 ok 57 - records backend failure metadata when lock command exits with code 2 --- duration_ms: 983.414552 type: 'test' ... # Subtest: defers backend failures in non-strict mode and reuses idempotency key on successful retry ok 58 - defers backend failures in non-strict mode and reuses idempotency key on successful retry --- duration_ms: 586.454659 type: 'test' ... # Subtest: fails after exceeding non-strict deferral budget ok 59 - fails after exceeding non-strict deferral budget --- duration_ms: 176.281973 type: 'test' ... # Subtest: strict lock mode fails immediately without deferral ok 60 - strict lock mode fails immediately without deferral --- duration_ms: 92.092641 type: 'test' ... # Subtest: skips lock health preflight by default when not enabled ok 61 - skips lock health preflight by default when not enabled --- duration_ms: 393.710507 type: 'test' ... # Subtest: fails scheduler with preflight metadata when lock health preflight is enabled ok 62 - fails scheduler with preflight metadata when lock health preflight is enabled --- duration_ms: 127.561572 type: 'test' ... # Subtest: categorizes unreadable prompt files as prompt_parse_error ok 63 - categorizes unreadable prompt files as prompt_parse_error --- duration_ms: 94.516802 type: 'test' ... # Subtest: categorizes invalid prompt schema as prompt_schema_error ok 64 - categorizes invalid prompt schema as prompt_schema_error --- duration_ms: 93.728806 type: 'test' ... # Subtest: categorizes handoff runtime failures as execution_error ok 65 - categorizes handoff runtime failures as execution_error --- duration_ms: 344.985215 type: 'test' ... # Subtest: retries lock acquisition for backend error and succeeds on a later attempt ok 66 - retries lock acquisition for backend error and succeeds on a later attempt --- duration_ms: 399.66793 type: 'test' ... # Subtest: stops retrying after configured lock backend retries are exhausted ok 67 - stops retrying after configured lock backend retries are exhausted --- duration_ms: 101.436698 type: 'test' ... # Subtest: does not use backend retry flow for exit code 3 lock conflicts ok 68 - does not use backend retry flow for exit code 3 lock conflicts --- duration_ms: 416.871688 type: 'test' ... # Subtest: runs selected scheduler prompt through configured runner command ok 69 - runs selected scheduler prompt through configured runner command --- duration_ms: 349.859998 type: 'test' ... # Subtest: propagates non-zero runner exit code ok 70 - propagates non-zero runner exit code --- duration_ms: 341.39237 type: 'test' ... # Subtest: scheduler lock backend failure artifact matches required frontmatter schema ok 71 - scheduler lock backend failure artifact matches required frontmatter schema --- duration_ms: 102.976554 type: 'test' ... # Subtest: schema contract catches missing required lock-backend field ok 72 - schema contract catches missing required lock-backend field --- duration_ms: 1.969747 type: 'test' ... # Subtest: schema contract catches misnamed lock-backend key ok 73 - schema contract catches misnamed lock-backend key --- duration_ms: 0.537546 type: 'test' ... # Subtest: lock preflight e2e: successful lock writes completed status snapshot ok 74 - lock preflight e2e: successful lock writes completed status snapshot --- duration_ms: 404.396931 type: 'test' ... # Subtest: lock preflight e2e: exit code 2 quorum failure persists failed backend status and prompt-not-started marker ok 75 - lock preflight e2e: exit code 2 quorum failure persists failed backend status and prompt-not-started marker --- duration_ms: 95.373976 type: 'test' ... # Subtest: lock preflight e2e: non-lock failure exits failed without prompt parse/schema classification ok 76 - lock preflight e2e: non-lock failure exits failed without prompt parse/schema classification --- duration_ms: 90.269496 type: 'test' ... # Subtest: Scheduler Ratchet Logic (Log Checking) # Subtest: excludes agents completed today (daily) ok 1 - excludes agents completed today (daily) --- duration_ms: 2.645779 type: 'test' ... # Subtest: excludes agents completed this week (weekly) ok 2 - excludes agents completed this week (weekly) --- duration_ms: 0.452564 type: 'test' ... # Subtest: combines locked and completed agents in exclusion list ok 3 - combines locked and completed agents in exclusion list --- duration_ms: 0.540265 type: 'test' ... # Subtest: ignores logs when --ignore-logs is set ok 4 - ignores logs when --ignore-logs is set --- duration_ms: 0.413416 type: 'test' ... # Subtest: handles missing log directory gracefully ok 5 - handles missing log directory gracefully --- duration_ms: 0.351015 type: 'test' ... 1..5 ok 77 - Scheduler Ratchet Logic (Log Checking) --- duration_ms: 5.962229 type: 'suite' ... # Subtest: Scheduler cycle ordering guarantees # Subtest: keeps optional preflight before lock-acquire and preserves handoff/artifact/validation/complete ordering ok 1 - keeps optional preflight before lock-acquire and preserves handoff/artifact/validation/complete ordering --- duration_ms: 12.773423 type: 'test' ... # Subtest: includes lock backend failure metadata and classifier checkpoints ok 2 - includes lock backend failure metadata and classifier checkpoints --- duration_ms: 2.042276 type: 'test' ... 1..2 ok 78 - Scheduler cycle ordering guarantees --- duration_ms: 15.405925 type: 'suite' ... # Subtest: summarizes recent lock reliability by platform/cadence/backend/relay ok 79 - summarizes recent lock reliability by platform/cadence/backend/relay --- duration_ms: 88.457505 type: 'test' ... # Subtest: loadTorchConfig (Unit Tests with Mocked FS) # Subtest: loads valid config correctly ok 1 - loads valid config correctly --- duration_ms: 3.803768 type: 'test' ... # Subtest: returns default config when file is missing ok 2 - returns default config when file is missing --- duration_ms: 0.508882 type: 'test' ... # Subtest: throws error on malformed JSON ok 3 - throws error on malformed JSON --- duration_ms: 0.895634 type: 'test' ... # Subtest: caches the config and ignores subsequent fs calls ok 4 - caches the config and ignores subsequent fs calls --- duration_ms: 0.673118 type: 'test' ... 1..4 ok 80 - loadTorchConfig (Unit Tests with Mocked FS) --- duration_ms: 7.594028 type: 'suite' ... # Subtest: torch-config # Subtest: getTorchConfigPath # Subtest: returns default path when env var is not set ok 1 - returns default path when env var is not set --- duration_ms: 1.050242 type: 'test' ... # Subtest: returns custom path when env var is set ok 2 - returns custom path when env var is set --- duration_ms: 0.38111 type: 'test' ... 1..2 ok 1 - getTorchConfigPath --- duration_ms: 2.752161 type: 'suite' ... # Subtest: parseTorchConfig # Subtest: parses new lock backend knobs ok 1 - parses new lock backend knobs --- duration_ms: 1.346933 type: 'test' ... 1..1 ok 2 - parseTorchConfig --- duration_ms: 1.529808 type: 'suite' ... # Subtest: loadTorchConfig # Subtest: throws fatal error for invalid relay URL ok 1 - throws fatal error for invalid relay URL --- duration_ms: 1.814454 type: 'test' ... # Subtest: throws fatal error for invalid timeout range ok 2 - throws fatal error for invalid timeout range --- duration_ms: 2.078621 type: 'test' ... # Subtest: throws error for malformed JSON ok 3 - throws error for malformed JSON --- duration_ms: 0.811601 type: 'test' ... 1..3 ok 3 - loadTorchConfig --- duration_ms: 5.900837 type: 'suite' ... # Subtest: backend getters # Subtest: returns default relays ok 1 - returns default relays --- duration_ms: 0.718044 type: 'test' ... # Subtest: validates env knob values ok 2 - validates env knob values --- duration_ms: 1.010661 type: 'test' ... 1..2 ok 4 - backend getters --- duration_ms: 4.092197 type: 'suite' ... 1..4 ok 81 - torch-config --- duration_ms: 15.385685 type: 'suite' ... # Subtest: Date Utilities # Subtest: getIsoWeekStr # Subtest: returns correct ISO week for simple cases ok 1 - returns correct ISO week for simple cases --- duration_ms: 1.370898 type: 'test' ... # Subtest: handles year boundaries correctly ok 2 - handles year boundaries correctly --- duration_ms: 0.217656 type: 'test' ... # Subtest: handles leap years ok 3 - handles leap years --- duration_ms: 1.721102 type: 'test' ... # Subtest: handles empty input (defaults to today) ok 4 - handles empty input (defaults to today) --- duration_ms: 0.435451 type: 'test' ... # Subtest: handles invalid input gracefully ok 5 - handles invalid input gracefully --- duration_ms: 0.345039 type: 'test' ... 1..5 ok 1 - getIsoWeekStr --- duration_ms: 5.265987 type: 'suite' ... 1..1 ok 82 - Date Utilities --- duration_ms: 5.795432 type: 'suite' ... # Subtest: passes when artifacts include metadata and failure IDs map to unresolved known issue entries ok 83 - passes when artifacts include metadata and failure IDs map to unresolved known issue entries --- duration_ms: 81.375319 type: 'test' ... # Subtest: fails when required metadata is missing from artifacts ok 84 - fails when required metadata is missing from artifacts --- duration_ms: 69.70169 type: 'test' ... # Subtest: fails when failure identifiers are not cross-linked to known issues or incidents ok 85 - fails when failure identifiers are not cross-linked to known issues or incidents --- duration_ms: 69.918486 type: 'test' ... # Subtest: schema validation covers required fields, coercion, and rejection paths ok 86 - schema validation covers required fields, coercion, and rejection paths --- duration_ms: 2.951137 type: 'test' ... # Subtest: summarizer parser accepts valid json and recovers after malformed json response ok 87 - summarizer parser accepts valid json and recovers after malformed json response --- duration_ms: 2.456 type: 'test' ... # Subtest: ingest integration persists memory records and links embeddings from event batches ok 88 - ingest integration persists memory records and links embeddings from event batches --- duration_ms: 3.999804 type: 'test' ... # Subtest: retrieval ranking blends semantic, importance, and recency signals ok 89 - retrieval ranking blends semantic, importance, and recency signals --- duration_ms: 0.831681 type: 'test' ... # Subtest: pruner policy protects pins, merges duplicates, and picks archive/delete outcomes ok 90 - pruner policy protects pins, merges duplicates, and picks archive/delete outcomes --- duration_ms: 1.472562 type: 'test' ... # Subtest: scheduler smoke test handles mocked clock and lock contention ok 91 - scheduler smoke test handles mocked clock and lock contention --- duration_ms: 32.214841 type: 'test' ... 1..91 # tests 146 # suites 23 # pass 146 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 8318.171145