mirror of
https://github.com/PR0M3TH3AN/TORCH.git
synced 2026-10-27 07:51:52 +00:00
Merge origin/main into refactor/lock-ops-decomposition-2507393976208881863 (resolve conflicts)
This commit is contained in:
commit
55208c2e45
308 files changed
+43053
-3934
No files matched your search
@@ -26,3 +26,8 @@ reports/performance/benchmark-*.txt
|
||||
test_output_full.txt
|
||||
benchmark-after.txt
|
||||
benchmark-baseline.txt
|
||||
|
||||
# Coverage
|
||||
coverage/
|
||||
playwright-report/
|
||||
test-results/
|
||||
+15
-14
@@ -17,14 +17,15 @@ Track only **active, reproducible, unresolved** issues.
|
||||
## Active issues
|
||||
|
||||
### `test/scheduler-preflight-lock.e2e.test.mjs` platform mismatch (`unknown` vs `codex`)
|
||||
- **Status:** Resolved
|
||||
- **Status:** Active
|
||||
- **Issue-ID:** KNOWN-ISSUE-scheduler-preflight-platform
|
||||
- **Area:** Test
|
||||
- **Symptom:** Historical issue where test expected `platform: unknown` while scheduler logs used `platform: codex`.
|
||||
- **Trigger/Conditions:** Previously reproed in Codex.
|
||||
- **Workaround:** None needed after assertion behavior update.
|
||||
- **Impact:** No longer blocking.
|
||||
- **Symptom:** The first e2e scenario fails because expected frontmatter platform resolves to `unknown` in test context while scheduler output persists `platform: codex`.
|
||||
- **Trigger/Conditions:** Running `node test/scheduler-preflight-lock.e2e.test.mjs` or `node --test test/scheduler-preflight-lock.e2e.test.mjs` in this environment.
|
||||
- **Workaround:** Exclude `test/scheduler-preflight-lock.e2e.test.mjs` from local sandbox triage runs until the expectation source is aligned with scheduler platform semantics.
|
||||
- **Impact:** Medium — scheduler e2e bundle reports a deterministic failure unrelated to most feature changes.
|
||||
- **Related notes:** `docs/agent-handoffs/incidents/2026-02-20-codex-test-failures-platform-and-telemetry.md`
|
||||
- **Last verified:** 2026-02-20
|
||||
- **Last verified:** 2026-02-23 (verified: passes in Jules environment)
|
||||
|
||||
### `test/memory-telemetry.test.mjs` expects child-process stdout/stderr that are empty in this environment
|
||||
- **Status:** Active
|
||||
@@ -35,10 +36,10 @@ Track only **active, reproducible, unresolved** issues.
|
||||
- **Workaround:** Run memory tests excluding `test/memory-telemetry.test.mjs` while investigating child-process output capture behavior.
|
||||
- **Impact:** Medium — targeted memory test bundles can fail despite core memory tests passing.
|
||||
- **Related notes:** `docs/agent-handoffs/incidents/2026-02-20-codex-test-failures-platform-and-telemetry.md`
|
||||
- **Last verified:** 2026-02-20
|
||||
- **Last verified:** 2026-02-23 (verified: passes in Jules environment)
|
||||
|
||||
### Sandbox restrictions cause `npm test` failures (`listen EPERM` and `spawnSync /bin/sh EPERM`)
|
||||
- **Status:** Active
|
||||
- **Status:** Active (Monitoring - passed in 2026-02-22 run)
|
||||
- **Issue-ID:** KNOWN-ISSUE-sandbox-eprem-tests
|
||||
- **Area:** Test / Runtime
|
||||
- **Symptom:** Multiple tests fail in this sandbox due process restrictions, including:
|
||||
@@ -49,7 +50,7 @@ Track only **active, reproducible, unresolved** issues.
|
||||
- **Workaround:** Run affected tests in an environment that permits local socket binding and shell execution, or skip these cases during sandbox triage.
|
||||
- **Impact:** Medium — full `npm test` is red in sandbox even when core logic tests pass.
|
||||
- **Related notes:** `docs/agent-handoffs/incidents/2026-02-20-sandbox-test-permissions-eprem.md`
|
||||
- **Last verified:** 2026-02-20
|
||||
- **Last verified:** 2026-02-23 (verified: passes in Jules environment)
|
||||
|
||||
### Goose Desktop: hermit "text file busy" (ETXTBSY) blocks all `node`/`npm` commands
|
||||
- **Status:** Active (local workaround applied, upstream fix needed)
|
||||
@@ -59,7 +60,7 @@ Track only **active, reproducible, unresolved** issues.
|
||||
- **Workaround:** Use patched setup: `PATH=/home/user/.local/goose-fix/bin:$PATH` before commands. Or: `rm -rf ~/.config/goose/mcp-hermit` then use patched wrappers. See `docs/agent-handoffs/incidents/2026-02-15-hermit-text-file-busy.md` for the full patch.
|
||||
- **Impact:** Critical — 100% blocks scheduler runs, lock operations, and any npm script on Goose Desktop.
|
||||
- **Related notes:** `docs/agent-handoffs/incidents/2026-02-15-hermit-text-file-busy.md`, patch at `docs/agent-handoffs/incidents/goose-hermit-etxtbsy-fix.patch`
|
||||
- **Last verified:** 2026-02-20 (not re-checkable here: Goose Desktop wrapper/toolchain unavailable in this environment)
|
||||
- **Last verified:** 2026-02-23 (not re-checkable here: Goose Desktop wrapper/toolchain unavailable in this environment)
|
||||
|
||||
### Goose Desktop: `node`/`npx` wrappers swallow non-zero exit codes
|
||||
- **Status:** Active (no workaround except stdout parsing)
|
||||
@@ -69,7 +70,7 @@ Track only **active, reproducible, unresolved** issues.
|
||||
- **Workaround:** Parse stdout for `LOCK_STATUS=denied` / `LOCK_STATUS=race_lost` instead of relying on exit codes.
|
||||
- **Impact:** Medium — scheduler lock-race retry logic broken; requires stdout parsing fallback.
|
||||
- **Related notes:** `docs/agent-handoffs/incidents/2026-02-15-hermit-text-file-busy.md`
|
||||
- **Last verified:** 2026-02-20 (not re-checkable here: Goose Desktop wrapper/toolchain unavailable in this environment)
|
||||
- **Last verified:** 2026-02-23 (not re-checkable here: Goose Desktop wrapper/toolchain unavailable in this environment)
|
||||
|
||||
### `npm test` fails due to prompt contract violations
|
||||
- **Status:** Resolved
|
||||
@@ -90,7 +91,7 @@ Track only **active, reproducible, unresolved** issues.
|
||||
- **Last verified:** 2026-02-20
|
||||
|
||||
### Recurring scheduler lock backend failures in recent task logs
|
||||
- **Status:** Monitoring
|
||||
- **Status:** Monitoring (lock:health passed 2026-02-22)
|
||||
- **Issue-ID:** KNOWN-ISSUE-relay-connectivity-sandbox
|
||||
- **Area:** Runtime
|
||||
- **Symptom:** Multiple scheduler runs fail with `Lock backend error` before prompt handoff/validation.
|
||||
@@ -98,7 +99,7 @@ Track only **active, reproducible, unresolved** issues.
|
||||
- **Workaround:** Run relay preflight (`npm run lock:health -- --cadence <daily|weekly>`) and inspect `task-logs/relay-health/<cadence>.jsonl` for trend/alert data before rerunning scheduler. If scheduler logs `All relays unhealthy preflight`, treat it as an incident signal, defer lock attempts, and escalate relay/network checks (DNS/TLS/connectivity).
|
||||
- **Impact:** Scheduled agent execution may be deferred early when all relays are unhealthy, preventing noisy lock retries until relay health recovers.
|
||||
- **Related notes:** `docs/agent-handoffs/learnings/2026-02-15-relay-health-preflight-job.md`
|
||||
- **Last verified:** 2026-02-20
|
||||
- **Last verified:** 2026-02-23 (verified: relays healthy in Jules environment)
|
||||
|
||||
### Claude Code: outbound WebSocket blocked — scheduler cannot run from this environment
|
||||
- **Status:** Active (no code-level workaround)
|
||||
@@ -109,7 +110,7 @@ Track only **active, reproducible, unresolved** issues.
|
||||
- **Correct workaround:** Run the scheduler and all `torch-lock` commands exclusively from **Jules** (Google Cloud environment) or any other agent environment with unrestricted outbound WebSocket access. Do not attempt to run `lock:lock` / `lock:complete` from Claude Code sessions.
|
||||
- **Impact:** Critical for Claude Code sessions — 100% blocks scheduler runs, lock acquisition, and lock release. No impact on Jules-initiated runs.
|
||||
- **Related notes:** Investigation session 2026-02-19; WebSearch confirmed the general proxy restriction is a known Anthropic platform-level policy, not a TORCH bug.
|
||||
- **Last verified:** 2026-02-20 (not re-checkable from Claude environment in this run; Codex sandbox still shows relay DNS/WebSocket reachability failure via `npm run lock:health -- --cadence daily`)
|
||||
- **Last verified:** 2026-02-23 (not re-checkable from Claude environment in this run; Jules environment has unrestricted outbound access)
|
||||
|
||||
### content-audit-agent targets missing /content directory
|
||||
- **Status:** Resolved
|
||||
|
||||
@@ -84,6 +84,31 @@ Use the following folders as lightweight coordination artifacts:
|
||||
**Decision note:** Decision, Alternatives considered, Rationale, Consequences/follow-ups.
|
||||
**Test log:** Command, Result (pass/fail/warn), Notes (environmental limits, retries, artifacts).
|
||||
|
||||
### Long-term Memory
|
||||
|
||||
While `src/context` and `src/todo` are ephemeral (per session), TORCH provides a durable memory system for transferring knowledge across runs and agents.
|
||||
|
||||
#### Reading Memory
|
||||
At the start of a session, the scheduler retrieves relevant memories based on your agent identity and current prompt.
|
||||
- **Source:** `.scheduler-memory/latest/<cadence>/memories.md`
|
||||
- **Action:** Read this file to learn from past agents (e.g., "The integration test suite is flaky on the login step", "Use `node:test` instead of Jest").
|
||||
|
||||
#### Writing Memory
|
||||
To save a learning for future agents, create a memory file before finishing your task.
|
||||
- **File:** `memory-update.md` (in the repository root).
|
||||
- **Content:** Concise, high-value insights.
|
||||
- **Mechanism:** The scheduler will automatically ingest this file after your run completes.
|
||||
|
||||
**Good Memories:**
|
||||
- "Fix for `EADDRINUSE` in tests: ensure server.close() is called in `after()`."
|
||||
- "Project preference: Always use named exports for components."
|
||||
- "Constraint: Do not upgrade `dependency-x` past v2.0 due to breaking change Y."
|
||||
|
||||
**Bad Memories:**
|
||||
- "I updated file X." (Use git history for this).
|
||||
- "Running tests..." (Use task logs).
|
||||
- Large code blocks or entire file dumps.
|
||||
|
||||
### Knowledge-sharing protocol
|
||||
|
||||
#### What belongs where
|
||||
@@ -548,10 +573,13 @@ If you are developing `torch-lock` itself:
|
||||
- `npm run lock:health -- --cadence daily` (relay websocket + publish/read probe; writes history to `task-logs/relay-health/`)
|
||||
- `npm run lock:complete` (manually complete a task)
|
||||
- `npm run dashboard:serve`
|
||||
- `npm test` (run unit tests)
|
||||
- `npm test` (run validation, integration, and unit tests)
|
||||
- `npm run test:unit:lock-backend` (run lock backend unit tests)
|
||||
- `npm run test:extended-main` (run extended integration tests)
|
||||
- `npm run validate:scheduler` (validate scheduler roster and prompts)
|
||||
- `npm run test:playwright` (run Playwright tests)
|
||||
- `npm run test:playwright:coverage` (run Playwright tests with coverage)
|
||||
- `npm run test:playwright:ui` (run Playwright tests in UI mode)
|
||||
- `npm run validate:scheduler` (validate scheduler roster, prompts, flow parity, and failure schema)
|
||||
- `npm run lint` (run linter)
|
||||
- `npm run scheduler:daily` (run full daily scheduler cycle)
|
||||
- `npm run scheduler:weekly` (run full weekly scheduler cycle)
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
node:internal/modules/cjs/loader:1386
|
||||
throw err;
|
||||
^
|
||||
|
||||
Error: Cannot find module '/app/scripts/check-file-size.mjs'
|
||||
at Function._resolveFilename (node:internal/modules/cjs/loader:1383:15)
|
||||
at defaultResolveImpl (node:internal/modules/cjs/loader:1025:19)
|
||||
at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22)
|
||||
at Function._load (node:internal/modules/cjs/loader:1192:37)
|
||||
at TracingChannel.traceSync (node:diagnostics_channel:328:14)
|
||||
at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)
|
||||
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:171:5)
|
||||
at node:internal/main/run_main_module:36:49 {
|
||||
code: 'MODULE_NOT_FOUND',
|
||||
requireStack: []
|
||||
}
|
||||
|
||||
Node.js v22.22.0
|
||||
@@ -1,18 +0,0 @@
|
||||
node:internal/modules/cjs/loader:1386
|
||||
throw err;
|
||||
^
|
||||
|
||||
Error: Cannot find module '/app/scripts/check-innerhtml.mjs'
|
||||
at Function._resolveFilename (node:internal/modules/cjs/loader:1383:15)
|
||||
at defaultResolveImpl (node:internal/modules/cjs/loader:1025:19)
|
||||
at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22)
|
||||
at Function._load (node:internal/modules/cjs/loader:1192:37)
|
||||
at TracingChannel.traceSync (node:diagnostics_channel:328:14)
|
||||
at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)
|
||||
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:171:5)
|
||||
at node:internal/main/run_main_module:36:49 {
|
||||
code: 'MODULE_NOT_FOUND',
|
||||
requireStack: []
|
||||
}
|
||||
|
||||
Node.js v22.22.0
|
||||
@@ -1,8 +0,0 @@
|
||||
npm error Missing script: "lint"
|
||||
npm error
|
||||
npm error Did you mean this?
|
||||
npm error npm link # Symlink a package folder
|
||||
npm error
|
||||
npm error To see a list of scripts, run:
|
||||
npm error npm run
|
||||
npm error A complete log of this run can be found in: /home/jules/.npm/_logs/2026-02-14T06_04_52_713Z-debug-0.log
|
||||
@@ -1,28 +0,0 @@
|
||||
# Audit Report — 2026-02-14 (default branch)
|
||||
|
||||
**Summary**
|
||||
|
||||
* Date: 2026-02-14
|
||||
* Agent: audit-agent
|
||||
* Status: **FAILED**
|
||||
|
||||
**Failure Reason**
|
||||
|
||||
The required audit scripts are missing from the repository.
|
||||
|
||||
* `scripts/check-file-size.mjs`: MODULE_NOT_FOUND
|
||||
* `scripts/check-innerhtml.mjs`: MODULE_NOT_FOUND
|
||||
* `npm run lint`: Missing script
|
||||
|
||||
**Metrics**
|
||||
|
||||
* Grandfathered oversized files: N/A
|
||||
* New oversized files: N/A
|
||||
* Total innerHTML assignments: N/A
|
||||
* Lint failures: N/A
|
||||
|
||||
**Artifacts**
|
||||
|
||||
* [raw-check-file-size.log](./raw-check-file-size.log)
|
||||
* [raw-check-innerhtml.log](./raw-check-innerhtml.log)
|
||||
* [raw-lint.log](./raw-lint.log)
|
||||
@@ -1,14 +0,0 @@
|
||||
dashboard/index.html: 878 lines (excess: 578)
|
||||
dashboard/styles.css: 360 lines (excess: 60)
|
||||
landing/index.html: 706 lines (excess: 406)
|
||||
scripts/agent/run-scheduler-cycle.mjs: 1038 lines (excess: 738)
|
||||
scripts/agent/verify-run-artifacts.mjs: 363 lines (excess: 63)
|
||||
src/lib.mjs: 715 lines (excess: 415)
|
||||
src/lock-ops.mjs: 587 lines (excess: 287)
|
||||
src/services/memory/index.js: 388 lines (excess: 88)
|
||||
src/services/memory/pruner.js: 314 lines (excess: 14)
|
||||
src/services/memory/scheduler.js: 318 lines (excess: 18)
|
||||
test/lib.test.mjs: 418 lines (excess: 118)
|
||||
test/lock-ops.test.mjs: 395 lines (excess: 95)
|
||||
test/run-scheduler-cycle-memory-policy.test.mjs: 599 lines (excess: 299)
|
||||
test-audit/flakiness-matrix.json: 366 lines (excess: 66)
|
||||
@@ -1,3 +0,0 @@
|
||||
dashboard/index.html: 2 assignments
|
||||
landing/index.html: 3 assignments
|
||||
Total assignments: 5
|
||||
@@ -1,26 +0,0 @@
|
||||
|
||||
> [email protected] lint
|
||||
> eslint .
|
||||
|
||||
|
||||
/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
|
||||
69: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
|
||||
|
||||
✖ 8 problems (0 errors, 8 warnings)
|
||||
@@ -1,27 +0,0 @@
|
||||
# Audit Report — 2026-02-15
|
||||
|
||||
**Summary**
|
||||
|
||||
* Date: 2026-02-15
|
||||
* Node: v22.22.0
|
||||
|
||||
**Metrics**
|
||||
|
||||
* **Oversized files** (selected):
|
||||
* `scripts/agent/run-scheduler-cycle.mjs`: 1038 lines (excess: 738)
|
||||
* `dashboard/index.html`: 878 lines (excess: 578)
|
||||
* `src/lib.mjs`: 715 lines (excess: 415)
|
||||
* `test/run-scheduler-cycle-memory-policy.test.mjs`: 599 lines (excess: 299)
|
||||
* `src/lock-ops.mjs`: 587 lines (excess: 287)
|
||||
|
||||
* **Total innerHTML assignments**: 5
|
||||
* `landing/index.html`: 3
|
||||
* `dashboard/index.html`: 2
|
||||
|
||||
* **Lint failures**: 0 errors, 8 warnings.
|
||||
|
||||
**Artifacts**
|
||||
|
||||
* `raw-check-file-size.log`
|
||||
* `raw-check-innerhtml.log`
|
||||
* `raw-lint.log`
|
||||
@@ -1,95 +0,0 @@
|
||||
{
|
||||
"oversizedFiles": [
|
||||
{
|
||||
"file": ".scheduler-memory/memory-store.json",
|
||||
"lines": 377,
|
||||
"excess": 77
|
||||
},
|
||||
{
|
||||
"file": "TORCH.md",
|
||||
"lines": 342,
|
||||
"excess": 42
|
||||
},
|
||||
{
|
||||
"file": "dashboard/index.html",
|
||||
"lines": 1044,
|
||||
"excess": 744
|
||||
},
|
||||
{
|
||||
"file": "dashboard/styles.css",
|
||||
"lines": 361,
|
||||
"excess": 61
|
||||
},
|
||||
{
|
||||
"file": "landing/index.html",
|
||||
"lines": 924,
|
||||
"excess": 624
|
||||
},
|
||||
{
|
||||
"file": "scripts/agent/run-scheduler-cycle.mjs",
|
||||
"lines": 1092,
|
||||
"excess": 792
|
||||
},
|
||||
{
|
||||
"file": "scripts/agent/verify-run-artifacts.mjs",
|
||||
"lines": 363,
|
||||
"excess": 63
|
||||
},
|
||||
{
|
||||
"file": "src/lib.mjs",
|
||||
"lines": 727,
|
||||
"excess": 427
|
||||
},
|
||||
{
|
||||
"file": "src/lock-ops.mjs",
|
||||
"lines": 593,
|
||||
"excess": 293
|
||||
},
|
||||
{
|
||||
"file": "src/ops.mjs",
|
||||
"lines": 434,
|
||||
"excess": 134
|
||||
},
|
||||
{
|
||||
"file": "src/services/memory/index.js",
|
||||
"lines": 428,
|
||||
"excess": 128
|
||||
},
|
||||
{
|
||||
"file": "src/services/memory/pruner.js",
|
||||
"lines": 314,
|
||||
"excess": 14
|
||||
},
|
||||
{
|
||||
"file": "src/services/memory/scheduler.js",
|
||||
"lines": 318,
|
||||
"excess": 18
|
||||
},
|
||||
{
|
||||
"file": "src/torch-config.mjs",
|
||||
"lines": 315,
|
||||
"excess": 15
|
||||
},
|
||||
{
|
||||
"file": "test/lib.test.mjs",
|
||||
"lines": 418,
|
||||
"excess": 118
|
||||
},
|
||||
{
|
||||
"file": "test/lock-ops.test.mjs",
|
||||
"lines": 395,
|
||||
"excess": 95
|
||||
},
|
||||
{
|
||||
"file": "test/run-scheduler-cycle-memory-policy.test.mjs",
|
||||
"lines": 599,
|
||||
"excess": 299
|
||||
},
|
||||
{
|
||||
"file": "test-audit/flakiness-matrix.json",
|
||||
"lines": 366,
|
||||
"excess": 66
|
||||
}
|
||||
],
|
||||
"totalExcessLines": 4010
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"innerHtmlAssignments": [
|
||||
{
|
||||
"file": "dashboard/index.html",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"file": "landing/index.html",
|
||||
"count": 3
|
||||
}
|
||||
],
|
||||
"totalInnerHtml": 5
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"lintFailures": 13,
|
||||
"filesWithErrors": 10,
|
||||
"sampleErrors": [
|
||||
"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",
|
||||
"25:14 warning 'e' is defined but never used no-unused-vars",
|
||||
"62:22 warning 'e' is defined but never used no-unused-vars",
|
||||
"29:14 warning '_' is assigned a value but never used no-unused-vars"
|
||||
]
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
.scheduler-memory/memory-store.json: 377 lines (excess: 77)
|
||||
TORCH.md: 342 lines (excess: 42)
|
||||
dashboard/index.html: 1044 lines (excess: 744)
|
||||
dashboard/styles.css: 361 lines (excess: 61)
|
||||
landing/index.html: 924 lines (excess: 624)
|
||||
scripts/agent/run-scheduler-cycle.mjs: 1092 lines (excess: 792)
|
||||
scripts/agent/verify-run-artifacts.mjs: 363 lines (excess: 63)
|
||||
src/lib.mjs: 727 lines (excess: 427)
|
||||
src/lock-ops.mjs: 593 lines (excess: 293)
|
||||
src/ops.mjs: 434 lines (excess: 134)
|
||||
src/services/memory/index.js: 428 lines (excess: 128)
|
||||
src/services/memory/pruner.js: 314 lines (excess: 14)
|
||||
src/services/memory/scheduler.js: 318 lines (excess: 18)
|
||||
src/torch-config.mjs: 315 lines (excess: 15)
|
||||
test/lib.test.mjs: 418 lines (excess: 118)
|
||||
test/lock-ops.test.mjs: 395 lines (excess: 95)
|
||||
test/run-scheduler-cycle-memory-policy.test.mjs: 599 lines (excess: 299)
|
||||
test-audit/flakiness-matrix.json: 366 lines (excess: 66)
|
||||
@@ -1,3 +0,0 @@
|
||||
dashboard/index.html: 2 assignments
|
||||
landing/index.html: 3 assignments
|
||||
Total assignments: 5
|
||||
@@ -1,39 +0,0 @@
|
||||
|
||||
> [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/lock-utils.mjs
|
||||
29:14 warning '_' is assigned a value but never used no-unused-vars
|
||||
|
||||
/app/src/ops.mjs
|
||||
341:16 warning 'e' is defined but never used no-unused-vars
|
||||
|
||||
/app/src/services/memory/embedder.js
|
||||
17:28 warning 'text' is defined 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/memory-formatter.test.mjs
|
||||
9:3 warning 'isMemoryRetrievalEnabled' is defined but never used no-unused-vars
|
||||
|
||||
/app/test/nostr-lock.test.mjs
|
||||
1:10 warning 'test' is defined but never used no-unused-vars
|
||||
|
||||
✖ 13 problems (0 errors, 13 warnings)
|
||||
@@ -1,31 +0,0 @@
|
||||
# Audit Report — 2026-02-17 (default branch)
|
||||
|
||||
**Summary**
|
||||
|
||||
* Date: 2026-02-17 18:04 UTC
|
||||
* Node: v22.22.0 / OS: linux
|
||||
|
||||
**Metrics**
|
||||
|
||||
* Oversized files: 18 files (total excess lines: 4010)
|
||||
* Total innerHTML assignments: 5
|
||||
|
||||
* Top offenders:
|
||||
* dashboard/index.html — 2
|
||||
* landing/index.html — 3
|
||||
|
||||
* Lint failures: 13 (files: 10)
|
||||
|
||||
* Example errors:
|
||||
* 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
|
||||
* 25:14 warning 'e' is defined but never used no-unused-vars
|
||||
* 62:22 warning 'e' is defined but never used no-unused-vars
|
||||
* 29:14 warning '_' is assigned a value but never used no-unused-vars
|
||||
|
||||
**Artifacts**
|
||||
|
||||
* file-size-report.json
|
||||
* innerhtml-report.json
|
||||
* lint-report.json
|
||||
* raw logs
|
||||
@@ -1,2 +0,0 @@
|
||||
./scripts/fix-duplication.mjs
|
||||
./src/services/memory/db-adapter.js
|
||||
@@ -1,39 +0,0 @@
|
||||
|
||||
> [email protected] test
|
||||
> node --test test/*.test.mjs
|
||||
|
||||
TAP version 13
|
||||
# Subtest: CLI Smoke Test
|
||||
# Subtest: should print usage when no args provided
|
||||
ok 1 - should print usage when no args provided
|
||||
---
|
||||
duration_ms: 164.342148
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should fail when checking without cadence
|
||||
ok 2 - should fail when checking without cadence
|
||||
---
|
||||
duration_ms: 146.141257
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should include paused agents in check output
|
||||
ok 3 - should include paused agents in check output
|
||||
---
|
||||
duration_ms: 15204.078541
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 1 - CLI Smoke Test
|
||||
---
|
||||
duration_ms: 15516.416385
|
||||
type: 'suite'
|
||||
...
|
||||
1..1
|
||||
# tests 3
|
||||
# suites 1
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 15615.275486
|
||||
@@ -1,39 +0,0 @@
|
||||
|
||||
> [email protected] test
|
||||
> node --test test/*.test.mjs
|
||||
|
||||
TAP version 13
|
||||
# Subtest: CLI Smoke Test
|
||||
# Subtest: should print usage when no args provided
|
||||
ok 1 - should print usage when no args provided
|
||||
---
|
||||
duration_ms: 147.776345
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should fail when checking without cadence
|
||||
ok 2 - should fail when checking without cadence
|
||||
---
|
||||
duration_ms: 147.972417
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should include paused agents in check output
|
||||
ok 3 - should include paused agents in check output
|
||||
---
|
||||
duration_ms: 15197.12841
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 1 - CLI Smoke Test
|
||||
---
|
||||
duration_ms: 15494.825761
|
||||
type: 'suite'
|
||||
...
|
||||
1..1
|
||||
# tests 3
|
||||
# suites 1
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 15604.898805
|
||||
@@ -1,39 +0,0 @@
|
||||
|
||||
> [email protected] test
|
||||
> node --test test/*.test.mjs
|
||||
|
||||
TAP version 13
|
||||
# Subtest: CLI Smoke Test
|
||||
# Subtest: should print usage when no args provided
|
||||
ok 1 - should print usage when no args provided
|
||||
---
|
||||
duration_ms: 183.111536
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should fail when checking without cadence
|
||||
ok 2 - should fail when checking without cadence
|
||||
---
|
||||
duration_ms: 190.338778
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should include paused agents in check output
|
||||
ok 3 - should include paused agents in check output
|
||||
---
|
||||
duration_ms: 15211.189441
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 1 - CLI Smoke Test
|
||||
---
|
||||
duration_ms: 15587.030568
|
||||
type: 'suite'
|
||||
...
|
||||
1..1
|
||||
# tests 3
|
||||
# suites 1
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 15699.937383
|
||||
@@ -1,39 +0,0 @@
|
||||
|
||||
> [email protected] test
|
||||
> node --test test/*.test.mjs
|
||||
|
||||
TAP version 13
|
||||
# Subtest: CLI Smoke Test
|
||||
# Subtest: should print usage when no args provided
|
||||
ok 1 - should print usage when no args provided
|
||||
---
|
||||
duration_ms: 142.251019
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should fail when checking without cadence
|
||||
ok 2 - should fail when checking without cadence
|
||||
---
|
||||
duration_ms: 144.9939
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should include paused agents in check output
|
||||
ok 3 - should include paused agents in check output
|
||||
---
|
||||
duration_ms: 15190.488726
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 1 - CLI Smoke Test
|
||||
---
|
||||
duration_ms: 15479.56569
|
||||
type: 'suite'
|
||||
...
|
||||
1..1
|
||||
# tests 3
|
||||
# suites 1
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 15572.457433
|
||||
@@ -1,39 +0,0 @@
|
||||
|
||||
> [email protected] test
|
||||
> node --test test/*.test.mjs
|
||||
|
||||
TAP version 13
|
||||
# Subtest: CLI Smoke Test
|
||||
# Subtest: should print usage when no args provided
|
||||
ok 1 - should print usage when no args provided
|
||||
---
|
||||
duration_ms: 142.641512
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should fail when checking without cadence
|
||||
ok 2 - should fail when checking without cadence
|
||||
---
|
||||
duration_ms: 143.41358
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should include paused agents in check output
|
||||
ok 3 - should include paused agents in check output
|
||||
---
|
||||
duration_ms: 15193.256229
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 1 - CLI Smoke Test
|
||||
---
|
||||
duration_ms: 15481.218226
|
||||
type: 'suite'
|
||||
...
|
||||
1..1
|
||||
# tests 3
|
||||
# suites 1
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 15574.942449
|
||||
@@ -1,21 +0,0 @@
|
||||
# CI Health Check Report - Sat Feb 14 06:10:49 UTC 2026
|
||||
Running 5 iterations of npm test...
|
||||
## Iteration 1
|
||||
Timestamp: Sat Feb 14 06:10:49 UTC 2026
|
||||
Status: PASSED
|
||||
|
||||
## Iteration 2
|
||||
Timestamp: Sat Feb 14 06:11:05 UTC 2026
|
||||
Status: PASSED
|
||||
|
||||
## Iteration 3
|
||||
Timestamp: Sat Feb 14 06:11:21 UTC 2026
|
||||
Status: PASSED
|
||||
|
||||
## Iteration 4
|
||||
Timestamp: Sat Feb 14 06:11:37 UTC 2026
|
||||
Status: PASSED
|
||||
|
||||
## Iteration 5
|
||||
Timestamp: Sat Feb 14 06:11:53 UTC 2026
|
||||
Status: PASSED
|
||||
@@ -1,4 +0,0 @@
|
||||
src/nostr-lock.mjs
|
||||
src/torch-config.mjs
|
||||
build.mjs
|
||||
test/nostr-lock.test.mjs
|
||||
@@ -1,4 +0,0 @@
|
||||
src/nostr-lock.mjs: Entry point (package.json scripts)
|
||||
src/torch-config.mjs: Imported by src/nostr-lock.mjs
|
||||
build.mjs: Build script (package.json build)
|
||||
test/nostr-lock.test.mjs: Test file (package.json test)
|
||||
@@ -1,2 +0,0 @@
|
||||
scripts/fix-duplication.mjs
|
||||
src/services/memory/db-adapter.js
|
||||
@@ -1,3 +0,0 @@
|
||||
Candidate: src/services/memory/db-adapter.js
|
||||
Evidence: grep -r 'db-adapter' . returned only the file itself. 'createMemoryRepository' is exported but not imported anywhere.
|
||||
Rationale: Unused export, file not imported.
|
||||
@@ -1,3 +0,0 @@
|
||||
Candidate: scripts/fix-duplication.mjs
|
||||
Evidence: grep -r 'fix-duplication' . returned only the file itself.
|
||||
Rationale: Standalone script, not imported, seems one-off.
|
||||
@@ -1,36 +0,0 @@
|
||||
|
||||
> [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/lock-utils.mjs
|
||||
29:14 warning '_' is assigned a value but never used no-unused-vars
|
||||
|
||||
/app/src/ops.mjs
|
||||
338:16 warning 'e' is defined but never used no-unused-vars
|
||||
|
||||
/app/src/services/memory/embedder.js
|
||||
17:28 warning 'text' is defined 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
|
||||
|
||||
✖ 12 problems (0 errors, 12 warnings)
|
||||
@@ -1,175 +0,0 @@
|
||||
|
||||
> [email protected] test:unit:lock-backend
|
||||
> node --test test/lock-ops.test.mjs test/lock-ops-publish-retry.test.mjs
|
||||
|
||||
TAP version 13
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# (node:3760) 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: 7.968017
|
||||
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: 4.052192
|
||||
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.597509
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: short-circuits non-retryable failures without extra attempts
|
||||
ok 4 - short-circuits non-retryable failures without extra attempts
|
||||
---
|
||||
duration_ms: 5.143082
|
||||
type: 'test'
|
||||
...
|
||||
1..4
|
||||
ok 1 - publishLock retry behavior
|
||||
---
|
||||
duration_ms: 25.051826
|
||||
type: 'suite'
|
||||
...
|
||||
# [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)...
|
||||
# [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)...
|
||||
# Published to 2/2 relays (required=1, timeout=200ms)
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-down)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-down)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-down)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-bad)...
|
||||
# [publish:primary] Publishing to 5 relays (relay-timeout, wss://dns, wss://tcp, wss://tls, wss://ws)...
|
||||
# [publish:primary] Publishing to 2 relays (wss://relay-bad, wss://relay-ok)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-bad)...
|
||||
# [publish:fallback] Publishing to 1 relays (wss://fallback-ok)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 2 relays (wss://bad, wss://healthy)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 2 relays (wss://healthy, wss://bad)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 1 relays (wss://healthy)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 1 relays (wss://healthy)...
|
||||
# {"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":1}],"totalElapsedMs":1}
|
||||
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||
# [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)...
|
||||
# [publish:fallback] Publishing to 1 relays (wss://fallback-healthy)...
|
||||
# {"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":1}],"totalElapsedMs":1}
|
||||
# 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: 4.396514
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
ok 1 - parseLockEvent
|
||||
---
|
||||
duration_ms: 6.9509
|
||||
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: 19.306079
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
ok 2 - queryLocks
|
||||
---
|
||||
duration_ms: 19.534904
|
||||
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: 11.113808
|
||||
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: 5.744097
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails without retry for persistent validation failures
|
||||
ok 3 - fails without retry for persistent validation failures
|
||||
---
|
||||
duration_ms: 3.423183
|
||||
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: 3.009087
|
||||
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.594997
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: uses fallback relays to satisfy min success quorum
|
||||
ok 6 - uses fallback relays to satisfy min success quorum
|
||||
---
|
||||
duration_ms: 1.382646
|
||||
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: 3.866976
|
||||
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: 2.56156
|
||||
type: 'test'
|
||||
...
|
||||
1..8
|
||||
ok 3 - publishLock
|
||||
---
|
||||
duration_ms: 34.278329
|
||||
type: 'suite'
|
||||
...
|
||||
1..3
|
||||
ok 2 - lock-ops
|
||||
---
|
||||
duration_ms: 62.352434
|
||||
type: 'suite'
|
||||
...
|
||||
1..2
|
||||
# tests 14
|
||||
# suites 5
|
||||
# pass 14
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 245.037609
|
||||
@@ -1,17 +0,0 @@
|
||||
# Dependency Security Report
|
||||
|
||||
**Date:** 2026-02-17
|
||||
|
||||
## Vulnerabilities
|
||||
Found 4 moderate vulnerabilities in `eslint` stack.
|
||||
- `eslint`, `@eslint/js`, `ajv`, `@eslint-community/eslint-utils`.
|
||||
- **Note**: Current installed version is `^10.0.0`, which exceeds normal registry versions. Investigation needed.
|
||||
|
||||
## Outdated Packages
|
||||
- **nostr-tools**:
|
||||
- Current: 2.19.4
|
||||
- Latest: 2.23.1
|
||||
- **Action**: Skipped auto-upgrade (Protocol Library). Please review manually.
|
||||
|
||||
## Actions Taken
|
||||
- No automatic upgrades performed due to safety constraints.
|
||||
@@ -1,29 +0,0 @@
|
||||
# Design System Audit Report - 2026-02-16
|
||||
|
||||
Headline: ✓ No critical violations (Found usages are foundational or dynamic)
|
||||
|
||||
## 1. Inline Styles / `.style` Usage
|
||||
Found usage of `.style` property for dynamic updates in:
|
||||
- `dashboard/index.html`: `bar.style.width` (Dynamic progress bar)
|
||||
- `landing/index.html`: `btn.style.borderColor`, `btn.style.color` (Copy button feedback)
|
||||
|
||||
These appear to be sanctioned runtime helpers or necessary dynamic DOM manipulations. No static `style="..."` attributes found in source code.
|
||||
|
||||
## 2. Hex Colors
|
||||
Found hex color definitions in `dashboard/styles.css`.
|
||||
These define the CSS variables (tokens) used throughout the application, so they are the source of truth, not violations.
|
||||
|
||||
## 3. Linting Status
|
||||
`npm run lint` completed with warnings but no errors.
|
||||
Warnings related to unused variables in `scripts/agent/smoke-test.mjs`.
|
||||
|
||||
## Next Steps
|
||||
- Continue monitoring for new inline styles.
|
||||
- Consider moving hex definitions to a dedicated `tokens.css` if `styles.css` grows too large.
|
||||
- Add specific design system lint rules if stricter enforcement is needed.
|
||||
|
||||
## Commands Run
|
||||
- `npm run lint`
|
||||
- `grep -r "style=" ...`
|
||||
- `grep -r "\.style" ...`
|
||||
- `grep -rP "#[0-9a-fA-F]{3,6}" ...`
|
||||
@@ -1,33 +0,0 @@
|
||||
# Documentation Alignment Report
|
||||
**Agent:** docs-alignment-agent
|
||||
**Date:** 2026-02-14
|
||||
|
||||
## Audit Summary
|
||||
A comprehensive audit of the repository documentation (`README.md`, `src/docs/TORCH.md`) was performed against the codebase (`bin/torch-lock.mjs`, `src/lib.mjs`, `src/ops.mjs`, `src/torch-config.mjs`).
|
||||
|
||||
The audit revealed that while the core locking commands were documented, several administrative and new commands (init, update, complete, memory operations) were missing from the primary documentation.
|
||||
|
||||
## Claims Map
|
||||
|
||||
| Claim / Feature | Source Doc | Code Implementation | Status | Notes |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| `check` command | `README.md` | `bin/torch-lock.mjs` | ✅ Matches | Correctly documented. |
|
||||
| `lock` command | `README.md` | `bin/torch-lock.mjs` | ✅ Matches | Correctly documented. |
|
||||
| `list` command | `README.md` | `bin/torch-lock.mjs` | ✅ Matches | Correctly documented. |
|
||||
| `dashboard` command | `README.md` | `bin/torch-lock.mjs` | ✅ Matches | Correctly documented. |
|
||||
| `complete` command | `README.md` | `src/lib.mjs` (cmdComplete) | ⚠️ Missing | **Fixed:** Added usage example. |
|
||||
| `init` command | `README.md` | `src/ops.mjs` (cmdInit) | ⚠️ Missing | **Fixed:** Added usage example. |
|
||||
| `update` command | `README.md` | `src/ops.mjs` (cmdUpdate) | ⚠️ Missing | **Fixed:** Added usage example. |
|
||||
| Memory CLI | `README.md` | `bin/torch-lock.mjs` | ⚠️ Missing | **Fixed:** Added `list-memories`, `inspect-memory`, etc. |
|
||||
| Quick Start | `src/docs/TORCH.md` | `bin/torch-lock.mjs` | ⚠️ Outdated | **Fixed:** Updated `node src/nostr-lock.mjs` to `npx torch-lock`. |
|
||||
| Configuration | `README.md` | `src/torch-config.mjs` | ✅ Matches | Config keys align with implementation. |
|
||||
|
||||
## Validation Notes
|
||||
- **Verification Method:** Static code analysis of `bin/torch-lock.mjs` arg parsing and `src/lib.mjs` / `src/ops.mjs` function signatures compared against documentation text.
|
||||
- **Updates Applied:**
|
||||
- `README.md`: Added `complete`, `init`, `update` commands and Memory CLI section.
|
||||
- `src/docs/TORCH.md`: Updated outdated command examples to use the `npx torch-lock` convention.
|
||||
|
||||
## Recommendations
|
||||
- Future updates to the CLI should include a documentation update step in the PR checklist.
|
||||
- Consider auto-generating the CLI usage section from the `bin/torch-lock.mjs` help text (output of `usage()`) to ensure perfect synchronization.
|
||||
@@ -1,3 +0,0 @@
|
||||
# Inventory 2026-02-14
|
||||
|
||||
No /content directory found. Audit skipped.
|
||||
@@ -1,13 +0,0 @@
|
||||
# Inventory - 2026-02-17
|
||||
|
||||
## Scope
|
||||
Audit of `/content` directory for upload/contribution docs.
|
||||
|
||||
## Findings
|
||||
- **Missing Directory**: The `/content` directory does not exist in the repository root.
|
||||
- **Impact**: Unable to verify claims about upload functionality or contribution guidelines in `/content`.
|
||||
- **Status**: Failed to inventory due to missing target.
|
||||
|
||||
## Recommendations
|
||||
- Verify if `/content` is the intended target or if documentation resides elsewhere (e.g., `src/docs`).
|
||||
- Update `content-audit-agent` prompt to reflect the correct directory structure.
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"generated_at": "2026-02-15T23:19:39.826Z",
|
||||
"total_errors": 0,
|
||||
"groups": []
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"target": "parseLockEvent (src/lib.mjs)",
|
||||
"date": "2026-02-14",
|
||||
"seed": 1739523214000,
|
||||
"iterations": 10000,
|
||||
"failures": [
|
||||
{
|
||||
"id": "repro-1270",
|
||||
"error": "TypeError: Cannot read properties of null (reading 'agent')",
|
||||
"classification": "crash",
|
||||
"description": "JSON.parse('null') returns null, causing property access on null."
|
||||
}
|
||||
],
|
||||
"fix": "Added validation to ensure parsed content is a non-array object.",
|
||||
"status": "fixed"
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"target": "parseLockEvent",
|
||||
"seed": 12345,
|
||||
"iterations": 10000,
|
||||
"failures": []
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
# Daily Remediation Report - 2026-02-14
|
||||
|
||||
## Summary
|
||||
- **Status:** ⚠️ Active issues remain
|
||||
- **Verified:** 0 existing issues (KNOWN_ISSUES.md was empty).
|
||||
- **New Issues:** 1 found.
|
||||
|
||||
## Issues Found
|
||||
1. **`npm test` fails due to prompt contract violations**:
|
||||
- `npm test` runs `npm run validate:scheduler`, which flags multiple agents for missing `lock:complete` tokens.
|
||||
- `known-issues-agent` also failed validation.
|
||||
- Added to `KNOWN_ISSUES.md`.
|
||||
|
||||
## Actions
|
||||
- Updated `KNOWN_ISSUES.md` with the new issue.
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"timestamp": "2026-02-14T23:55:50.974Z",
|
||||
"config": {
|
||||
"relayUrl": "N/A (Dry Run)",
|
||||
"clients": 1000,
|
||||
"durationSec": 5,
|
||||
"rateEps": 10,
|
||||
"mix": 0.9
|
||||
},
|
||||
"summary": {
|
||||
"totalEventsAttempted": 50,
|
||||
"totalEventsSuccess": 50,
|
||||
"totalEventsFailed": 0,
|
||||
"throughputEps": 10,
|
||||
"latencies": {
|
||||
"p50": 36,
|
||||
"p90": 54,
|
||||
"p95": 56,
|
||||
"p99": 59
|
||||
}
|
||||
},
|
||||
"errors": {}
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
{
|
||||
"auditReportVersion": 2,
|
||||
"vulnerabilities": {
|
||||
"@eslint-community/eslint-utils": {
|
||||
"name": "@eslint-community/eslint-utils",
|
||||
"severity": "moderate",
|
||||
"isDirect": false,
|
||||
"via": [
|
||||
"eslint"
|
||||
],
|
||||
"effects": [
|
||||
"eslint"
|
||||
],
|
||||
"range": "*",
|
||||
"nodes": [
|
||||
"node_modules/@eslint-community/eslint-utils"
|
||||
],
|
||||
"fixAvailable": {
|
||||
"name": "eslint",
|
||||
"version": "4.1.1",
|
||||
"isSemVerMajor": true
|
||||
}
|
||||
},
|
||||
"@eslint/js": {
|
||||
"name": "@eslint/js",
|
||||
"severity": "moderate",
|
||||
"isDirect": true,
|
||||
"via": [
|
||||
"eslint"
|
||||
],
|
||||
"effects": [],
|
||||
"range": ">=10.0.1",
|
||||
"nodes": [
|
||||
"node_modules/@eslint/js"
|
||||
],
|
||||
"fixAvailable": {
|
||||
"name": "@eslint/js",
|
||||
"version": "9.39.2",
|
||||
"isSemVerMajor": true
|
||||
}
|
||||
},
|
||||
"ajv": {
|
||||
"name": "ajv",
|
||||
"severity": "moderate",
|
||||
"isDirect": false,
|
||||
"via": [
|
||||
{
|
||||
"source": 1113214,
|
||||
"name": "ajv",
|
||||
"dependency": "ajv",
|
||||
"title": "ajv has ReDoS when using `$data` option",
|
||||
"url": "https://github.com/advisories/GHSA-2g4f-4pwh-qvx6",
|
||||
"severity": "moderate",
|
||||
"cwe": [
|
||||
"CWE-400"
|
||||
],
|
||||
"cvss": {
|
||||
"score": 0,
|
||||
"vectorString": null
|
||||
},
|
||||
"range": "<8.18.0"
|
||||
}
|
||||
],
|
||||
"effects": [
|
||||
"eslint"
|
||||
],
|
||||
"range": "<8.18.0",
|
||||
"nodes": [
|
||||
"node_modules/ajv"
|
||||
],
|
||||
"fixAvailable": {
|
||||
"name": "eslint",
|
||||
"version": "4.1.1",
|
||||
"isSemVerMajor": true
|
||||
}
|
||||
},
|
||||
"eslint": {
|
||||
"name": "eslint",
|
||||
"severity": "moderate",
|
||||
"isDirect": true,
|
||||
"via": [
|
||||
"@eslint-community/eslint-utils",
|
||||
"ajv"
|
||||
],
|
||||
"effects": [
|
||||
"@eslint-community/eslint-utils",
|
||||
"@eslint/js"
|
||||
],
|
||||
"range": ">=4.2.0",
|
||||
"nodes": [
|
||||
"node_modules/eslint"
|
||||
],
|
||||
"fixAvailable": {
|
||||
"name": "eslint",
|
||||
"version": "4.1.1",
|
||||
"isSemVerMajor": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"vulnerabilities": {
|
||||
"info": 0,
|
||||
"low": 0,
|
||||
"moderate": 4,
|
||||
"high": 0,
|
||||
"critical": 0,
|
||||
"total": 4
|
||||
},
|
||||
"dependencies": {
|
||||
"prod": 12,
|
||||
"dev": 76,
|
||||
"optional": 1,
|
||||
"peer": 0,
|
||||
"peerOptional": 0,
|
||||
"total": 87
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"nostr-tools": {
|
||||
"current": "2.19.4",
|
||||
"wanted": "2.19.4",
|
||||
"latest": "2.23.1",
|
||||
"dependent": "app",
|
||||
"location": "/app/node_modules/nostr-tools"
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
# Onboarding Audit Report
|
||||
|
||||
**Date:** 2026-02-16
|
||||
**Agent:** onboarding-audit-agent
|
||||
|
||||
## Headline
|
||||
⚠️ Onboarding failures found
|
||||
|
||||
## Environment
|
||||
- **Platform:** Jules Sandbox (Linux)
|
||||
- **Node Version:** v22.22.0
|
||||
- **npm Version:** 11.10.0
|
||||
|
||||
## Steps Executed
|
||||
1. `npm ci`
|
||||
2. `npm run build`
|
||||
3. `npm test`
|
||||
4. `npm run lint`
|
||||
|
||||
## Results
|
||||
|
||||
| Command | Result | Exit Code | Notes |
|
||||
|---------|--------|-----------|-------|
|
||||
| `npm ci` | Pass | 0 | Installed dependencies cleanly. |
|
||||
| `npm run build` | Pass | 0 | Build output to `dist/`. |
|
||||
| `npm test` | **Fail** | Timeout | Command timed out after 400s. |
|
||||
| `npm run lint` | Pass | 0 | 12 warnings found (no errors). |
|
||||
|
||||
## Failures
|
||||
|
||||
### `npm test` Timeout
|
||||
The command `npm test` (which runs `npm run validate:scheduler && npm run test:integration:e2e && node --test test/*.test.mjs tests/*.test.js`) timed out after 401 seconds.
|
||||
|
||||
**Investigation:**
|
||||
- `npm run validate:scheduler` passed (200ms).
|
||||
- `npm run test:integration:e2e` passed (692ms).
|
||||
- `node --test test/*.test.mjs tests/*.test.js` is the likely cause of the timeout.
|
||||
- Individual runs of `test/lock-ops.test.mjs`, `test/lock-ops-publish-retry.test.mjs`, `test/relay-fanout-quorum.integration.test.mjs`, `test/lock-acquisition-resilience.integration.test.mjs`, and `tests/memory.test.js` all passed quickly.
|
||||
- The timeout suggests either a deadlock or extreme slowness when running the full suite in this environment.
|
||||
|
||||
### Lint Warnings
|
||||
`npm run lint` passed but emitted 12 warnings (mostly `no-unused-vars`). These should be addressed but did not break the build.
|
||||
|
||||
## Recommendations
|
||||
1. **Investigate Test Suite Performance:** The test suite takes too long or hangs in the sandbox environment. Investigate `test/*.test.mjs` for potential deadlocks or resource contention.
|
||||
2. **Address Lint Warnings:** Clean up unused variables to keep the codebase clean.
|
||||
3. **Docs Update:** No documentation changes required as the commands are correct, but the execution reliability needs improvement.
|
||||
|
||||
## Actions Taken
|
||||
- Verified individual test files passed.
|
||||
- Recorded full timeout failure.
|
||||
@@ -1,26 +0,0 @@
|
||||
|
||||
> [email protected] lint
|
||||
> eslint .
|
||||
|
||||
|
||||
/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
|
||||
50:14 warning '_' is assigned a value 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
|
||||
268:11 warning 'mockPublishLock' is assigned a value but never used no-unused-vars
|
||||
|
||||
/app/test/lock-ops.test.mjs
|
||||
1:10 warning 'test' is defined but never used no-unused-vars
|
||||
|
||||
/app/test/nostr-lock.test.mjs
|
||||
1:10 warning 'test' is defined but never used no-unused-vars
|
||||
|
||||
/app/test/torch-config.test.mjs
|
||||
1:10 warning 'test' is defined but never used no-unused-vars
|
||||
|
||||
✖ 8 problems (0 errors, 8 warnings)
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"message": "Not Found",
|
||||
"documentation_url": "https://docs.github.com/rest/pulls/pulls#list-pull-requests",
|
||||
"status": "404"
|
||||
}
|
||||
PR check completed (likely failed/empty due to no auth/repo info).
|
||||
@@ -1,55 +0,0 @@
|
||||
# PR Review Audit Log - 2026-02-14
|
||||
|
||||
## PR Enumeration
|
||||
{
|
||||
"message": "Not Found",
|
||||
"documentation_url": "https://docs.github.com/rest/pulls/pulls#list-pull-requests",
|
||||
"status": "404"
|
||||
}
|
||||
PR check completed (likely failed/empty due to no auth/repo info).
|
||||
|
||||
## Baseline Verification
|
||||
### Lint Status
|
||||
|
||||
> [email protected] lint
|
||||
> eslint .
|
||||
|
||||
|
||||
/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
|
||||
50:14 warning '_' is assigned a value 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
|
||||
268:11 warning 'mockPublishLock' is assigned a value but never used no-unused-vars
|
||||
|
||||
/app/test/lock-ops.test.mjs
|
||||
1:10 warning 'test' is defined but never used no-unused-vars
|
||||
|
||||
/app/test/nostr-lock.test.mjs
|
||||
1:10 warning 'test' is defined but never used no-unused-vars
|
||||
|
||||
/app/test/torch-config.test.mjs
|
||||
1:10 warning 'test' is defined but never used no-unused-vars
|
||||
|
||||
✖ 8 problems (0 errors, 8 warnings)
|
||||
|
||||
### Test Status
|
||||
...
|
||||
1..13
|
||||
# tests 61
|
||||
# suites 16
|
||||
# pass 61
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 1721.810365
|
||||
|
||||
## Summary
|
||||
- **PRs Reviewed:** 0 (Enumeration failed or no PRs accessible)
|
||||
- **Lint Check:** ✅ Passed
|
||||
- **Test Suite:** ✅ Passed
|
||||
@@ -1,600 +0,0 @@
|
||||
|
||||
> [email protected] test
|
||||
> node --test test/*.test.mjs
|
||||
|
||||
TAP version 13
|
||||
# Subtest: src/lib.mjs
|
||||
# Subtest: cmdCheck
|
||||
# Subtest: returns correct structure with empty locks
|
||||
ok 1 - returns correct structure with empty locks
|
||||
---
|
||||
duration_ms: 11.041212
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: identifies locked agents
|
||||
ok 2 - identifies locked agents
|
||||
---
|
||||
duration_ms: 0.760284
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: excludes paused agents
|
||||
ok 3 - excludes paused agents
|
||||
---
|
||||
duration_ms: 0.822208
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: identifies unknown locked agents
|
||||
ok 4 - identifies unknown locked agents
|
||||
---
|
||||
duration_ms: 0.85916
|
||||
type: 'test'
|
||||
...
|
||||
1..4
|
||||
ok 1 - cmdCheck
|
||||
---
|
||||
duration_ms: 15.580149
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: cmdLock
|
||||
# Subtest: successfully locks an available agent
|
||||
ok 1 - successfully locks an available agent
|
||||
---
|
||||
duration_ms: 11.410628
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if agent is not in roster
|
||||
ok 2 - fails if agent is not in roster
|
||||
---
|
||||
duration_ms: 1.39463
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if agent is already locked
|
||||
ok 3 - fails if agent is already locked
|
||||
---
|
||||
duration_ms: 1.114336
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if agent is already completed
|
||||
ok 4 - fails if agent is already completed
|
||||
---
|
||||
duration_ms: 0.724132
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if race check is lost
|
||||
ok 5 - fails if race check is lost
|
||||
---
|
||||
duration_ms: 7.492092
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: dry run does not publish
|
||||
ok 6 - dry run does not publish
|
||||
---
|
||||
duration_ms: 0.706617
|
||||
type: 'test'
|
||||
...
|
||||
1..6
|
||||
ok 2 - cmdLock
|
||||
---
|
||||
duration_ms: 24.08577
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: cmdList
|
||||
# Subtest: lists active locks
|
||||
ok 1 - lists active locks
|
||||
---
|
||||
duration_ms: 0.83374
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: warns about unknown agents
|
||||
ok 2 - warns about unknown agents
|
||||
---
|
||||
duration_ms: 0.496584
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: handles no locks
|
||||
ok 3 - handles no locks
|
||||
---
|
||||
duration_ms: 0.326104
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 3 - cmdList
|
||||
---
|
||||
duration_ms: 1.892244
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: cmdComplete
|
||||
# Subtest: successfully completes an active lock
|
||||
ok 1 - successfully completes an active lock
|
||||
---
|
||||
duration_ms: 1.080992
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if no active lock found
|
||||
ok 2 - fails if no active lock found
|
||||
---
|
||||
duration_ms: 0.500767
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: detects already completed task
|
||||
ok 3 - detects already completed task
|
||||
---
|
||||
duration_ms: 0.32976
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 4 - cmdComplete
|
||||
---
|
||||
duration_ms: 2.110436
|
||||
type: 'suite'
|
||||
...
|
||||
1..4
|
||||
ok 1 - src/lib.mjs
|
||||
---
|
||||
duration_ms: 45.03511
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: parseLockEvent
|
||||
# Subtest: should parse a valid lock event correctly
|
||||
ok 1 - should parse a valid lock event correctly
|
||||
---
|
||||
duration_ms: 3.976866
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should handle missing d tag
|
||||
ok 2 - should handle missing d tag
|
||||
---
|
||||
duration_ms: 0.478869
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should handle missing expiration tag
|
||||
ok 3 - should handle missing expiration tag
|
||||
---
|
||||
duration_ms: 0.270815
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should handle malformed JSON content
|
||||
ok 4 - should handle malformed JSON content
|
||||
---
|
||||
duration_ms: 0.436994
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should handle non-object JSON content (string)
|
||||
ok 5 - should handle non-object JSON content (string)
|
||||
---
|
||||
duration_ms: 0.226085
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should handle non-object JSON content (array)
|
||||
ok 6 - should handle non-object JSON content (array)
|
||||
---
|
||||
duration_ms: 0.207773
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should handle partial JSON content
|
||||
ok 7 - should handle partial JSON content
|
||||
---
|
||||
duration_ms: 0.260396
|
||||
type: 'test'
|
||||
...
|
||||
1..7
|
||||
ok 2 - parseLockEvent
|
||||
---
|
||||
duration_ms: 7.871324
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: CLI Smoke Test
|
||||
# Subtest: should print usage when no args provided
|
||||
ok 1 - should print usage when no args provided
|
||||
---
|
||||
duration_ms: 214.629961
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should fail when checking without cadence
|
||||
ok 2 - should fail when checking without cadence
|
||||
---
|
||||
duration_ms: 210.477652
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should include paused agents in check output
|
||||
ok 3 - should include paused agents in check output
|
||||
---
|
||||
duration_ms: 1002.85269
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 3 - CLI Smoke Test
|
||||
---
|
||||
duration_ms: 1429.608541
|
||||
type: 'suite'
|
||||
...
|
||||
# Initializing torch configuration in /app/test-ops-TxOxDw/project1/torch...
|
||||
# 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 torch/scripts/check-file-size.mjs
|
||||
# Created torch/scripts/check-innerhtml.mjs
|
||||
# Created 22 files in torch/prompts/daily/
|
||||
# Created 19 files in torch/prompts/weekly/
|
||||
# Initialization complete.
|
||||
# You can now customize the files in torch/ and torch/prompts/.
|
||||
# Initializing torch configuration in /app/test-ops-TxOxDw/project2/torch...
|
||||
# Initializing torch configuration in /app/test-ops-TxOxDw/project3/torch...
|
||||
# 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 torch/scripts/check-file-size.mjs
|
||||
# Created torch/scripts/check-innerhtml.mjs
|
||||
# Created 22 files in torch/prompts/daily/
|
||||
# Created 19 files in torch/prompts/weekly/
|
||||
# Initialization complete.
|
||||
# You can now customize the files in torch/ and torch/prompts/.
|
||||
# Updating torch configuration in /app/test-ops-TxOxDw/project3/torch...
|
||||
# Creating backup at torch/_backups/backup_2026-02-14T19-23-09-502Z...
|
||||
# Updating static files...
|
||||
# Updated META_PROMPTS.md
|
||||
# Updated scheduler-flow.md
|
||||
# Updated daily-scheduler.md
|
||||
# Updated weekly-scheduler.md
|
||||
# Skipped roster.json (preserved)
|
||||
# Updating scripts...
|
||||
# Skipped check-file-size.mjs (preserved)
|
||||
# Skipped check-innerhtml.mjs (preserved)
|
||||
# Updating prompts...
|
||||
# daily/: 0 added, 0 updated, 22 preserved
|
||||
# weekly/: 0 added, 0 updated, 19 preserved
|
||||
# Update complete.
|
||||
# Initializing torch configuration in /app/test-ops-TxOxDw/project4/torch...
|
||||
# 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 torch/scripts/check-file-size.mjs
|
||||
# Created torch/scripts/check-innerhtml.mjs
|
||||
# Created 22 files in torch/prompts/daily/
|
||||
# Created 19 files in torch/prompts/weekly/
|
||||
# Initialization complete.
|
||||
# You can now customize the files in torch/ and torch/prompts/.
|
||||
# Updating torch configuration in /app/test-ops-TxOxDw/project4/torch...
|
||||
# Creating backup at torch/_backups/backup_2026-02-14T19-23-09-555Z...
|
||||
# Updating static files...
|
||||
# Updated META_PROMPTS.md
|
||||
# Updated scheduler-flow.md
|
||||
# Updated daily-scheduler.md
|
||||
# Updated weekly-scheduler.md
|
||||
# Overwrote roster.json (forced)
|
||||
# Updating scripts...
|
||||
# Updated check-file-size.mjs (forced)
|
||||
# Updated check-innerhtml.mjs (forced)
|
||||
# Updating prompts...
|
||||
# daily/: 0 added, 22 updated, 0 preserved
|
||||
# weekly/: 0 added, 19 updated, 0 preserved
|
||||
# Update complete.
|
||||
# Initializing torch configuration in /app/test-ops-TxOxDw/project5/torch...
|
||||
# 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 torch/scripts/check-file-size.mjs
|
||||
# Created torch/scripts/check-innerhtml.mjs
|
||||
# Created 22 files in torch/prompts/daily/
|
||||
# Created 19 files in torch/prompts/weekly/
|
||||
# Initialization complete.
|
||||
# You can now customize the files in torch/ and torch/prompts/.
|
||||
# Updating torch configuration in /app/test-ops-TxOxDw/project5/torch...
|
||||
# Creating backup at torch/_backups/backup_2026-02-14T19-23-09-617Z...
|
||||
# Updating static files...
|
||||
# Updated META_PROMPTS.md
|
||||
# Updated scheduler-flow.md
|
||||
# Updated daily-scheduler.md
|
||||
# Updated weekly-scheduler.md
|
||||
# Skipped roster.json (preserved)
|
||||
# Updating scripts...
|
||||
# Skipped check-file-size.mjs (preserved)
|
||||
# Skipped check-innerhtml.mjs (preserved)
|
||||
# Updating prompts...
|
||||
# daily/: 0 added, 0 updated, 22 preserved
|
||||
# weekly/: 0 added, 0 updated, 19 preserved
|
||||
# Update complete.
|
||||
# Initializing torch configuration in /app/test-ops-TxOxDw/project_roster/torch...
|
||||
# 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 torch/scripts/check-file-size.mjs
|
||||
# Created torch/scripts/check-innerhtml.mjs
|
||||
# Created 22 files in torch/prompts/daily/
|
||||
# Created 19 files in torch/prompts/weekly/
|
||||
# Initialization complete.
|
||||
# You can now customize the files in torch/ and torch/prompts/.
|
||||
# Checking locks: namespace=torch, cadence=daily, date=2026-02-14
|
||||
# Relays: wss://relay.damus.io, wss://nos.lol, wss://relay.primal.net
|
||||
# Subtest: cmdInit creates directory structure and files
|
||||
ok 4 - cmdInit creates directory structure and files
|
||||
---
|
||||
duration_ms: 38.939852
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: cmdInit fails if directory exists without force
|
||||
ok 5 - cmdInit fails if directory exists without force
|
||||
---
|
||||
duration_ms: 1.385876
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: cmdUpdate preserves modified prompt
|
||||
ok 6 - cmdUpdate preserves modified prompt
|
||||
---
|
||||
duration_ms: 50.406001
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: cmdUpdate overwrites prompt with force
|
||||
ok 7 - cmdUpdate overwrites prompt with force
|
||||
---
|
||||
duration_ms: 59.092881
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: cmdUpdate creates backup
|
||||
ok 8 - cmdUpdate creates backup
|
||||
---
|
||||
duration_ms: 59.382969
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: torch-lock check respects local roster
|
||||
ok 9 - torch-lock check respects local roster
|
||||
---
|
||||
duration_ms: 1074.410444
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: Scheduler Ratchet Logic (Log Checking)
|
||||
# Subtest: excludes agents completed today (daily)
|
||||
ok 1 - excludes agents completed today (daily)
|
||||
---
|
||||
duration_ms: 3.8002
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: excludes agents completed this week (weekly)
|
||||
ok 2 - excludes agents completed this week (weekly)
|
||||
---
|
||||
duration_ms: 0.632534
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: combines locked and completed agents in exclusion list
|
||||
ok 3 - combines locked and completed agents in exclusion list
|
||||
---
|
||||
duration_ms: 0.722645
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: ignores logs when --ignore-logs is set
|
||||
ok 4 - ignores logs when --ignore-logs is set
|
||||
---
|
||||
duration_ms: 0.418629
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: handles missing log directory gracefully
|
||||
ok 5 - handles missing log directory gracefully
|
||||
---
|
||||
duration_ms: 0.463313
|
||||
type: 'test'
|
||||
...
|
||||
1..5
|
||||
ok 10 - Scheduler Ratchet Logic (Log Checking)
|
||||
---
|
||||
duration_ms: 8.325635
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: loadTorchConfig (Unit Tests with Mocked FS)
|
||||
# Subtest: loads valid config correctly
|
||||
ok 1 - loads valid config correctly
|
||||
---
|
||||
duration_ms: 4.439239
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: returns default config when file is missing
|
||||
ok 2 - returns default config when file is missing
|
||||
---
|
||||
duration_ms: 0.43711
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: throws error on malformed JSON
|
||||
ok 3 - throws error on malformed JSON
|
||||
---
|
||||
duration_ms: 1.046315
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: caches the config and ignores subsequent fs calls
|
||||
ok 4 - caches the config and ignores subsequent fs calls
|
||||
---
|
||||
duration_ms: 0.765738
|
||||
type: 'test'
|
||||
...
|
||||
1..4
|
||||
ok 11 - loadTorchConfig (Unit Tests with Mocked FS)
|
||||
---
|
||||
duration_ms: 8.445371
|
||||
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.605283
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: returns custom path when env var is set
|
||||
ok 2 - returns custom path when env var is set
|
||||
---
|
||||
duration_ms: 0.753996
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: trims env var value
|
||||
ok 3 - trims env var value
|
||||
---
|
||||
duration_ms: 0.402756
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 1 - getTorchConfigPath
|
||||
---
|
||||
duration_ms: 5.989088
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: parseTorchConfig
|
||||
# Subtest: returns default values for empty raw config
|
||||
ok 1 - returns default values for empty raw config
|
||||
---
|
||||
duration_ms: 2.801311
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: correctly parses and normalizes nostrLock config
|
||||
ok 2 - correctly parses and normalizes nostrLock config
|
||||
---
|
||||
duration_ms: 1.217618
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: normalizes cadence and status in dashboard config
|
||||
ok 3 - normalizes cadence and status in dashboard config
|
||||
---
|
||||
duration_ms: 0.448055
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: falls back to defaults for invalid cadence/status
|
||||
ok 4 - falls back to defaults for invalid cadence/status
|
||||
---
|
||||
duration_ms: 0.688954
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: correctly parses scheduler config
|
||||
ok 5 - correctly parses scheduler config
|
||||
---
|
||||
duration_ms: 0.714744
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: handles non-array roster values by returning null or empty array
|
||||
ok 6 - handles non-array roster values by returning null or empty array
|
||||
---
|
||||
duration_ms: 1.026327
|
||||
type: 'test'
|
||||
...
|
||||
1..6
|
||||
ok 2 - parseTorchConfig
|
||||
---
|
||||
duration_ms: 9.912879
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: loadTorchConfig
|
||||
# Subtest: loads config from disk
|
||||
ok 1 - loads config from disk
|
||||
---
|
||||
duration_ms: 3.702332
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: returns defaults if file does not exist
|
||||
ok 2 - returns defaults if file does not exist
|
||||
---
|
||||
duration_ms: 7.053093
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: throws error for malformed JSON
|
||||
ok 3 - throws error for malformed JSON
|
||||
---
|
||||
duration_ms: 1.732978
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: caches the config
|
||||
ok 4 - caches the config
|
||||
---
|
||||
duration_ms: 1.19094
|
||||
type: 'test'
|
||||
...
|
||||
1..4
|
||||
ok 3 - loadTorchConfig
|
||||
---
|
||||
duration_ms: 14.502
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: getRelays
|
||||
# Subtest: returns default relays when no config or env var is set
|
||||
ok 1 - returns default relays when no config or env var is set
|
||||
---
|
||||
duration_ms: 0.652639
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: returns relays from env var if set
|
||||
ok 2 - returns relays from env var if set
|
||||
---
|
||||
duration_ms: 0.49769
|
||||
type: 'test'
|
||||
...
|
||||
1..2
|
||||
ok 4 - getRelays
|
||||
---
|
||||
duration_ms: 1.417182
|
||||
type: 'suite'
|
||||
...
|
||||
1..4
|
||||
ok 12 - torch-config
|
||||
---
|
||||
duration_ms: 34.842305
|
||||
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.352074
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: handles year boundaries correctly
|
||||
ok 2 - handles year boundaries correctly
|
||||
---
|
||||
duration_ms: 0.236274
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: handles leap years
|
||||
ok 3 - handles leap years
|
||||
---
|
||||
duration_ms: 1.711613
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: handles empty input (defaults to today)
|
||||
ok 4 - handles empty input (defaults to today)
|
||||
---
|
||||
duration_ms: 0.4444
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: handles invalid input gracefully
|
||||
ok 5 - handles invalid input gracefully
|
||||
---
|
||||
duration_ms: 0.259293
|
||||
type: 'test'
|
||||
...
|
||||
1..5
|
||||
ok 1 - getIsoWeekStr
|
||||
---
|
||||
duration_ms: 5.292184
|
||||
type: 'suite'
|
||||
...
|
||||
1..1
|
||||
ok 13 - Date Utilities
|
||||
---
|
||||
duration_ms: 5.978593
|
||||
type: 'suite'
|
||||
...
|
||||
1..13
|
||||
# tests 61
|
||||
# suites 16
|
||||
# pass 61
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 1721.810365
|
||||
@@ -1,247 +0,0 @@
|
||||
# Prompt Safety Audit Report - 2026-02-15
|
||||
|
||||
## Summary
|
||||
- Total Prompts: 41
|
||||
- Safe Prompts: 17
|
||||
- Prompts Needing Improvement: 24
|
||||
|
||||
## Prompts Needing Improvement
|
||||
|
||||
### audit-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has conditional stop logic
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### const-refactor-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### content-audit-agent
|
||||
**Issues:**
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has FAILURE MODES section
|
||||
|
||||
---
|
||||
### decompose-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has conditional stop logic
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### deps-security-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### design-system-audit-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has conditional stop logic
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### docs-code-investigator
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has conditional stop logic
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### innerhtml-migration-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has conditional stop logic
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### log-fixer-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- None detected
|
||||
|
||||
---
|
||||
### perf-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### protocol-research-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- None detected
|
||||
|
||||
---
|
||||
### test-audit-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- None detected
|
||||
|
||||
---
|
||||
### todo-triage-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- None detected
|
||||
|
||||
---
|
||||
### torch-garbage-collection-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has conditional stop logic
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### bug-reproducer-agent
|
||||
**Issues:**
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has FAILURE MODES section
|
||||
|
||||
---
|
||||
### feature-proposer-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- None detected
|
||||
|
||||
---
|
||||
### perf-deepdive-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- None detected
|
||||
|
||||
---
|
||||
### pr-review-agent
|
||||
**Issues:**
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has FAILURE MODES section
|
||||
|
||||
---
|
||||
### prompt-maintenance-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- None detected
|
||||
|
||||
---
|
||||
### race-condition-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### repo-fit-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- None detected
|
||||
|
||||
---
|
||||
### test-coverage-agent
|
||||
**Issues:**
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has FAILURE MODES section
|
||||
|
||||
---
|
||||
### ui-ux-agent
|
||||
**Issues:**
|
||||
- Missing explicit FAILURE MODES or EXIT CRITERIA section
|
||||
- No clear conditional stop/exit logic found
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Allows no-op/stopping
|
||||
|
||||
---
|
||||
### weekly-synthesis-agent
|
||||
**Issues:**
|
||||
- Does not clearly explicitly allow for no-op/stopping
|
||||
|
||||
**Existing Safety Features:**
|
||||
- Has FAILURE MODES section
|
||||
|
||||
---
|
||||
## Safe Prompts
|
||||
|
||||
- ci-health-agent
|
||||
- docs-agent
|
||||
- docs-alignment-agent
|
||||
- known-issues-agent
|
||||
- load-test-agent
|
||||
- onboarding-audit-agent
|
||||
- scheduler-update-agent
|
||||
- style-agent
|
||||
- changelog-agent
|
||||
- dead-code-agent
|
||||
- frontend-console-debug-agent
|
||||
- fuzz-agent
|
||||
- perf-optimization-agent
|
||||
- prompt-safety-agent
|
||||
- refactor-agent
|
||||
- smoke-agent
|
||||
- telemetry-agent
|
||||
@@ -1,15 +0,0 @@
|
||||
# npm test timeout reproduction
|
||||
|
||||
## Issue
|
||||
`npm test` hangs/times out in full suite run. It takes over 400s and times out in sandbox environment.
|
||||
|
||||
## Reproduction
|
||||
This directory contains a script `repro.sh` that attempts to run `npm test` and times out after 30s to demonstrate the issue without waiting the full duration.
|
||||
|
||||
## Run
|
||||
```bash
|
||||
bash artifacts/reproducers/npm-test-timeout/repro.sh
|
||||
```
|
||||
|
||||
## Logs
|
||||
Output is captured in `npm_test_output.log`.
|
||||
@@ -1,805 +0,0 @@
|
||||
|
||||
> [email protected] test
|
||||
> npm run validate:scheduler && npm run test:integration:e2e && node --test test/*.test.mjs tests/*.test.js
|
||||
|
||||
|
||||
> [email protected] 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.
|
||||
|
||||
> [email protected] 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: 161.154264
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: schema contract catches missing required lock-backend field
|
||||
ok 2 - schema contract catches missing required lock-backend field
|
||||
---
|
||||
duration_ms: 2.871179
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: schema contract catches misnamed lock-backend key
|
||||
ok 3 - schema contract catches misnamed lock-backend key
|
||||
---
|
||||
duration_ms: 0.834819
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
# tests 3
|
||||
# suites 0
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 318.644346
|
||||
|
||||
> [email protected] 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: 452.810254
|
||||
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: 102.636238
|
||||
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: 180.269665
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
# tests 3
|
||||
# suites 0
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 824.280539
|
||||
TAP version 13
|
||||
# Subtest: Build artifacts verification
|
||||
# Subtest: dist directory exists
|
||||
not ok 1 - dist directory exists
|
||||
---
|
||||
duration_ms: 1.943115
|
||||
type: 'test'
|
||||
location: '/app/test/build_verification.test.mjs:9:11'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
dist directory should exist
|
||||
|
||||
false !== true
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected: true
|
||||
actual: false
|
||||
operator: 'strictEqual'
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///app/test/build_verification.test.mjs:10:12)
|
||||
Test.runInAsyncScope (node:async_hooks:214:14)
|
||||
Test.run (node:internal/test_runner/test:1047:25)
|
||||
Test.start (node:internal/test_runner/test:944:17)
|
||||
TestContext.test (node:internal/test_runner/test:373:20)
|
||||
TestContext.<anonymous> (file:///app/test/build_verification.test.mjs:9:11)
|
||||
Test.runInAsyncScope (node:async_hooks:214:14)
|
||||
Test.run (node:internal/test_runner/test:1047:25)
|
||||
Test.start (node:internal/test_runner/test:944:17)
|
||||
startSubtestAfterBootstrap (node:internal/test_runner/harness:296:17)
|
||||
...
|
||||
# Subtest: Critical files exist in dist
|
||||
not ok 2 - Critical files exist in dist
|
||||
---
|
||||
duration_ms: 0.501843
|
||||
type: 'test'
|
||||
location: '/app/test/build_verification.test.mjs:13:11'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
File index.html should exist in dist
|
||||
|
||||
false !== true
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected: true
|
||||
actual: false
|
||||
operator: 'strictEqual'
|
||||
stack: |-
|
||||
file:///app/test/build_verification.test.mjs:25:14
|
||||
Array.forEach (<anonymous>)
|
||||
TestContext.<anonymous> (file:///app/test/build_verification.test.mjs:23:19)
|
||||
Test.runInAsyncScope (node:async_hooks:214:14)
|
||||
Test.run (node:internal/test_runner/test:1047:25)
|
||||
Test.start (node:internal/test_runner/test:944:17)
|
||||
TestContext.test (node:internal/test_runner/test:373:20)
|
||||
TestContext.<anonymous> (file:///app/test/build_verification.test.mjs:13:11)
|
||||
async Test.run (node:internal/test_runner/test:1054:7)
|
||||
async startSubtestAfterBootstrap (node:internal/test_runner/harness:296:3)
|
||||
...
|
||||
# Subtest: TORCH.md content is not empty
|
||||
not ok 3 - TORCH.md content is not empty
|
||||
---
|
||||
duration_ms: 0.240573
|
||||
type: 'test'
|
||||
location: '/app/test/build_verification.test.mjs:29:11'
|
||||
failureType: 'testCodeFailure'
|
||||
error: "ENOENT: no such file or directory, open '/app/dist/src/docs/TORCH.md'"
|
||||
code: 'ENOENT'
|
||||
stack: |-
|
||||
Object.readFileSync (node:fs:440:20)
|
||||
TestContext.<anonymous> (file:///app/test/build_verification.test.mjs:31:24)
|
||||
Test.runInAsyncScope (node:async_hooks:214:14)
|
||||
Test.run (node:internal/test_runner/test:1047:25)
|
||||
Test.start (node:internal/test_runner/test:944:17)
|
||||
TestContext.test (node:internal/test_runner/test:373:20)
|
||||
TestContext.<anonymous> (file:///app/test/build_verification.test.mjs:29:11)
|
||||
async Test.run (node:internal/test_runner/test:1054:7)
|
||||
async startSubtestAfterBootstrap (node:internal/test_runner/harness:296:3)
|
||||
...
|
||||
1..3
|
||||
not ok 1 - Build artifacts verification
|
||||
---
|
||||
duration_ms: 4.188468
|
||||
type: 'test'
|
||||
location: '/app/test/build_verification.test.mjs:8:1'
|
||||
failureType: 'subtestsFailed'
|
||||
error: '3 subtests failed'
|
||||
code: 'ERR_TEST_FAILURE'
|
||||
...
|
||||
# Subtest: parseArgs should parse basic command
|
||||
ok 2 - parseArgs should parse basic command
|
||||
---
|
||||
duration_ms: 1.628077
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: parseArgs should parse agent and cadence
|
||||
ok 3 - parseArgs should parse agent and cadence
|
||||
---
|
||||
duration_ms: 0.273442
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: parseArgs should parse equals sign syntax
|
||||
ok 4 - parseArgs should parse equals sign syntax
|
||||
---
|
||||
duration_ms: 3.043129
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: parseArgs should parse dry-run flag
|
||||
ok 5 - parseArgs should parse dry-run flag
|
||||
---
|
||||
duration_ms: 0.396494
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: parseArgs should parse port with default
|
||||
ok 6 - parseArgs should parse port with default
|
||||
---
|
||||
duration_ms: 0.220731
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: parseArgs should parse custom port
|
||||
ok 7 - parseArgs should parse custom port
|
||||
---
|
||||
duration_ms: 0.175744
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: parseArgs should parse ignore-logs flag
|
||||
ok 8 - parseArgs should parse ignore-logs flag
|
||||
---
|
||||
duration_ms: 0.527959
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: parseArgs should parse memory flags
|
||||
ok 9 - parseArgs should parse memory flags
|
||||
---
|
||||
duration_ms: 1.240767
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: parseArgs should parse memory flags with equals
|
||||
ok 10 - parseArgs should parse memory flags with equals
|
||||
---
|
||||
duration_ms: 0.722583
|
||||
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: 2.660305
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: identifies locked agents
|
||||
ok 2 - identifies locked agents
|
||||
---
|
||||
duration_ms: 0.566843
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: excludes paused agents
|
||||
ok 3 - excludes paused agents
|
||||
---
|
||||
duration_ms: 0.667234
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: identifies unknown locked agents
|
||||
ok 4 - identifies unknown locked agents
|
||||
---
|
||||
duration_ms: 0.719212
|
||||
type: 'test'
|
||||
...
|
||||
1..4
|
||||
ok 1 - cmdCheck
|
||||
---
|
||||
duration_ms: 5.847049
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: cmdLock
|
||||
# Subtest: successfully locks an available agent
|
||||
ok 1 - successfully locks an available agent
|
||||
---
|
||||
duration_ms: 11.539654
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if agent is not in roster
|
||||
ok 2 - fails if agent is not in roster
|
||||
---
|
||||
duration_ms: 1.014006
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if agent is already locked
|
||||
ok 3 - fails if agent is already locked
|
||||
---
|
||||
duration_ms: 0.439892
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if agent is already completed
|
||||
ok 4 - fails if agent is already completed
|
||||
---
|
||||
duration_ms: 0.594932
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if race check is lost
|
||||
ok 5 - fails if race check is lost
|
||||
---
|
||||
duration_ms: 2.839858
|
||||
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: 13.94634
|
||||
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: 1.184325
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: dry run does not publish
|
||||
ok 8 - dry run does not publish
|
||||
---
|
||||
duration_ms: 0.411616
|
||||
type: 'test'
|
||||
...
|
||||
1..8
|
||||
ok 2 - cmdLock
|
||||
---
|
||||
duration_ms: 33.349845
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: cmdList
|
||||
# Subtest: lists active locks
|
||||
ok 1 - lists active locks
|
||||
---
|
||||
duration_ms: 0.770961
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: warns about unknown agents
|
||||
ok 2 - warns about unknown agents
|
||||
---
|
||||
duration_ms: 0.399904
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: handles no locks
|
||||
ok 3 - handles no locks
|
||||
---
|
||||
duration_ms: 0.367057
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 3 - cmdList
|
||||
---
|
||||
duration_ms: 1.797004
|
||||
type: 'suite'
|
||||
...
|
||||
# Subtest: cmdComplete
|
||||
# Subtest: successfully completes an active lock
|
||||
ok 1 - successfully completes an active lock
|
||||
---
|
||||
duration_ms: 1.126175
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails if no active lock found
|
||||
ok 2 - fails if no active lock found
|
||||
---
|
||||
duration_ms: 0.374503
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: detects already completed task
|
||||
ok 3 - detects already completed task
|
||||
---
|
||||
duration_ms: 0.251288
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 4 - cmdComplete
|
||||
---
|
||||
duration_ms: 1.913573
|
||||
type: 'suite'
|
||||
...
|
||||
1..4
|
||||
ok 11 - src/lib.mjs
|
||||
---
|
||||
duration_ms: 43.819865
|
||||
type: 'suite'
|
||||
...
|
||||
# [publish:primary] Publishing to 3 relays (wss://relay-a, wss://relay-b, wss://relay-c)...
|
||||
# [publish:primary] Publishing to 3 relays (wss://relay-a, wss://relay-b, wss://relay-c)...
|
||||
# [publish:primary] Publishing to 3 relays (wss://relay-a, wss://relay-b, wss://relay-c)...
|
||||
# [publish:primary] Publishing to 3 relays (wss://relay-a, wss://relay-b, wss://relay-c)...
|
||||
# Published to 1/3 relays (required=1, timeout=25ms)
|
||||
# [publish:primary] Publishing to 2 relays (wss://relay-a, wss://relay-b)...
|
||||
# [publish:primary] Publishing to 2 relays (wss://relay-a, wss://relay-b)...
|
||||
# Published to 2/2 relays (required=2, timeout=25ms)
|
||||
# [publish:primary] Publishing to 3 relays (wss://relay-a, wss://relay-b, wss://relay-c)...
|
||||
# [publish:primary] Publishing to 3 relays (wss://relay-a, wss://relay-b, wss://relay-c)...
|
||||
# [publish:primary] Publishing to 3 relays (wss://relay-a, wss://relay-b, wss://relay-c)...
|
||||
# [publish:primary] Publishing to 3 relays (wss://relay-a, wss://relay-b, wss://relay-c)...
|
||||
# Published to 2/3 relays (required=2, timeout=25ms)
|
||||
# (node:2900) 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: 23.840291
|
||||
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: 7.936966
|
||||
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: 4.671589
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 12 - ci-resilience lock acquisition under unstable relays
|
||||
---
|
||||
duration_ms: 38.603362
|
||||
type: 'suite'
|
||||
...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# Published to 1/1 relays (required=1, timeout=200ms)
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://relay-a)...
|
||||
# (node:2906) 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.474069
|
||||
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: 3.032713
|
||||
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: 6.480207
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: short-circuits non-retryable failures without extra attempts
|
||||
ok 4 - short-circuits non-retryable failures without extra attempts
|
||||
---
|
||||
duration_ms: 4.454286
|
||||
type: 'test'
|
||||
...
|
||||
1..4
|
||||
ok 13 - publishLock retry behavior
|
||||
---
|
||||
duration_ms: 21.111696
|
||||
type: 'suite'
|
||||
...
|
||||
# [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)...
|
||||
# [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)...
|
||||
# Published to 2/2 relays (required=1, timeout=200ms)
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-down)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-down)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-down)...
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-bad)...
|
||||
# [publish:primary] Publishing to 5 relays (relay-timeout, wss://dns, wss://tcp, wss://tls, wss://ws)...
|
||||
# [publish:primary] Publishing to 2 relays (wss://relay-bad, wss://relay-ok)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 1 relays (wss://primary-bad)...
|
||||
# [publish:fallback] Publishing to 1 relays (wss://fallback-ok)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 2 relays (wss://bad, wss://healthy)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 2 relays (wss://healthy, wss://bad)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 1 relays (wss://healthy)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 1 relays (wss://healthy)...
|
||||
# {"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)
|
||||
# [publish:primary] Publishing to 2 relays (wss://primary-a, wss://primary-b)...
|
||||
# [publish:fallback] Publishing to 1 relays (wss://fallback-healthy)...
|
||||
# {"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.716055
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
ok 1 - parseLockEvent
|
||||
---
|
||||
duration_ms: 3.018249
|
||||
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.736135
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
ok 2 - queryLocks
|
||||
---
|
||||
duration_ms: 17.017963
|
||||
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.464641
|
||||
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.486588
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: fails without retry for persistent validation failures
|
||||
ok 3 - fails without retry for persistent validation failures
|
||||
---
|
||||
duration_ms: 1.482804
|
||||
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.999629
|
||||
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.501278
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: uses fallback relays to satisfy min success quorum
|
||||
ok 6 - uses fallback relays to satisfy min success quorum
|
||||
---
|
||||
duration_ms: 1.321733
|
||||
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: 1.884675
|
||||
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.10908
|
||||
type: 'test'
|
||||
...
|
||||
1..8
|
||||
ok 3 - publishLock
|
||||
---
|
||||
duration_ms: 19.320605
|
||||
type: 'suite'
|
||||
...
|
||||
1..3
|
||||
ok 14 - lock-ops
|
||||
---
|
||||
duration_ms: 40.427275
|
||||
type: 'suite'
|
||||
...
|
||||
# memory_telemetry {
|
||||
# event: 'memory:ingested',
|
||||
# payload: {
|
||||
# memory_id: 'bfbb3c6e-095d-4ccd-ad5a-140b6927421c',
|
||||
# agent_id: 'agent-telemetry',
|
||||
# dedupe_key: '5054d3273b526ef45167a03a7543de870139af75b9b12cfd920ce80e715e7a88',
|
||||
# chunk_events: 1,
|
||||
# window_start: 0,
|
||||
# window_end: 1771301051599
|
||||
# },
|
||||
# ts: 1771301051603
|
||||
# }
|
||||
# memory_metric {
|
||||
# metric: 'memory_ingested_total',
|
||||
# payload: { count: 1 },
|
||||
# ts: 1771301051604
|
||||
# }
|
||||
# memory_metric {
|
||||
# metric: 'memory_retrieved_total',
|
||||
# payload: { count: 2, cache_hit: false },
|
||||
# ts: 1771301051607
|
||||
# }
|
||||
# memory_telemetry {
|
||||
# event: 'memory:pruned',
|
||||
# payload: { pruned_count: 1, retention_ms: 1000, dry_run: true },
|
||||
# ts: 1771301051608
|
||||
# }
|
||||
# memory_metric {
|
||||
# metric: 'memory_pruned_total',
|
||||
# payload: { count: 0, retention_ms: 1000, dry_run: true },
|
||||
# ts: 1771301051608
|
||||
# }
|
||||
# memory_telemetry {
|
||||
# event: 'memory:prune_skipped',
|
||||
# payload: { reason: 'flag_disabled', retention_ms: 1000 },
|
||||
# ts: 1771301051609
|
||||
# }
|
||||
# Subtest: listMemories, inspectMemory, pinMemory, and unpinMemory support admin hooks
|
||||
ok 15 - listMemories, inspectMemory, pinMemory, and unpinMemory support admin hooks
|
||||
---
|
||||
duration_ms: 2.688735
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: triggerPruneDryRun returns candidate metadata without deleting records
|
||||
ok 16 - triggerPruneDryRun returns candidate metadata without deleting records
|
||||
---
|
||||
duration_ms: 0.525091
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: memoryStats reports counts/rates and retrieval telemetry remains redaction-safe
|
||||
ok 17 - memoryStats reports counts/rates and retrieval telemetry remains redaction-safe
|
||||
---
|
||||
duration_ms: 9.591187
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: runPruneCycle respects prune feature-flag modes
|
||||
ok 18 - runPruneCycle respects prune feature-flag modes
|
||||
---
|
||||
duration_ms: 1.379088
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: stores runtime events in signer/session namespace and clears scope
|
||||
ok 19 - stores runtime events in signer/session namespace and clears scope
|
||||
---
|
||||
duration_ms: 2.59644
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: expires runtime events and records expiration metrics
|
||||
ok 20 - expires runtime events and records expiration metrics
|
||||
---
|
||||
duration_ms: 10.478883
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: enforces LRU bounds and tracks eviction metrics
|
||||
ok 21 - enforces LRU bounds and tracks eviction metrics
|
||||
---
|
||||
duration_ms: 0.718567
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: blocks decrypted/session-sensitive data from durable promotion without sanitizer pass
|
||||
ok 22 - blocks decrypted/session-sensitive data from durable promotion without sanitizer pass
|
||||
---
|
||||
duration_ms: 0.37624
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: createEmbedderAdapter selects in-memory backend and supports vector CRUD
|
||||
ok 23 - createEmbedderAdapter selects in-memory backend and supports vector CRUD
|
||||
---
|
||||
duration_ms: 1.638314
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: createEmbedderAdapter reads backend from environment
|
||||
ok 24 - createEmbedderAdapter reads backend from environment
|
||||
---
|
||||
duration_ms: 2.709345
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: memory feature flags parse defaults and canary allow-lists
|
||||
ok 25 - memory feature flags parse defaults and canary allow-lists
|
||||
---
|
||||
duration_ms: 1.303503
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: memory prune flag supports off, dry-run, and active modes
|
||||
ok 26 - memory prune flag supports off, dry-run, and active modes
|
||||
---
|
||||
duration_ms: 0.302096
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: ingestMemoryWindow gathers sources, redacts pii, chunks, embeds, links, and emits telemetry
|
||||
ok 27 - ingestMemoryWindow gathers sources, redacts pii, chunks, embeds, links, and emits telemetry
|
||||
---
|
||||
duration_ms: 6.119984
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: ingestMemoryWindow dedupes overlapping windows by hashed content + agent + timestamp bucket
|
||||
ok 28 - ingestMemoryWindow dedupes overlapping windows by hashed content + agent + timestamp bucket
|
||||
---
|
||||
duration_ms: 0.828632
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: createLifecyclePlan respects delete safety constraints and logs reasons
|
||||
ok 29 - createLifecyclePlan respects delete safety constraints and logs reasons
|
||||
---
|
||||
duration_ms: 2.398993
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: createLifecyclePlan condenses near-duplicates and archives merged source records
|
||||
ok 30 - createLifecyclePlan condenses near-duplicates and archives merged source records
|
||||
---
|
||||
duration_ms: 0.943965
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: applyLifecycleActions executes keep/archive/delete and merge markers
|
||||
ok 31 - applyLifecycleActions executes keep/archive/delete and merge markers
|
||||
---
|
||||
duration_ms: 1.383097
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: filterAndRankMemories applies metadata filters and composite score
|
||||
ok 32 - filterAndRankMemories applies metadata filters and composite score
|
||||
---
|
||||
duration_ms: 2.851358
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: formatMemoriesForPrompt returns prompt blocks and enforces token budget trimming
|
||||
ok 33 - formatMemoriesForPrompt returns prompt blocks and enforces token budget trimming
|
||||
---
|
||||
duration_ms: 2.468796
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: isMemoryRetrievalEnabled supports global toggle and agent canary list
|
||||
ok 34 - isMemoryRetrievalEnabled supports global toggle and agent canary list
|
||||
---
|
||||
duration_ms: 0.407381
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: renderPromptWithMemoryContext injects bounded memory block before base prompt
|
||||
ok 35 - renderPromptWithMemoryContext injects bounded memory block before base prompt
|
||||
---
|
||||
duration_ms: 0.818684
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: createDbAdvisoryLockProvider acquires and releases postgres advisory locks
|
||||
ok 36 - createDbAdvisoryLockProvider acquires and releases postgres advisory locks
|
||||
---
|
||||
duration_ms: 2.092452
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: startMemoryMaintenanceScheduler runs all jobs and emits metrics including retries
|
||||
ok 37 - startMemoryMaintenanceScheduler runs all jobs and emits metrics including retries
|
||||
---
|
||||
duration_ms: 26.35814
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: startMemoryMaintenanceScheduler skips jobs when feature flags disable memory
|
||||
ok 38 - startMemoryMaintenanceScheduler skips jobs when feature flags disable memory
|
||||
---
|
||||
duration_ms: 11.279543
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: normalizeMemoryItem applies durable schema defaults and coercions
|
||||
ok 39 - normalizeMemoryItem applies durable schema defaults and coercions
|
||||
---
|
||||
duration_ms: 2.535683
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: validateMemoryItem reports field-level errors
|
||||
ok 40 - validateMemoryItem reports field-level errors
|
||||
---
|
||||
duration_ms: 0.538811
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: ingestEvents rejects invalid writes and logs structured validation details
|
||||
ok 41 - ingestEvents rejects invalid writes and logs structured validation details
|
||||
---
|
||||
duration_ms: 5.412329
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: loadMemoryPromptTemplates loads all memory prompt templates from disk
|
||||
ok 42 - loadMemoryPromptTemplates loads all memory prompt templates from disk
|
||||
---
|
||||
duration_ms: 1.458487
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: summarizeEvents retries with repair prompt when first response is malformed JSON
|
||||
ok 43 - summarizeEvents retries with repair prompt when first response is malformed JSON
|
||||
---
|
||||
duration_ms: 2.152071
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: summarizeEvents falls back to deterministic minimal summary with conservative importance when parsing fails twice
|
||||
ok 44 - summarizeEvents falls back to deterministic minimal summary with conservative importance when parsing fails twice
|
||||
---
|
||||
duration_ms: 1.661533
|
||||
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: 169.974982
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should fail when checking without cadence
|
||||
ok 2 - should fail when checking without cadence
|
||||
---
|
||||
duration_ms: 168.833829
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: should include paused agents in check output
|
||||
ok 3 - should include paused agents in check output
|
||||
---
|
||||
duration_ms: 1032.406098
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
ok 45 - CLI Smoke Test
|
||||
---
|
||||
duration_ms: 1374.103911
|
||||
type: 'suite'
|
||||
...
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/bash
|
||||
echo "Starting reproduction of npm test timeout..."
|
||||
|
||||
# Run npm test with a timeout to simulate the hang/slow behavior.
|
||||
# The actual issue is a 400s timeout, but we demonstrate it by showing it doesn't complete quickly.
|
||||
timeout 30s npm test > npm_test_output.log 2>&1
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 124 ]; then
|
||||
echo "Reproduced: npm test timed out after 30s (demonstration)."
|
||||
echo "See npm_test_output.log for partial output."
|
||||
elif [ $EXIT_CODE -ne 0 ]; then
|
||||
echo "npm test failed with exit code $EXIT_CODE"
|
||||
echo "See npm_test_output.log for output."
|
||||
else
|
||||
echo "npm test passed (unexpected for reproduction, or it was very fast)"
|
||||
fi
|
||||
@@ -1,4 +0,0 @@
|
||||
# TODO Issues Report - 2026-02-17T16-36-25Z
|
||||
|
||||
No actionable TODOs found in the codebase (src/, docs/, bin/, scripts/) as of 2026-02-17T16-36-25Z.
|
||||
Matches found were false positives (mktemp XXXXXX templates or documentation).
|
||||
@@ -1,74 +0,0 @@
|
||||
src/test_logs/TEST_LOG_2026-02-15T23-20-19Z.md:11:- Result: Created CONTEXT, TODO, DECISIONS, TEST_LOG files.
|
||||
src/test_logs/TEST_LOG_2026-02-15T18-00-00Z.md:10:- Command: Scan for TODOs
|
||||
src/test_logs/TEST_LOG_2026-02-15T18-00-00Z.md:11: `git grep -n -E "TODO|FIXME|XXX" -- '*.js' '*.mjs' 'docs/*' | sed -n '1,200p' > artifacts/todos.txt`
|
||||
src/context/CONTEXT_2026-02-15T18-00-00Z.md:11:Scan the repository for TODO/FIXME/XXX markers and triage them.
|
||||
src/decisions/DECISIONS_2026-02-15T18-00-00Z.md:11:No actionable TODOs were found in the codebase. The scan returned only documentation references and test data.
|
||||
src/decisions/DECISIONS_2026-02-15T18-00-00Z.md:14:The goal is to triage *actionable* TODOs. Since none exist, no changes or issues are required.
|
||||
src/todo/TODO_manual-jules-1771293773.md:1:# TODO for Scheduler Update Agent
|
||||
src/todo/TODO_2026-02-14T13-30-00Z.md:1:# Decomposition TODO
|
||||
src/todo/TODO_2026-02-14T06-04-19Z.md:1:# Audit Run TODO
|
||||
src/todo/2026-02-13-dom-migration-todo.md:1:# TODO — Rendering Migration (Example)
|
||||
src/todo/TODO_2026-02-17T02-04-31Z.md:1:# TODO for Scheduler Update Agent
|
||||
src/todo/TODO_2026-02-17T02-04-05Z.md:1:# TODO for Scheduler Update Agent
|
||||
src/todo/TODO_2026-02-15T01-22-33Z.md:1:# TODO for Perf Agent Run 2026-02-15T01-22-33Z
|
||||
src/todo/TODO_2026-02-15T18-00-00Z.md:14:- Scan repository for TODOs.
|
||||
src/todo/TODO_2026-02-16.md:1:# TODO: perf-agent (2026-02-16)
|
||||
src/todo/TODO_2026-02-14.md:1:# TODO Checklist
|
||||
src/todo/TODO_2026-02-15T01:03:31Z.md:8:# TODO Update - 2026-02-15T01:03:31Z
|
||||
src/todo/TODO_2026-02-14T23-00-00Z.md:1:# TODO: dashboard/index.html innerHTML Migration
|
||||
src/prompts/scheduler-flow.md:11:- `src/todo/TODO_<timestamp>.md`
|
||||
src/prompts/daily/decompose-agent.md:32:- `src/todo/TODO_<timestamp>.md` — checklist of extraction items (2–3 blocks) and status.
|
||||
src/prompts/daily/decompose-agent.md:75:Add these items to `src/todo/TODO_<timestamp>.md`.
|
||||
src/prompts/daily/decompose-agent.md:266:4. Read file, identify 2–3 cohesive blocks, document in `src/context/CONTEXT_<timestamp>.md` and `src/todo/TODO_<timestamp>.md`.
|
||||
src/prompts/daily/const-refactor-agent.md:40:- `src/todo/TODO_<timestamp>.md` — List of duplicated constants to canonicalize and status for each.
|
||||
src/prompts/daily/audit-agent.md:29:- `src/todo/TODO_<timestamp>.md` — checklist for the audit run and follow-ups.
|
||||
src/prompts/daily/audit-agent.md:121: - If automated, add a follow-up task in `src/todo/TODO_<timestamp>.md` or open issues for high-priority items with labels `perf`, `lint`, or `security` as appropriate.
|
||||
src/prompts/daily/scheduler-update-agent.md:89: - `src/todo/TODO_<timestamp>.md`
|
||||
src/prompts/daily/perf-agent.md:50:- `src/todo/TODO_<timestamp>.md` — tasks (Done / Blocked).
|
||||
src/prompts/daily/innerhtml-migration-agent.md:31:- `src/todo/TODO_<timestamp>.md` — checklist of assignments in the file and status.
|
||||
src/prompts/daily/innerhtml-migration-agent.md:66: Add this list to `src/todo/TODO_<timestamp>.md` as items to migrate.
|
||||
src/prompts/daily/docs-code-investigator.md:22: - Focus on files > ~200 LOC, or files that contain `TODO|FIXME|XXX`.
|
||||
src/prompts/daily/docs-code-investigator.md:23:- Priority: files containing `TODO|FIXME|XXX` or >200 lines. shared helpers and core modules are high-value places to document.
|
||||
src/prompts/daily/docs-code-investigator.md:39:git grep -n -E "TODO|FIXME|XXX" -- . | sed -n '1,200p'
|
||||
src/prompts/daily/docs-code-investigator.md:42:- Is large (> 200 LOC) or contains `TODO` / `FIXME` / `XXX`.
|
||||
src/prompts/daily/docs-code-investigator.md:80:- Note unreachable code, TODOs, or suspicious `try/catch` with swallowing errors.
|
||||
src/prompts/daily/docs-code-investigator.md:206:git grep -n -E "TODO|FIXME|XXX" -- . | sed -n '1,200p'
|
||||
src/prompts/daily/todo-triage-agent.md:13:Mission: keep the codebase’s TODO/FIXME backlog actionable by scanning for TODO-style comments, classifying them by effort/risk, and either (a) fixing **trivial, safe** items via small PRs or (b) converting non-trivial or sensitive items into well-formed GitHub issues. Every change must be small, safe, traceable, and reviewable.
|
||||
src/prompts/daily/todo-triage-agent.md:29: - Scanning the repo for TODO/FIXME/XXX markers in source/docs.
|
||||
src/prompts/daily/todo-triage-agent.md:36: - Refactors or feature work disguised as “TODO fixes”.
|
||||
src/prompts/daily/todo-triage-agent.md:40: - Deleting TODOs without resolving the underlying need.
|
||||
src/prompts/daily/todo-triage-agent.md:45:1. Visibility — Produce a current TODO inventory file each run.
|
||||
src/prompts/daily/todo-triage-agent.md:46:2. Safety — No risky areas are modified; sensitive TODOs become issues.
|
||||
src/prompts/daily/todo-triage-agent.md:50:5. Minimal disruption — Avoid churn; don’t reformat files just to touch TODOs.
|
||||
src/prompts/daily/todo-triage-agent.md:58:- No security-sensitive fixes. If the TODO mentions (or touches) cryptography,
|
||||
src/prompts/daily/todo-triage-agent.md:61:- No mission drift. Do not expand TODO triage into general cleanup/refactors.
|
||||
src/prompts/daily/todo-triage-agent.md:62:- One logical change per commit; don’t bundle unrelated TODOs in one PR unless
|
||||
src/prompts/daily/todo-triage-agent.md:68:P0 Security/safety TODOs → issue only, label clearly.
|
||||
src/prompts/daily/todo-triage-agent.md:69:P1 Trivial correctness/docs TODOs → small PR if safe and < 1 hour.
|
||||
src/prompts/daily/todo-triage-agent.md:70:P2 Medium/large engineering TODOs → issue with next-step recommendation.
|
||||
src/prompts/daily/todo-triage-agent.md:71:P3 Cosmetic/low-value TODOs → issue or leave (don’t churn) unless policy
|
||||
src/prompts/daily/todo-triage-agent.md:89: `git grep -n -E "TODO|FIXME|XXX" -- '*.js' '*.html' 'docs/*' \
|
||||
src/prompts/daily/todo-triage-agent.md:95: For each TODO/FIXME/XXX entry:
|
||||
src/prompts/daily/todo-triage-agent.md:97: - file, line number, exact TODO first line
|
||||
src/prompts/daily/todo-triage-agent.md:130:2) Implement the smallest change that resolves the TODO.
|
||||
src/prompts/daily/todo-triage-agent.md:135: - `fix(ai): <short description> (TODO)`
|
||||
src/prompts/daily/todo-triage-agent.md:136: - `chore(ai): <short description> (TODO)` for docs-only changes
|
||||
src/prompts/daily/todo-triage-agent.md:138: - Summary of the TODO and what changed
|
||||
src/prompts/daily/todo-triage-agent.md:144:- `fix(ai): <short description> (TODO)`
|
||||
src/prompts/daily/todo-triage-agent.md:152:- any sensitive/security-related TODOs
|
||||
src/prompts/daily/todo-triage-agent.md:155:- `todo: <first line of the TODO>`
|
||||
src/prompts/daily/todo-triage-agent.md:160:- What you believe the TODO intends
|
||||
src/prompts/daily/todo-triage-agent.md:170:DE-DUPING & STALE TODOs
|
||||
src/prompts/daily/todo-triage-agent.md:172:- If multiple TODOs refer to the same underlying problem, consolidate into one
|
||||
src/prompts/daily/todo-triage-agent.md:174:- Do not delete TODOs as “stale” unless you can prove the need is resolved.
|
||||
src/prompts/daily/todo-triage-agent.md:195:- 0–N small PRs for trivial, safe TODOs
|
||||
src/prompts/daily/todo-triage-agent.md:196:- 0–N GitHub issues for medium/large/sensitive TODOs
|
||||
src/prompts/daily/content-audit-agent.md:43:- `src/todo/TODO_<timestamp>.md` — checklist of pages and claims to verify, with statuses.
|
||||
src/prompts/daily/deps-security-agent.md:44:- `src/todo/TODO_<timestamp>.md` — upgrade tasks and statuses.
|
||||
src/prompts/daily/test-audit-agent.md:42:- `src/todo/TODO_<timestamp>.md` — checklist of specific tests/issues to investigate/fix.
|
||||
src/prompts/daily/test-audit-agent.md:164: 1. **Test-fix PR** — add missing assertions, replace `setTimeout` sleeps with `waitFor`, or mock timers. Include `src/context/CONTEXT_<timestamp>.md`, `src/todo/TODO_<timestamp>.md`, `src/test_logs/TEST_LOG_<timestamp>.md`.
|
||||
docs/agent-handoffs/incidents/goose-hermit-etxtbsy-fix.patch:70:+ HERMIT_TMP=$(mktemp ~/.config/goose/mcp-hermit/bin/.hermit-download.XXXXXX)
|
||||
docs/agent-handoffs/incidents/goose-hermit-etxtbsy-fix.patch:91:+ HERMIT_INIT_COPY=$(mktemp /tmp/.hermit-init-copy.XXXXXX)
|
||||
docs/agent-handoffs/incidents/2026-02-15-hermit-text-file-busy.md:48:HERMIT_TMP=$(mktemp ~/.config/goose/mcp-hermit/bin/.hermit-download.XXXXXX)
|
||||
docs/agent-handoffs/incidents/2026-02-15-hermit-text-file-busy.md:57:HERMIT_INIT_COPY=$(mktemp /tmp/.hermit-init-copy.XXXXXX)
|
||||
docs/proposals/prompt-packages.md:26: * `todo-triage-agent`: Manage TODOs.
|
||||
@@ -1,23 +0,0 @@
|
||||
# Weekly Race Condition Report: 2026-02-15
|
||||
|
||||
## Focus Areas Audited
|
||||
- Shared Client and Relay Pool (`src/lib.mjs`, `src/lock-ops.mjs`)
|
||||
|
||||
## Findings
|
||||
|
||||
### 1. Non-deterministic Lock Sorting in `cmdLock` (High Severity)
|
||||
- **Description**: The `cmdLock` function in `src/lib.mjs` sorts contending lock events by `createdAt` timestamp only. Since Nostr `created_at` has 1-second resolution, two agents creating lock events in the same second could be sorted differently by different clients depending on the order in which relays return them (or local array sort stability if not handled).
|
||||
- **Interleaving**:
|
||||
1. Agent A creates lock event E1 at T=100.
|
||||
2. Agent B creates lock event E2 at T=100.
|
||||
3. Agent A queries relays, receives [E1, E2]. Sorts by time (equal). If stable sort or random order puts E1 first, A thinks it won.
|
||||
4. Agent B queries relays, receives [E2, E1]. Sorts by time (equal). If stable sort or random order puts E2 first, B thinks it won.
|
||||
5. Both agents proceed to execute the task, violating the mutual exclusion property.
|
||||
- **Fix**: Implemented a deterministic tie-breaker using `eventId` (lexicographical comparison).
|
||||
```javascript
|
||||
.sort((a, b) => (a.createdAt - b.createdAt) || String(a.eventId).localeCompare(String(b.eventId)));
|
||||
```
|
||||
- **Risk**: Low (behavior preserving, standard distributed system practice).
|
||||
|
||||
## Next Week Focus
|
||||
- App initialization and login flow.
|
||||
+14
-2
@@ -559,6 +559,18 @@ function createLockCard(lock, now) {
|
||||
return card;
|
||||
}
|
||||
|
||||
let renderPending = false;
|
||||
function scheduleRender() {
|
||||
if (renderPending) return;
|
||||
renderPending = true;
|
||||
requestAnimationFrame(() => {
|
||||
renderPending = false;
|
||||
if (isAlive() && !document.hidden) {
|
||||
renderLocks();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderLocks() {
|
||||
if (!isAlive()) return;
|
||||
|
||||
@@ -709,12 +721,12 @@ function connectToRelay(url) {
|
||||
}
|
||||
|
||||
appendRawLog(event);
|
||||
renderLocks();
|
||||
scheduleRender();
|
||||
}
|
||||
|
||||
// NIP-01: ["EOSE", subId] — end of stored events
|
||||
if (data[0] === 'EOSE') {
|
||||
renderLocks();
|
||||
scheduleRender();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# Ops Module Overview (`src/ops.mjs`)
|
||||
|
||||
## What this module does
|
||||
This module implements the core CLI operations for the Torch agent system: `init` and `update`. It handles the scaffolding of the agent environment, including directory structure creation, asset copying, configuration generation, and upgrades.
|
||||
|
||||
## Initialization Flow (`cmdInit`)
|
||||
1. **Resolve Configuration**:
|
||||
- Queries user for install directory, namespace, hashtag, and relays.
|
||||
- Validates inputs (prevents path injection).
|
||||
2. **Ensure Directories**:
|
||||
- Creates `torch/prompts/`, `src/proposals/`, `.torch/prompt-history/`.
|
||||
3. **Install Assets**:
|
||||
- Copies app directories (`src`, `bin`, `dashboard`, etc.).
|
||||
- Copies static files (`META_PROMPTS.md`, scheduler docs).
|
||||
- Copies prompts (`daily/`, `weekly/`).
|
||||
4. **Configure**:
|
||||
- Generates `torch-config.json`.
|
||||
- Updates `.gitignore` to exclude `node_modules`.
|
||||
- Generates `TORCH_DASHBOARD.md`.
|
||||
5. **Inject Scripts**:
|
||||
- Adds `torch:*` scripts to the host `package.json` if installed in a subdirectory.
|
||||
|
||||
## Update Flow (`cmdUpdate`)
|
||||
1. **Detect Installation**:
|
||||
- Finds the existing `torch` directory.
|
||||
2. **Backup**:
|
||||
- Creates a timestamped backup in `torch/_backups/`.
|
||||
3. **Update App**:
|
||||
- Overwrites application code (`src`, `bin`, etc.).
|
||||
- Overwrites static files.
|
||||
4. **Update Prompts**:
|
||||
- Adds new prompts from the package.
|
||||
- Preserves existing prompts (unless `--force` is used).
|
||||
5. **Preserve Roster**:
|
||||
- `roster.json` is preserved to avoid resetting rotation (unless `--force` is used).
|
||||
|
||||
## Public API
|
||||
|
||||
### `cmdInit(force, cwd, mockAnswers)`
|
||||
Initializes a new Torch environment.
|
||||
- `force`: Boolean, overwrite existing directory if not empty.
|
||||
- `cwd`: Current working directory.
|
||||
- `mockAnswers`: Optional object for testing (bypasses interactive prompts).
|
||||
|
||||
### `cmdUpdate(force, cwd)`
|
||||
Updates an existing Torch environment.
|
||||
- `force`: Boolean, overwrite modified prompts/roster.
|
||||
- `cwd`: Current working directory.
|
||||
|
||||
## Key Invariants
|
||||
- **Safe Installation**: `validateInstallDir` ensures the target directory name is safe (alphanumeric + safe chars).
|
||||
- **Non-Destructive Defaults**: `init` fails if directory is not empty (unless forced). `update` preserves user data (prompts, roster, config) by default.
|
||||
- **Backup First**: `update` always creates a full backup before modifying files.
|
||||
|
||||
## When to change
|
||||
- When adding new CLI commands or workflows.
|
||||
- When changing the directory structure or asset layout.
|
||||
- When updating the default configuration logic or `torch-config.json` schema.
|
||||
@@ -0,0 +1,95 @@
|
||||
# TORCH Style Guide
|
||||
|
||||
This document outlines the design system, color palette, and typography used in the TORCH project (`dashboard/` and `landing/`).
|
||||
|
||||
## Color Palette
|
||||
|
||||
The project uses a dark theme with high-contrast text and vibrant accents.
|
||||
|
||||
### Core Colors
|
||||
|
||||
| Name | CSS Variable | Hex | Usage |
|
||||
|:---------------|:-------------------|:----------|:-------------------------------------------|
|
||||
| **Surface** | `--surface` | `#0b1020` | Main background color. |
|
||||
| **Surface Alt**| `--surface-alt` | `#151b2f` | Card backgrounds, headers, secondary areas.|
|
||||
| **Text** | `--text` | `#dbe4ff` | Primary body text (slightly blue-tinted). |
|
||||
| **Text Strong**| `--text-strong` | `#ffffff` | Headings, emphasized text. |
|
||||
| **Muted** | `--muted` | `#9aa6c6` | Secondary text, metadata, descriptions. |
|
||||
| **Border** | `--border` | `#2a3456` | Borders for cards, inputs, dividers. |
|
||||
|
||||
### Brand & Functional Colors
|
||||
|
||||
| Name | CSS Variable | Hex | Usage |
|
||||
|:---------------|:-------------------|:----------|:-------------------------------------------|
|
||||
| **Accent** | `--accent` | `#4f8cff` | Primary buttons, active states, links. |
|
||||
| **Accent Strong**| `--accent-strong`| `#2f6be5` | Hover states for accent elements. |
|
||||
| **Info** | `--info` | `#46b7ff` | Informational messages, icons. |
|
||||
| **Info Strong**| `--info-strong` | `#8ad4ff` | Stronger info emphasis. |
|
||||
| **Success** | `--success` | `#35c47c` | Success messages, "Active" statuses. |
|
||||
| **Warning** | `--warning` | `#f5b84b` | Warning alerts. |
|
||||
| **Danger** | `--danger` | `#ff6b6b` | Error messages, destructive actions. |
|
||||
|
||||
### Auxiliary Colors
|
||||
|
||||
| Name | CSS Variable | Hex |
|
||||
|:---------------|:-------------------|:----------|
|
||||
| **Purple** | `--purple` | `#a855f7` |
|
||||
| **Pink** | `--pink` | `#ec4899` |
|
||||
| **Teal** | `--teal` | `#2dd4bf` |
|
||||
|
||||
## Typography
|
||||
|
||||
### Font Families
|
||||
|
||||
* **Primary**: `Inter`, `system-ui`, `-apple-system`, `Segoe UI`, `Roboto`, `sans-serif`
|
||||
* **Monospace**: `ui-monospace`, `SFMono-Regular`, `Menlo`, `Monaco`, `Consolas`, `monospace`
|
||||
|
||||
### Hierarchy
|
||||
|
||||
* **Headings**: Bold (`700`), `Text Strong`.
|
||||
* **Body**: Regular (`400`), `Text`.
|
||||
* **Small/Meta**: Small size, `Muted`.
|
||||
|
||||
## Components
|
||||
|
||||
### Buttons
|
||||
|
||||
* **Primary CTA**:
|
||||
* Background: `var(--accent)`
|
||||
* Text: `white`
|
||||
* Border Radius: `9999px` (Pill shape)
|
||||
* Hover: `var(--accent-strong)`, slight transform up.
|
||||
* **Secondary CTA**:
|
||||
* Background: Transparent or low opacity white.
|
||||
* Border: `var(--border)`
|
||||
* Text: `var(--text)`
|
||||
* Hover: Lighter background, `Text Strong`.
|
||||
|
||||
### Cards
|
||||
|
||||
* Background: `var(--surface-alt)`
|
||||
* Border: `1px solid var(--border)`
|
||||
* Radius: `12px` or `1rem`
|
||||
* Hover: Border color changes to `var(--accent)`, slight lift (`transform: translateY(-5px)`).
|
||||
|
||||
### Status Badges
|
||||
|
||||
* Small, pill-shaped (`border-radius: 99px`).
|
||||
* Uppercase, bold, small font size.
|
||||
* Active: Background `var(--accent)`, Text `var(--surface)`.
|
||||
* Disabled/Inactive: Background `rgba(255,255,255,0.1)`, Text `var(--muted)`.
|
||||
|
||||
## Layout
|
||||
|
||||
* **Container**: Max-width `1200px` centered.
|
||||
* **Grid**: Responsive grids using `grid-template-columns: repeat(auto-fit, minmax(..., 1fr))`.
|
||||
* **Spacing**: Uses `rem` units (e.g., `1rem`, `2rem`, `4rem`).
|
||||
|
||||
## Accessibility Guidelines
|
||||
|
||||
* **Contrast**: Ensure text passes WCAG AA standards against the dark background.
|
||||
* **Interactive Elements**:
|
||||
* Must have `role="button"` or be `<button>`/`<a>`.
|
||||
* Must be keyboard accessible (`tabindex="0"`).
|
||||
* Must have visible focus states (`focus:ring`).
|
||||
* **Images**: All images must have `alt` text. Decorative images should use `aria-hidden="true"`.
|
||||
+99
-26
@@ -164,7 +164,7 @@
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.meta-prompts {
|
||||
.meta-prompts, .agent-showcase {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
}
|
||||
@@ -667,7 +667,7 @@
|
||||
|
||||
.functional-agent-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
@@ -809,7 +809,7 @@
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="background-decoration">
|
||||
<div class="background-decoration" aria-hidden="true">
|
||||
<svg viewBox="0 0 1440 1024" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid slice">
|
||||
<defs>
|
||||
<linearGradient id="warmGradient" x1="0%" y1="0%" x2="100%" y2="0%">
|
||||
@@ -874,8 +874,8 @@
|
||||
<div class="install-container scroll-reveal">
|
||||
<h2 class="mb-8 text-text-strong" style="font-size: 2rem;">Choose Your Agent</h2>
|
||||
|
||||
<div class="agent-selector">
|
||||
<div id="card-jules" onclick="selectAgent('jules')" class="agent-card active" style="cursor: pointer;">
|
||||
<div class="agent-selector" role="radiogroup" aria-label="Select an Agent">
|
||||
<div id="card-jules" onclick="selectAgent('jules')" class="agent-card active" style="cursor: pointer;" role="radio" aria-checked="true" tabindex="0">
|
||||
<div class="agent-header">
|
||||
<span class="agent-name">Jules</span>
|
||||
<span class="agent-status">Active</span>
|
||||
@@ -883,7 +883,7 @@
|
||||
<p class="agent-desc">Web-based tool with Auto-Scheduler. Optimized for Google's latest coding agent. <a href="https://jules.google/" target="_blank" onclick="event.stopPropagation()">Learn more</a>.</p>
|
||||
</div>
|
||||
|
||||
<div id="card-codex" onclick="selectAgent('codex')" class="agent-card" style="cursor: pointer;">
|
||||
<div id="card-codex" onclick="selectAgent('codex')" class="agent-card" style="cursor: pointer;" role="radio" aria-checked="false" tabindex="0">
|
||||
<div class="agent-header">
|
||||
<span class="agent-name">Codex CLI</span>
|
||||
<span class="agent-status">Active</span>
|
||||
@@ -891,7 +891,7 @@
|
||||
<p class="agent-desc">Advanced reasoning for complex tasks. (Requires full access permissions) <a href="https://openai.com/blog/openai-codex" target="_blank" onclick="event.stopPropagation()">Learn more</a>.</p>
|
||||
</div>
|
||||
|
||||
<div id="card-opencode" onclick="selectAgent('opencode')" class="agent-card" style="cursor: pointer;">
|
||||
<div id="card-opencode" onclick="selectAgent('opencode')" class="agent-card" style="cursor: pointer;" role="radio" aria-checked="false" tabindex="0">
|
||||
<div class="agent-header">
|
||||
<span class="agent-name">OpenCode CLI</span>
|
||||
<span class="agent-status">Active</span>
|
||||
@@ -899,7 +899,7 @@
|
||||
<p class="agent-desc">Open source models running locally. <a href="https://opencode.ai/" target="_blank" onclick="event.stopPropagation()">Learn more</a>.</p>
|
||||
</div>
|
||||
|
||||
<div id="card-claude" onclick="selectAgent('claude')" class="agent-card" style="cursor: pointer;">
|
||||
<div id="card-claude" onclick="selectAgent('claude')" class="agent-card" style="cursor: pointer;" role="radio" aria-checked="false" tabindex="0">
|
||||
<div class="agent-header">
|
||||
<span class="agent-name">Claude Code CLI</span>
|
||||
<span class="agent-status">Active</span>
|
||||
@@ -907,7 +907,7 @@
|
||||
<p class="agent-desc">Long-context understanding and safety. (CLI Required, needs cronjob) <a href="https://claude.ai/" target="_blank" onclick="event.stopPropagation()">Learn more</a>.</p>
|
||||
</div>
|
||||
|
||||
<div id="card-gemini" onclick="selectAgent('gemini')" class="agent-card" style="cursor: pointer;">
|
||||
<div id="card-gemini" onclick="selectAgent('gemini')" class="agent-card" style="cursor: pointer;" role="radio" aria-checked="false" tabindex="0">
|
||||
<div class="agent-header">
|
||||
<span class="agent-name">Gemini CLI</span>
|
||||
<span class="agent-status">Active</span>
|
||||
@@ -915,7 +915,7 @@
|
||||
<p class="agent-desc">Google's multimodal AI model. (CLI Required, needs cronjob) <a href="https://deepmind.google/technologies/gemini/" target="_blank" onclick="event.stopPropagation()">Learn more</a>.</p>
|
||||
</div>
|
||||
|
||||
<div id="card-qwen" onclick="selectAgent('qwen')" class="agent-card" style="cursor: pointer;">
|
||||
<div id="card-qwen" onclick="selectAgent('qwen')" class="agent-card" style="cursor: pointer;" role="radio" aria-checked="false" tabindex="0">
|
||||
<div class="agent-header">
|
||||
<span class="agent-name">Qwen Coder CLI</span>
|
||||
<span class="agent-status">Active</span>
|
||||
@@ -923,7 +923,7 @@
|
||||
<p class="agent-desc">Alibaba's open weights coding model. (CLI Required, needs cronjob) <a href="https://qwenlm.github.io/" target="_blank" onclick="event.stopPropagation()">Learn more</a>.</p>
|
||||
</div>
|
||||
|
||||
<div id="card-antigravity" onclick="selectAgent('antigravity')" class="agent-card" style="cursor: pointer;">
|
||||
<div id="card-antigravity" onclick="selectAgent('antigravity')" class="agent-card" style="cursor: pointer;" role="radio" aria-checked="false" tabindex="0">
|
||||
<div class="agent-header">
|
||||
<span class="agent-name">Antigravity IDE</span>
|
||||
<span class="agent-status">Active</span>
|
||||
@@ -1016,6 +1016,27 @@ npm install https://github.com/PR0M3TH3AN/TORCH/archive/refs/heads/main.tar.gz &
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="hook-memory scroll-reveal" style="max-width: 800px; margin: 4rem auto; padding: 0 2rem; text-align: center;">
|
||||
<h2 style="font-size: 2rem; margin-bottom: 1.5rem; color: var(--text-strong);">Hook memory into your existing agents</h2>
|
||||
<p style="font-size: 1.1rem; color: var(--muted); margin-bottom: 2rem; line-height: 1.6;">
|
||||
Add these instructions to your agent's system prompt (e.g. in <code>AGENTS.md</code> or <code>CLAUDE.md</code>) to enable the TORCH memory system.
|
||||
</p>
|
||||
|
||||
<div class="install-code-wrapper multiline" style="margin: 0 auto; text-align: left;">
|
||||
<code id="memory-hook-code">## TORCH Memory Integration
|
||||
You have access to the TORCH memory system.
|
||||
1. READ: Check `.scheduler-memory/latest/${cadence}/memories.md` for past learnings.
|
||||
2. WRITE: Before exiting, save new insights to `memory-update.md` so future runs can learn from this session.</code>
|
||||
<button class="copy-install-btn" onclick="copyToClipboard('memory-hook-code', this)">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
|
||||
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
|
||||
</svg>
|
||||
Copy
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="meta-prompts scroll-reveal">
|
||||
<h2>Scheduler Meta Prompts</h2>
|
||||
<div class="prompts-grid">
|
||||
@@ -1321,7 +1342,11 @@ npm install https://github.com/PR0M3TH3AN/TORCH/archive/refs/heads/main.tar.gz &
|
||||
'telemetry-agent': '📡',
|
||||
'test-coverage-agent': '☔',
|
||||
'ui-ux-agent': '🖼️',
|
||||
'weekly-synthesis-agent': '🧠'
|
||||
'weekly-synthesis-agent': '🧠',
|
||||
'proposal-triage-agent': '🗳️',
|
||||
'plan-agent': '🔭',
|
||||
'builder-agent': '🏗️',
|
||||
'governance-agent': '⚖️'
|
||||
};
|
||||
|
||||
const AGENT_CATEGORIES = {
|
||||
@@ -1343,7 +1368,7 @@ npm install https://github.com/PR0M3TH3AN/TORCH/archive/refs/heads/main.tar.gz &
|
||||
if (!response.ok) throw new Error('Failed to load roster');
|
||||
const roster = await response.json();
|
||||
|
||||
container.innerHTML = ''; // Clear loading state
|
||||
container.replaceChildren(); // Clear loading state
|
||||
|
||||
// Flatten roster into a single list with schedule info
|
||||
const allAgents = [];
|
||||
@@ -1417,17 +1442,47 @@ npm install https://github.com/PR0M3TH3AN/TORCH/archive/refs/heads/main.tar.gz &
|
||||
const card = document.createElement('div');
|
||||
card.className = 'functional-agent-card';
|
||||
|
||||
card.innerHTML = `
|
||||
<div class="functional-agent-header">
|
||||
<div class="functional-agent-title-group">
|
||||
<span class="functional-agent-icon">${icon}</span>
|
||||
<span class="functional-agent-title">${escapeHtml(agent.title)}</span>
|
||||
</div>
|
||||
<span class="functional-agent-schedule">${agent.schedule}</span>
|
||||
</div>
|
||||
<div class="functional-agent-desc">${escapeHtml(agent.description)}</div>
|
||||
<button class="view-prompt-btn" onclick="openAgentModal('${agent.agentName}')">View Prompt</button>
|
||||
`;
|
||||
// Header
|
||||
const header = document.createElement('div');
|
||||
header.className = 'functional-agent-header';
|
||||
|
||||
const titleGroup = document.createElement('div');
|
||||
titleGroup.className = 'functional-agent-title-group';
|
||||
|
||||
const iconSpan = document.createElement('span');
|
||||
iconSpan.className = 'functional-agent-icon';
|
||||
iconSpan.textContent = icon;
|
||||
|
||||
const titleSpan = document.createElement('span');
|
||||
titleSpan.className = 'functional-agent-title';
|
||||
titleSpan.textContent = agent.title;
|
||||
|
||||
titleGroup.appendChild(iconSpan);
|
||||
titleGroup.appendChild(titleSpan);
|
||||
|
||||
const scheduleSpan = document.createElement('span');
|
||||
scheduleSpan.className = 'functional-agent-schedule';
|
||||
scheduleSpan.textContent = agent.schedule;
|
||||
|
||||
header.appendChild(titleGroup);
|
||||
header.appendChild(scheduleSpan);
|
||||
|
||||
// Description
|
||||
const descDiv = document.createElement('div');
|
||||
descDiv.className = 'functional-agent-desc';
|
||||
descDiv.textContent = agent.description;
|
||||
|
||||
// Button
|
||||
const btn = document.createElement('button');
|
||||
btn.className = 'view-prompt-btn';
|
||||
btn.textContent = 'View Prompt';
|
||||
// Use function reference for safety instead of inline onclick string
|
||||
btn.onclick = () => window.openAgentModal(agent.agentName);
|
||||
|
||||
card.appendChild(header);
|
||||
card.appendChild(descDiv);
|
||||
card.appendChild(btn);
|
||||
|
||||
grid.appendChild(card);
|
||||
});
|
||||
|
||||
@@ -1436,7 +1491,11 @@ npm install https://github.com/PR0M3TH3AN/TORCH/archive/refs/heads/main.tar.gz &
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error fetching agents:', error);
|
||||
container.innerHTML = `<p class="text-center" style="color: var(--danger)">Error loading agents: ${error.message}</p>`;
|
||||
const p = document.createElement('p');
|
||||
p.className = 'text-center';
|
||||
p.style.color = 'var(--danger)';
|
||||
p.textContent = `Error loading agents: ${error.message}`;
|
||||
container.replaceChildren(p);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1489,14 +1548,28 @@ npm install https://github.com/PR0M3TH3AN/TORCH/archive/refs/heads/main.tar.gz &
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
|
||||
// Handle keyboard navigation for agent cards
|
||||
document.querySelectorAll('.agent-card').forEach(card => {
|
||||
card.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Enter' || e.key === ' ') {
|
||||
e.preventDefault();
|
||||
card.click();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function selectAgent(agent) {
|
||||
// Remove active class from all cards
|
||||
document.querySelectorAll('.agent-card').forEach(card => card.classList.remove('active'));
|
||||
document.querySelectorAll('.agent-card').forEach(card => {
|
||||
card.classList.remove('active');
|
||||
card.setAttribute('aria-checked', 'false');
|
||||
});
|
||||
|
||||
// Add active class to selected card
|
||||
const selectedCard = document.getElementById('card-' + agent);
|
||||
if (selectedCard) {
|
||||
selectedCard.classList.add('active');
|
||||
selectedCard.setAttribute('aria-checked', 'true');
|
||||
}
|
||||
|
||||
// Update prompt text
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
Goal: Audit prompt safety.
|
||||
Result: Audited 44 prompts. 44 safe, 0 need review.
|
||||
@@ -0,0 +1,12 @@
|
||||
# Memory Update — refactor-agent — 2026-02-21
|
||||
|
||||
## Key findings
|
||||
- Extracted `cmdRemove` successfully.
|
||||
- `src/ops.mjs` was over 800 LOC, now lighter.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- When extracting commands, remember to move or duplicate helper functions they depend on, or export them if shared.
|
||||
- Tests often need renaming and import updates.
|
||||
|
||||
## Warnings / gotchas
|
||||
- `test/ops-remove.test.mjs` was renamed to `test/cmd-remove.test.mjs`.
|
||||
@@ -0,0 +1,12 @@
|
||||
# Memory Update — decompose-agent — 2026-02-21
|
||||
|
||||
## Key findings
|
||||
- Extracted `cmdCheck`, `cmdList`, `cmdComplete` from `src/lib.mjs` into separate files.
|
||||
- `scripts/check-file-size.mjs` does not have a `BASELINE` object to update, effectively a read-only report tool.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- When decomposing `src/lib.mjs`, ensure dependencies (imports) are correctly moved or re-imported.
|
||||
- `COMMAND_HANDLERS` in `src/lib.mjs` makes it easy to swap implementations.
|
||||
|
||||
## Warnings / gotchas
|
||||
- `scripts/check-file-size.mjs` --update flag does not update the file itself.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Memory Update — deps-security-agent — 2026-02-21
|
||||
|
||||
## Key findings
|
||||
- Upgraded `eslint` from `10.0.0` to `10.0.1`.
|
||||
- Found transitive high-severity vulnerability in `minimatch`. Added to `KNOWN_ISSUES.md`.
|
||||
- `ajv` moderate vulnerability persists.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Always check `npm audit` details for transitive path.
|
||||
- `minimatch` ReDoS is a recurring issue in older trees.
|
||||
|
||||
## Warnings / gotchas
|
||||
- `npm audit` exits non-zero; handle gracefully in scripts.
|
||||
@@ -0,0 +1,8 @@
|
||||
# Memory Update — design-system-audit-agent — 2026-02-22
|
||||
|
||||
## Key findings
|
||||
- No automated style checking script exists in `package.json`.
|
||||
- `landing/index.html` relies heavily on inline styles and hardcoded hex values.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- `grep` scans are necessary for style audits until a proper tool is integrated.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Memory Update — smoke-agent — 2026-02-22
|
||||
|
||||
## Key findings
|
||||
- `npm test` passed cleanly in the sandbox environment today, despite known issues warning about EPERM.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- `nostr-tools` must be installed (`npm install`) if missing for lock backend tests to run.
|
||||
|
||||
## Warnings / gotchas
|
||||
- Ensure environment dependencies are present before running integration tests.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Memory Update — docs-alignment-agent — 2026-02-22
|
||||
|
||||
## Key findings
|
||||
- `TORCH.md` was missing several `npm run` scripts present in `package.json` (e.g., Playwright).
|
||||
- `npm test` and `validate:scheduler` descriptions in `TORCH.md` were incomplete.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Always cross-reference `TORCH.md` "NPM Scripts" with `package.json`.
|
||||
|
||||
## Warnings / gotchas
|
||||
- `test` command runs integration tests too, not just unit tests.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Memory Update — docs-code-investigator — 2026-02-22
|
||||
|
||||
## Key findings
|
||||
- `src/ops.mjs` handles `torch-lock init` and `update` logic, including directory scaffolding and config generation.
|
||||
- The `update` logic preserves user modifications to prompts and rosters unless `--force` is used.
|
||||
- `src/ops.mjs` was previously undocumented, now fully JSDoc'd.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- When documenting CLI tools, a high-level "overview" document (like `docs/ops-overview.md`) is valuable for understanding the flow beyond just function signatures.
|
||||
- `src/ops.mjs` uses `src/prompts/` as the source of truth for assets, which is important for understanding how the agent system self-updates.
|
||||
|
||||
## Warnings / gotchas
|
||||
- `cmdInit` and `cmdUpdate` interact with the filesystem extensively; ensure backups are verified (logic exists in `cmdUpdate`) before critical updates.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Memory Update — governance-agent — 2026-02-22
|
||||
|
||||
## Key findings
|
||||
- No pending proposals found this cycle.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Regular governance check completed successfully.
|
||||
|
||||
## Warnings / gotchas
|
||||
- None.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Memory Update — innerhtml-migration-agent — 2026-02-22
|
||||
|
||||
## Key findings
|
||||
- scripts/check-innerhtml.mjs is read-only and does not support --update or BASELINE updates.
|
||||
- landing/index.html uses innerHTML for rendering agent cards and error messages.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Use `element.replaceChildren()` to clear content instead of `innerHTML = ''`.
|
||||
- Use `document.createElement` and `textContent` to safely construct DOM elements.
|
||||
- Use `element.onclick = () => func()` instead of `onclick="func()"` strings for better security.
|
||||
|
||||
## Warnings / gotchas
|
||||
- Verify tools before assuming they have write capabilities (like check-innerhtml.mjs).
|
||||
- Ensure `escapeHtml` is not needed if using `textContent`.
|
||||
@@ -0,0 +1,12 @@
|
||||
# Memory Update — load-test-agent — 2026-02-22
|
||||
|
||||
## Key findings
|
||||
- Verified `load-test.mjs` harness works correctly against a local ephemeral relay (`scripts/agent/simple-relay.mjs`).
|
||||
- Dry-run mode defaults to true; explicit `--dry-run 0` is required for live tests.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Use `scripts/agent/simple-relay.mjs` for safe local load testing without external dependencies.
|
||||
- `load-test.mjs` generates reports in `reports/load-test/`.
|
||||
|
||||
## Warnings / gotchas
|
||||
- Ensure local relay port binding works in the environment (`127.0.0.1`).
|
||||
@@ -0,0 +1,12 @@
|
||||
# Memory Update — deps-security-agent — 2026-02-22
|
||||
|
||||
## Key findings
|
||||
- `eslint` was successfully upgraded from 10.0.0 to 10.0.1 (patch).
|
||||
- `minimatch` (High) and `ajv` (Moderate) vulnerabilities detected (ReDoS).
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Safe patch upgrades for devDependencies like `eslint` are low risk and pass tests reliably.
|
||||
- `npm audit` findings for `minimatch` and `ajv` persist and may require deeper dependency tree updates or `npm audit fix`.
|
||||
|
||||
## Warnings / gotchas
|
||||
- `npm audit` exit code 1 must be handled gracefully in scripts.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Memory Update — load-test-agent — 2026-02-23
|
||||
|
||||
## Key findings
|
||||
- Load test harness verified in dry-run mode (v0.1.0).
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Use `--dry-run` to verify script integrity without network access.
|
||||
|
||||
## Warnings / gotchas
|
||||
- Always set `RELAY_URL` even for dry-run.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Memory Update — perf-agent — 2026-02-23
|
||||
|
||||
## Key findings
|
||||
- /content directory is missing; docs audit cannot proceed as described.
|
||||
- Found 42 performance-sensitive patterns in codebase.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- grep scan is effective for finding keywords.
|
||||
|
||||
## Warnings / gotchas
|
||||
- Ensure output formats match scheduler expectations.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Memory Update — telemetry-agent — 2026-02-23
|
||||
|
||||
## Key findings
|
||||
- No opt-in telemetry sources found (`TELEMETRY=1` or `artifacts/telemetry-optin/`).
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Verify opt-in status before attempting processing to avoid empty runs.
|
||||
|
||||
## Warnings / gotchas
|
||||
- Ensure CI/Agent workflows explicitly set `TELEMETRY=1` to be included.
|
||||
@@ -0,0 +1,8 @@
|
||||
# Memory Update — onboarding-audit-agent — 2026-02-24
|
||||
|
||||
## Key findings
|
||||
- `npm test` fails if `AGENT_PLATFORM` is set to something other than what `detectPlatform()` returns, due to `test/scheduler-preflight-lock.e2e.test.mjs`.
|
||||
- `test/scheduler-preflight-lock.e2e.test.mjs` should probably be updated to respect `AGENT_PLATFORM` if set in the environment.
|
||||
|
||||
## Warnings / gotchas
|
||||
- When running audits in Jules/Codex/etc, be aware of `detectPlatform()` behavior vs `AGENT_PLATFORM` overrides.
|
||||
@@ -0,0 +1,12 @@
|
||||
# Memory Update — todo-triage-agent — 2026-02-24
|
||||
|
||||
## Key findings
|
||||
- Codebase is remarkably clean of `TODO`, `FIXME`, or `XXX` comments in source files.
|
||||
- grep results are dominated by documentation and previous logs, suggesting scanning logic should exclude `task-logs/` and `src/todo/` directories to reduce noise.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Current grep pattern: `git grep -n -E "TODO|FIXME|XXX" -- ...` finds many false positives in docs.
|
||||
- Future scans should focus on `src/**/*.mjs` and exclude `*.md` files if looking for code comments.
|
||||
|
||||
## Warnings / gotchas
|
||||
- `artifacts/todos.txt` can become large due to documentation hits.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Memory Update - torch-garbage-collection-agent
|
||||
|
||||
**Date:** 2026-02-24T22:17:46Z
|
||||
**Run ID:** 2026-02-24T22-17-46Z
|
||||
|
||||
## Summary
|
||||
- Run completed successfully.
|
||||
- No stale files found (0 candidates).
|
||||
- No files deleted.
|
||||
- Environment verified.
|
||||
@@ -0,0 +1,12 @@
|
||||
# Memory Update — todo-triage-agent — 2026-02-25
|
||||
|
||||
## Key findings
|
||||
- No actionable `TODO/FIXME/XXX` markers were found in `src/` or `dashboard/` source files.
|
||||
- Documentation files like `src/backlog/BACKLOG.md` contain references to backlog items which are not code TODOs.
|
||||
|
||||
## Patterns / reusable knowledge
|
||||
- Grep scans should continue to exclude `node_modules`, `task-logs`, and `artifacts` to avoid noise.
|
||||
- Future runs can focus on maintaining this zero-TODO baseline.
|
||||
|
||||
## Warnings / gotchas
|
||||
- None.
|
||||
Generated
+997
-53
File diff suppressed because it is too large.
Load diff
+8
-1
@@ -57,7 +57,9 @@
|
||||
"lock:health": "node bin/torch-lock.mjs health",
|
||||
"dashboard:serve": "node bin/torch-lock.mjs dashboard",
|
||||
"build": "node build.mjs",
|
||||
"format": "eslint . --fix",
|
||||
"lint": "eslint .",
|
||||
"lint:inline-styles": "! grep -r \"style=\" src/ dashboard/ --exclude-dir=test_logs --exclude-dir=task-logs",
|
||||
"lock:complete": "node bin/torch-lock.mjs complete",
|
||||
"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:daily": "node scripts/agent/run-scheduler-cycle.mjs daily",
|
||||
@@ -67,6 +69,9 @@
|
||||
"validate:scheduler-failure-schema": "node --test test/scheduler-lock-failure-schema.contract.test.mjs",
|
||||
"test:ci-resilience": "node --test test/lock-acquisition-resilience.integration.test.mjs",
|
||||
"test:extended-main": "npm run test:integration:e2e && npm run test:ci-resilience",
|
||||
"test:playwright": "playwright test",
|
||||
"test:playwright:coverage": "rm -rf coverage/playwright/tmp && mkdir -p coverage/playwright/tmp && CI=true playwright test && npx c8 report --temp-directory coverage/playwright/tmp --report-dir coverage/playwright --reporter text --reporter json --all --src src",
|
||||
"test:playwright:ui": "playwright test --ui",
|
||||
"torch:memory:list": "node bin/torch-lock.mjs list-memories",
|
||||
"torch:memory:inspect": "node bin/torch-lock.mjs inspect-memory",
|
||||
"torch:remove": "node bin/torch-lock.mjs remove"
|
||||
@@ -77,7 +82,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^10.0.1",
|
||||
"eslint": "^10.0.0",
|
||||
"@playwright/test": "^1.58.2",
|
||||
"c8": "^10.1.3",
|
||||
"eslint": "^10.0.1",
|
||||
"globals": "^17.3.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
// @ts-check
|
||||
import { defineConfig, devices } from '@playwright/test';
|
||||
import path from 'path';
|
||||
|
||||
/**
|
||||
* Read environment variables from file.
|
||||
* https://github.com/motdotla/dotenv
|
||||
*/
|
||||
// require('dotenv').config();
|
||||
|
||||
/**
|
||||
* @see https://playwright.dev/docs/test-configuration
|
||||
*/
|
||||
export default defineConfig({
|
||||
testDir: './test/playwright',
|
||||
/* Maximum time one test can run for. */
|
||||
timeout: 30 * 1000,
|
||||
expect: {
|
||||
/**
|
||||
* Maximum time expect() should wait for the condition to be met.
|
||||
* For example in `await expect(locator).toHaveText();`
|
||||
*/
|
||||
timeout: 5000
|
||||
},
|
||||
/* Run tests in files in parallel */
|
||||
fullyParallel: true,
|
||||
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
||||
forbidOnly: !!process.env.CI,
|
||||
/* Retry on CI only */
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
/* Opt out of parallel tests on CI. */
|
||||
workers: process.env.CI ? 1 : undefined,
|
||||
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
||||
reporter: 'list',
|
||||
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
||||
use: {
|
||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
||||
baseURL: 'http://localhost:3000',
|
||||
|
||||
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
||||
trace: 'on-first-retry',
|
||||
},
|
||||
|
||||
/* Configure projects for major browsers */
|
||||
projects: [
|
||||
{
|
||||
name: 'chromium',
|
||||
use: { ...devices['Desktop Chrome'] },
|
||||
},
|
||||
],
|
||||
|
||||
/* Run your local dev server before starting the tests */
|
||||
webServer: {
|
||||
command: 'node bin/torch-lock.mjs dashboard --port 3000',
|
||||
port: 3000,
|
||||
reuseExistingServer: !process.env.CI,
|
||||
stdout: 'pipe',
|
||||
stderr: 'pipe',
|
||||
env: {
|
||||
NODE_V8_COVERAGE: path.resolve('coverage/playwright/tmp'),
|
||||
TORCH_CONFIG_PATH: path.resolve('test/playwright/fixtures/torch-config.json'),
|
||||
TORCH_DASHBOARD_AUTH: 'admin:password' // Force auth for testing
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,47 @@
|
||||
# Audit Report — 2026-02-24
|
||||
|
||||
**Summary**
|
||||
|
||||
* Commit: 11b3d191172c62bee3080149ffcf663fa1cf76db
|
||||
* Date: 2026-02-24T23:22:51Z
|
||||
* Node: v22.22.0 / OS: Linux
|
||||
|
||||
**Metrics**
|
||||
|
||||
* **Oversized files:** 27 files (total excess lines: 7737)
|
||||
* Top offenders:
|
||||
1. `perf/constants-refactor/candidates.json` (1668 lines, excess: 1368)
|
||||
2. `landing/index.html` (1567 lines, excess: 1267)
|
||||
3. `scripts/agent/run-scheduler-cycle.mjs` (1355 lines, excess: 1055)
|
||||
4. `dashboard/app.js` (835 lines, excess: 535)
|
||||
5. `reports/test-audit/flakiness-matrix.json` (766 lines, excess: 466)
|
||||
6. `test/run-scheduler-cycle-memory-policy.test.mjs` (724 lines, excess: 424)
|
||||
7. `src/ops.mjs` (717 lines, excess: 417)
|
||||
8. `scripts/agent/load-test.mjs` (641 lines, excess: 341)
|
||||
9. `TORCH.md` (593 lines, excess: 293)
|
||||
10. `src/services/memory/index.js` (566 lines, excess: 266)
|
||||
|
||||
* **Total innerHTML assignments:** 2
|
||||
* Offenders:
|
||||
1. `dashboard/app.js` — 1
|
||||
2. `landing/index.html` — 1
|
||||
|
||||
* **Lint failures:** 0
|
||||
|
||||
**Delta vs previous**
|
||||
|
||||
* *No previous report found for comparison.*
|
||||
|
||||
**High-priority items**
|
||||
|
||||
* Review `perf/constants-refactor/candidates.json` and `landing/index.html` for size reduction.
|
||||
* Review `dashboard/app.js` and `landing/index.html` for `innerHTML` usage — consider sanitized templates or `textContent`.
|
||||
|
||||
**Artifacts**
|
||||
|
||||
* `reports/audit/file-size-report-2026-02-24.json`
|
||||
* `reports/audit/innerhtml-report-2026-02-24.json`
|
||||
* `reports/audit/lint-report-2026-02-24.json`
|
||||
* `reports/audit/raw-check-file-size-2026-02-24.log`
|
||||
* `reports/audit/raw-check-innerhtml-2026-02-24.log`
|
||||
* `reports/audit/raw-lint-2026-02-24.log`
|
||||
@@ -0,0 +1 @@
|
||||
# Audit Report - 2026-02-25
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"oversized_files": [
|
||||
{"file": "README.md", "lines": 302, "excess": 2},
|
||||
{"file": "TORCH.md", "lines": 593, "excess": 293},
|
||||
{"file": "dashboard/app.js", "lines": 835, "excess": 535},
|
||||
{"file": "dashboard/styles.css", "lines": 372, "excess": 72},
|
||||
{"file": "docs/proposals/node-based-prompt-editor.md", "lines": 307, "excess": 7},
|
||||
{"file": "docs/proposals/plan-agent-architecture.md", "lines": 543, "excess": 243},
|
||||
{"file": "landing/index.html", "lines": 1567, "excess": 1267},
|
||||
{"file": "perf/constants-refactor/candidates.json", "lines": 1668, "excess": 1368},
|
||||
{"file": "reports/test-audit/flakiness-matrix.json", "lines": 766, "excess": 466},
|
||||
{"file": "scripts/agent/load-test.mjs", "lines": 641, "excess": 341},
|
||||
{"file": "scripts/agent/run-scheduler-cycle.mjs", "lines": 1355, "excess": 1055},
|
||||
{"file": "scripts/agent/scheduler-utils.mjs", "lines": 322, "excess": 22},
|
||||
{"file": "scripts/agent/verify-run-artifacts.mjs", "lines": 375, "excess": 75},
|
||||
{"file": "src/lib.mjs", "lines": 436, "excess": 136},
|
||||
{"file": "src/lock-publisher.mjs", "lines": 440, "excess": 140},
|
||||
{"file": "src/ops.mjs", "lines": 717, "excess": 417},
|
||||
{"file": "src/services/governance/index.js", "lines": 364, "excess": 64},
|
||||
{"file": "src/services/memory/index.js", "lines": 566, "excess": 266},
|
||||
{"file": "src/services/memory/pruner.js", "lines": 320, "excess": 20},
|
||||
{"file": "src/services/memory/scheduler.js", "lines": 318, "excess": 18},
|
||||
{"file": "src/torch-config.mjs", "lines": 312, "excess": 12},
|
||||
{"file": "test/governance.test.mjs", "lines": 375, "excess": 75},
|
||||
{"file": "test/lib.test.mjs", "lines": 434, "excess": 134},
|
||||
{"file": "test/lock-ops.test.mjs", "lines": 433, "excess": 133},
|
||||
{"file": "test/memory-formatter.test.mjs", "lines": 441, "excess": 141},
|
||||
{"file": "test/run-scheduler-cycle-memory-policy.test.mjs", "lines": 724, "excess": 424},
|
||||
{"file": "test/scheduler-time-window.test.mjs", "lines": 311, "excess": 11}
|
||||
],
|
||||
"total_excess_lines": 7737
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"assignments": [
|
||||
{"file": "dashboard/app.js", "count": 1},
|
||||
{"file": "landing/index.html", "count": 1}
|
||||
],
|
||||
"total_assignments": 2
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"failures": [],
|
||||
"total_failures": 0
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
# Onboarding Audit Report - 2026-02-24
|
||||
|
||||
## Headline
|
||||
⚠️ Onboarding failures found
|
||||
|
||||
## Environment
|
||||
- OS: Linux (Jules)
|
||||
- Node: v22.22.0
|
||||
- npm: 11.7.0
|
||||
|
||||
## Steps Executed
|
||||
1. `npm install`
|
||||
2. `npm run build`
|
||||
3. `npm test`
|
||||
4. `npm run lint`
|
||||
|
||||
## Results
|
||||
- `npm install`: PASS
|
||||
- `npm run build`: PASS
|
||||
- `npm test`: FAIL (Exit Code 1)
|
||||
- `npm run lint`: PASS
|
||||
|
||||
## Failures
|
||||
|
||||
### `npm test`
|
||||
The test `test/scheduler-preflight-lock.e2e.test.mjs` failed due to a platform mismatch.
|
||||
The test expects the platform in the log to match `detectPlatform()` (which is `jules` in this environment), but the scheduler used `linux` (explicitly set via `AGENT_PLATFORM` for this audit run).
|
||||
This is a known issue (`KNOWN-ISSUE-scheduler-preflight-platform`).
|
||||
|
||||
**Log Excerpt:**
|
||||
```
|
||||
not ok 1 - lock preflight e2e: successful lock writes completed status snapshot
|
||||
---
|
||||
actual:
|
||||
platform: 'linux'
|
||||
expected:
|
||||
platform: 'jules'
|
||||
```
|
||||
|
||||
**Root Cause:**
|
||||
The test `test/scheduler-preflight-lock.e2e.test.mjs` asserts that the logged platform matches `detectPlatform()`, ignoring any `AGENT_PLATFORM` environment variable that might have been passed to the scheduler. When `AGENT_PLATFORM` is set manually, the scheduler uses it, causing a mismatch with the test's hardcoded expectation.
|
||||
|
||||
## Docs Changes
|
||||
- None made. The instructions in `README.md` are correct for a default run.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Design System Audit Report — 2026-02-22
|
||||
|
||||
Headline: ⚠️ 18 violations (No PR opened)
|
||||
|
||||
## 1) Inline styles
|
||||
- **Total count**: 14
|
||||
- **Top sample files**:
|
||||
- `landing/index.html`: 14
|
||||
- **First snippet example**:
|
||||
- `landing/index.html:158`: `<h2 class="mb-8 text-text-strong" style="font-size: 2rem;">Choose Your Agent</h2>`
|
||||
|
||||
## 2) Raw lengths
|
||||
- **Total count**: 0 (excluding `dashboard/styles.css` which defines the system)
|
||||
- **Note**: `dashboard/styles.css` contains px values but appears to be the source of truth/tokens.
|
||||
|
||||
## 3) Hex colors
|
||||
- **Total count**: 4
|
||||
- **Top sample files**:
|
||||
- `landing/index.html`: 4
|
||||
- **First snippet example**:
|
||||
- `landing/index.html:32`: `background: #0d1117;`
|
||||
|
||||
## 4) Tailwind palette
|
||||
- **Total count**: 0
|
||||
|
||||
## 5) Bracket utilities
|
||||
- **Total count**: 0
|
||||
|
||||
## Footer
|
||||
- **Commands run**: `npm run lint`, `grep` scans for inline styles/hex/px.
|
||||
- **Exit status**: Lint passed (0). Audit found violations in `landing/index.html`.
|
||||
- **Next steps**:
|
||||
- Refactor `landing/index.html` to use classes/tokens instead of inline styles and raw hex colors.
|
||||
- Verify if `dashboard/styles.css` variables are available to `landing/index.html` or if `landing/` needs its own stylesheet.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Known Issues Report: 2026-02-22
|
||||
|
||||
Headline: ✓ All verified / ⚠️ active issues remain (Monitoring)
|
||||
|
||||
| Issue | Status | Last Checked |
|
||||
|-------|--------|--------------|
|
||||
| `test/scheduler-preflight-lock.e2e.test.mjs` platform mismatch | Active | 2026-02-21 |
|
||||
| `test/memory-telemetry.test.mjs` empty stdout | Active | 2026-02-20 |
|
||||
| Sandbox restrictions (`npm test` failures) | Active (Monitoring - Passed) | 2026-02-22 |
|
||||
| Goose Desktop: hermit "text file busy" | Active | 2026-02-20 |
|
||||
| Goose Desktop: wrappers swallow exit codes | Active | 2026-02-20 |
|
||||
| Recurring scheduler lock backend failures | Monitoring (Passed) | 2026-02-22 |
|
||||
| Claude Code: outbound WebSocket blocked | Active (Codex passed) | 2026-02-22 |
|
||||
|
||||
## PRs Opened
|
||||
None.
|
||||
|
||||
## Issues Opened/Updated
|
||||
None.
|
||||
|
||||
## Blockers
|
||||
None. Environment seems healthy (Relays reachable, tests passed).
|
||||
@@ -0,0 +1,26 @@
|
||||
# Known Issues Report - 2026-02-23
|
||||
|
||||
## Status: ⚠️ Active issues remain
|
||||
|
||||
Most active issues are specific to restricted environments (Codex/Claude/Goose) and do not reproduce in the Jules environment.
|
||||
|
||||
### Verification Summary
|
||||
|
||||
| Issue ID | Status | Last Verified | Jules Result |
|
||||
|----------|--------|---------------|--------------|
|
||||
| `KNOWN-ISSUE-scheduler-preflight-platform` | Active | 2026-02-23 | ✅ Passed |
|
||||
| `KNOWN-ISSUE-memory-telemetry-stdout-stderr` | Active | 2026-02-23 | ✅ Passed |
|
||||
| `KNOWN-ISSUE-sandbox-eprem-tests` | Active | 2026-02-23 | ✅ Passed |
|
||||
| `Goose Desktop: hermit ETXTBSY` | Active | 2026-02-23 | ❓ N/A (Linux/Jules) |
|
||||
| `Goose Desktop: wrapper exit codes` | Active | 2026-02-23 | ❓ N/A (Linux/Jules) |
|
||||
| `KNOWN-ISSUE-relay-connectivity-sandbox` | Monitoring | 2026-02-23 | ✅ Healthy |
|
||||
| `Claude Code: outbound WebSocket` | Active | 2026-02-23 | ✅ Connected |
|
||||
|
||||
### Actions Taken
|
||||
- Verified tests pass in Jules environment.
|
||||
- Updated `KNOWN_ISSUES.md` to reflect verification status.
|
||||
- Confirmed relay health and lock acquisition.
|
||||
|
||||
### Next Steps
|
||||
- Continue monitoring relay health.
|
||||
- Investigate Goose Desktop issues if environment becomes available.
|
||||
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"generatedAt": "2026-02-22T23:05:00.396Z",
|
||||
"config": {
|
||||
"relay": {
|
||||
"protocol": "ws:",
|
||||
"hostname": "127.0.0.1",
|
||||
"port": "42049"
|
||||
},
|
||||
"relaySummary": "ws://127.0.0.1:42049",
|
||||
"dryRun": false,
|
||||
"clients": 10,
|
||||
"durationSec": 10,
|
||||
"rateEps": 20,
|
||||
"mixMetadata": 0.2,
|
||||
"seed": null,
|
||||
"connectConcurrency": 25,
|
||||
"maxConnections": 10,
|
||||
"maxInflight": 300,
|
||||
"publishTimeoutMs": 15000,
|
||||
"metadataParts": 4
|
||||
},
|
||||
"results": {
|
||||
"attempted": 200,
|
||||
"succeeded": 200,
|
||||
"failed": 0,
|
||||
"successRate": 1,
|
||||
"throughputEps": 19.93,
|
||||
"backpressureDrops": 0,
|
||||
"inFlightPeak": 2,
|
||||
"latency": {
|
||||
"count": 200,
|
||||
"minMs": 0.655,
|
||||
"avgMs": 0.9502750000000002,
|
||||
"p50Ms": 0.806,
|
||||
"p90Ms": 1.073,
|
||||
"p95Ms": 1.252,
|
||||
"p99Ms": 3.879,
|
||||
"maxMs": 11.851
|
||||
},
|
||||
"eventLoopLag": {
|
||||
"avgMs": 0.388,
|
||||
"p95Ms": 1
|
||||
},
|
||||
"errorBreakdown": {},
|
||||
"topStackTraces": {},
|
||||
"resource": {
|
||||
"samples": [
|
||||
{
|
||||
"tSec": 5,
|
||||
"rssMb": 78.54,
|
||||
"heapUsedMb": 12.14,
|
||||
"heapTotalMb": 19.35,
|
||||
"cpuPercent": 17.63
|
||||
},
|
||||
{
|
||||
"tSec": 10,
|
||||
"rssMb": 79.04,
|
||||
"heapUsedMb": 12.29,
|
||||
"heapTotalMb": 19.85,
|
||||
"cpuPercent": 13.45
|
||||
}
|
||||
],
|
||||
"sampleCount": 2,
|
||||
"maxRssMb": 79.04,
|
||||
"maxHeapUsedMb": 12.29,
|
||||
"avgCpuPercent": 15.54,
|
||||
"cpuUserMs": 1514.738,
|
||||
"cpuSystemMs": 41.191
|
||||
},
|
||||
"throughputSeries": [
|
||||
{
|
||||
"second": 0,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 1,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 2,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 3,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 4,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 5,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 6,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 7,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 8,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 9,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
}
|
||||
],
|
||||
"hotFunctions": "not measured",
|
||||
"startedAtIso": "2026-02-22T23:04:50.361Z",
|
||||
"completedAtIso": "2026-02-22T23:05:00.396Z",
|
||||
"runDurationSec": 10.035
|
||||
},
|
||||
"remediation": [
|
||||
"No significant bottlenecks observed in this run; increase load gradually and repeat to find saturation point."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"generatedAt": "2026-02-23T01:06:03.112Z",
|
||||
"config": {
|
||||
"relay": {
|
||||
"protocol": "ws:",
|
||||
"hostname": "localhost",
|
||||
"port": "9999"
|
||||
},
|
||||
"relaySummary": "ws://localhost:9999",
|
||||
"dryRun": true,
|
||||
"clients": 1000,
|
||||
"durationSec": 10,
|
||||
"rateEps": 20,
|
||||
"mixMetadata": 0.2,
|
||||
"seed": null,
|
||||
"connectConcurrency": 25,
|
||||
"maxConnections": 250,
|
||||
"maxInflight": 300,
|
||||
"publishTimeoutMs": 15000,
|
||||
"metadataParts": 4
|
||||
},
|
||||
"results": {
|
||||
"attempted": 200,
|
||||
"succeeded": 200,
|
||||
"failed": 0,
|
||||
"successRate": 1,
|
||||
"throughputEps": 19.998,
|
||||
"backpressureDrops": 0,
|
||||
"inFlightPeak": 2,
|
||||
"latency": {
|
||||
"count": 200,
|
||||
"minMs": 5.203,
|
||||
"avgMs": 14.467850000000004,
|
||||
"p50Ms": 14.242,
|
||||
"p90Ms": 22.238,
|
||||
"p95Ms": 23.286,
|
||||
"p99Ms": 24.489,
|
||||
"maxMs": 24.688
|
||||
},
|
||||
"eventLoopLag": {
|
||||
"avgMs": 0.396,
|
||||
"p95Ms": 2
|
||||
},
|
||||
"errorBreakdown": {},
|
||||
"topStackTraces": {},
|
||||
"resource": {
|
||||
"samples": [
|
||||
{
|
||||
"tSec": 5,
|
||||
"rssMb": 78.06,
|
||||
"heapUsedMb": 10.09,
|
||||
"heapTotalMb": 19.35,
|
||||
"cpuPercent": 17.4
|
||||
},
|
||||
{
|
||||
"tSec": 10,
|
||||
"rssMb": 78.21,
|
||||
"heapUsedMb": 10.27,
|
||||
"heapTotalMb": 19.35,
|
||||
"cpuPercent": 13.72
|
||||
}
|
||||
],
|
||||
"sampleCount": 2,
|
||||
"maxRssMb": 78.21,
|
||||
"maxHeapUsedMb": 10.27,
|
||||
"avgCpuPercent": 15.56,
|
||||
"cpuUserMs": 1492.56,
|
||||
"cpuSystemMs": 63.908
|
||||
},
|
||||
"throughputSeries": [
|
||||
{
|
||||
"second": 0,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 1,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 2,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 3,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 4,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 5,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 6,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 7,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 8,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
},
|
||||
{
|
||||
"second": 9,
|
||||
"attempted": 20,
|
||||
"succeeded": 20,
|
||||
"failed": 0,
|
||||
"backpressureDrops": 0
|
||||
}
|
||||
],
|
||||
"hotFunctions": "not measured",
|
||||
"startedAtIso": "2026-02-23T01:05:53.110Z",
|
||||
"completedAtIso": "2026-02-23T01:06:03.112Z",
|
||||
"runDurationSec": 10.001
|
||||
},
|
||||
"remediation": [
|
||||
"No significant bottlenecks observed in this run; increase load gradually and repeat to find saturation point."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
# Load Test Report - 2026-02-22
|
||||
|
||||
## Safety
|
||||
- Does not target public relays.
|
||||
- Requires explicit `RELAY_URL`.
|
||||
- Relay target: ws://127.0.0.1:42049
|
||||
- Mode: live publish test
|
||||
|
||||
## Configuration
|
||||
- Clients: 10
|
||||
- Duration: 10s
|
||||
- Rate: 20 events/sec
|
||||
- Metadata mix: 0.2
|
||||
- Max connections: 10
|
||||
- Max in-flight publishes: 300
|
||||
- Seed: (random)
|
||||
|
||||
## Summary
|
||||
- Attempted: 200
|
||||
- Succeeded: 200
|
||||
- Failed: 0
|
||||
- Throughput: 19.93 events/sec
|
||||
- Success rate: 100.00%
|
||||
|
||||
## Latency
|
||||
- p50: 0.806 ms
|
||||
- p90: 1.073 ms
|
||||
- p95: 1.252 ms
|
||||
- p99: 3.879 ms
|
||||
|
||||
## Event Loop Lag
|
||||
- Avg: 0.388 ms
|
||||
- p95: 1 ms
|
||||
|
||||
## Error Taxonomy
|
||||
- none
|
||||
|
||||
## Hot Functions
|
||||
- not measured
|
||||
|
||||
## Prioritized Remediation
|
||||
1. No significant bottlenecks observed in this run; increase load gradually and repeat to find saturation point.
|
||||
@@ -0,0 +1,42 @@
|
||||
# Load Test Report - 2026-02-23
|
||||
|
||||
## Safety
|
||||
- Does not target public relays.
|
||||
- Requires explicit `RELAY_URL`.
|
||||
- Relay target: ws://localhost:9999
|
||||
- Mode: dry-run (no network sends)
|
||||
|
||||
## Configuration
|
||||
- Clients: 1000
|
||||
- Duration: 10s
|
||||
- Rate: 20 events/sec
|
||||
- Metadata mix: 0.2
|
||||
- Max connections: 250
|
||||
- Max in-flight publishes: 300
|
||||
- Seed: (random)
|
||||
|
||||
## Summary
|
||||
- Attempted: 200
|
||||
- Succeeded: 200
|
||||
- Failed: 0
|
||||
- Throughput: 19.998 events/sec
|
||||
- Success rate: 100.00%
|
||||
|
||||
## Latency
|
||||
- p50: 14.242 ms
|
||||
- p90: 22.238 ms
|
||||
- p95: 23.286 ms
|
||||
- p99: 24.489 ms
|
||||
|
||||
## Event Loop Lag
|
||||
- Avg: 0.396 ms
|
||||
- p95: 2 ms
|
||||
|
||||
## Error Taxonomy
|
||||
- none
|
||||
|
||||
## Hot Functions
|
||||
- not measured
|
||||
|
||||
## Prioritized Remediation
|
||||
1. No significant bottlenecks observed in this run; increase load gradually and repeat to find saturation point.
|
||||
@@ -0,0 +1,63 @@
|
||||
# Daily Performance Report - 2026-02-23
|
||||
|
||||
## Summary
|
||||
Perf scan run on 2026-02-23T21:25:49Z. Found 42 potential issues.
|
||||
|
||||
## Findings
|
||||
|
||||
### P0 (Critical)
|
||||
None identified automatically.
|
||||
|
||||
### Scan Hits
|
||||
- src/test_logs/TEST_LOG_2026-02-17T00-00-00Z.md:9 (setInterval)
|
||||
- src/test_logs/TEST_LOG_2026-02-17T19-43-26Z.md:153 (Promise.all)
|
||||
- src/test_logs/TEST_LOG_2026-02-19T16-54-36Z.md:15 (setTimeout)
|
||||
- src/test_logs/TEST_LOG_2026-02-16.md:5 (setInterval)
|
||||
- src/test_logs/TEST_LOG_2026-02-16.md:6 (visibilitychange)
|
||||
- src/context/CONTEXT_2026-02-16.md:19 (setInterval)
|
||||
- src/context/test-audit-context.md:8 (setTimeout)
|
||||
- src/decisions/test-audit-decisions.md:4 (setTimeout)
|
||||
- src/decisions/DECISIONS_2026-02-16.md:5 (setInterval)
|
||||
- src/decisions/DECISIONS_2026-02-16.md:9 (visibilitychange)
|
||||
- src/decisions/DECISIONS_2026-02-16.md:13 (requestAnimationFrame)
|
||||
- src/decisions/DECISIONS_2026-02-16.md:16 (visibilitychange)
|
||||
- src/lock-publisher.mjs:116 (Promise.all)
|
||||
- src/lock-publisher.mjs:196 (setTimeout)
|
||||
- src/lock-publisher.mjs:423 (Promise.all)
|
||||
- src/lib.mjs:204 (setTimeout)
|
||||
- src/todo/test-audit-todo.md:3 (setTimeout)
|
||||
- src/todo/test-audit-todo.md:4 (setTimeout)
|
||||
- src/todo/test-audit-todo.md:5 (setTimeout)
|
||||
- src/lock-utils.mjs:57 (setTimeout)
|
||||
- src/lock-utils.mjs:59 (Promise.race)
|
||||
- src/prompts/weekly/race-condition-agent.md:46 (postMessage)
|
||||
- src/prompts/weekly/race-condition-agent.md:116 (Promise.all)
|
||||
- src/prompts/daily/const-refactor-agent.md:84 (setTimeout)
|
||||
- src/prompts/daily/perf-agent.md:91 (document.hidden)
|
||||
- src/prompts/daily/perf-agent.md:100 (setInterval)
|
||||
- src/prompts/daily/perf-agent.md:102 (new Worker)
|
||||
- src/prompts/daily/perf-agent.md:103 (new WebTorrent)
|
||||
- src/prompts/daily/perf-agent.md:105 (document.hidden)
|
||||
- src/prompts/daily/perf-agent.md:110 (requestAnimationFrame)
|
||||
- src/prompts/daily/perf-agent.md:121 (document.hidden)
|
||||
- src/cmd-list.mjs:38 (Promise.all)
|
||||
- src/dashboard.mjs:254 (setTimeout)
|
||||
- src/services/memory/index.js:52 (setTimeout)
|
||||
- src/services/memory/pruner.js:199 (Promise.all)
|
||||
- src/services/memory/pruner.js:276 (Promise.all)
|
||||
- src/services/memory/retriever.js:256 (Promise.all)
|
||||
- src/services/memory/formatter.js:181 (Promise.all)
|
||||
- src/services/memory/scheduler.js:33 (setInterval)
|
||||
- src/services/memory/scheduler.js:167 (setTimeout)
|
||||
- src/services/memory/scheduler.js:252 (setInterval)
|
||||
- src/services/memory/scheduler.js:260 (setTimeout)
|
||||
|
||||
## Metrics
|
||||
- Login Time: N/A (requires instrumentation)
|
||||
- Decrypt Queue: N/A
|
||||
|
||||
## Blockers
|
||||
- No /content directory found for docs audit.
|
||||
|
||||
## PRs
|
||||
None.
|
||||
@@ -0,0 +1,19 @@
|
||||
# Daily Performance Report - 2026-02-24
|
||||
|
||||
## Summary
|
||||
Perf-agent executed. Identified a performance bottleneck in `dashboard/app.js` where the UI was re-rendering synchronously on every incoming WebSocket event. This could lead to UI freezes during high event volume. A fix was applied to debounce rendering and gate it behind visibility checks.
|
||||
|
||||
## P0/P1 Findings
|
||||
- **High Priority**: `dashboard/app.js` `renderLocks()` called synchronously in `ws.onmessage`.
|
||||
- **Impact**: Potential main-thread blocking and wasted CPU when tab is hidden.
|
||||
- **Action**: Implemented `scheduleRender` using `requestAnimationFrame` and `!document.hidden`. Replaced direct calls with this debounced version.
|
||||
- **Status**: Fixed.
|
||||
|
||||
## Metrics
|
||||
- **Search Hits**: See `reports/performance/hits-2026-02-24.json` for full inventory of performance-sensitive patterns (`setInterval`, `Promise.all`, etc.).
|
||||
|
||||
## Docs Audit
|
||||
- **Status**: Skipped. The `/content` directory was not found in the repository.
|
||||
|
||||
## PRs / Issues
|
||||
- Applied fix directly to `dashboard/app.js`.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Dependency Security Report - 2026-02-21T23-11-21Z
|
||||
|
||||
## Summary
|
||||
- **Vulnerabilities**: 2 (High: 1, Moderate: 1, Low: 0)
|
||||
- **Outdated Packages**: 1
|
||||
|
||||
## Vulnerabilities
|
||||
- [moderate] **ajv**: ajv has ReDoS when using `$data` option
|
||||
- Advisory: https://github.com/advisories/GHSA-2g4f-4pwh-qvx6
|
||||
- [high] **minimatch**: minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern
|
||||
- Advisory: https://github.com/advisories/GHSA-3ppc-4f35-3m26
|
||||
|
||||
## Outdated Packages
|
||||
- **eslint**: 10.0.0 -> 10.0.1 (Latest: 10.0.1)
|
||||
@@ -0,0 +1,26 @@
|
||||
# Dependency Security Report — 2026-02-22
|
||||
|
||||
## Executive Summary
|
||||
- **Date:** 2026-02-22
|
||||
- **Agent:** deps-security-agent
|
||||
- **Scope:** Daily dependency audit
|
||||
|
||||
## Vulnerabilities (NPM Audit)
|
||||
### Summary
|
||||
- **Total:** 2
|
||||
- **High:** 1
|
||||
- **Moderate:** 1
|
||||
- **Low:** 0
|
||||
- **Info:** 0
|
||||
|
||||
### Details
|
||||
- **minimatch** (High): ReDoS vulnerability. Fixed in 10.2.1.
|
||||
- **ajv** (Moderate): ReDoS via `$data`. Fixed in 6.14.0.
|
||||
|
||||
## Outdated Packages (NPM Outdated)
|
||||
### Direct Dependencies
|
||||
- **eslint**: 10.0.0 -> 10.0.1 (Patch upgrade available).
|
||||
|
||||
## Actions Taken / Planned
|
||||
1. Attempting safe upgrade for `eslint` (patch version bump).
|
||||
2. Documented vulnerabilities for follow-up.
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"auditReportVersion": 2,
|
||||
"vulnerabilities": {
|
||||
"ajv": {
|
||||
"name": "ajv",
|
||||
"severity": "moderate",
|
||||
"isDirect": false,
|
||||
"via": [
|
||||
{
|
||||
"source": 1113398,
|
||||
"name": "ajv",
|
||||
"dependency": "ajv",
|
||||
"title": "ajv has ReDoS when using `$data` option",
|
||||
"url": "https://github.com/advisories/GHSA-2g4f-4pwh-qvx6",
|
||||
"severity": "moderate",
|
||||
"cwe": [
|
||||
"CWE-400"
|
||||
],
|
||||
"cvss": {
|
||||
"score": 0,
|
||||
"vectorString": null
|
||||
},
|
||||
"range": "<6.14.0"
|
||||
}
|
||||
],
|
||||
"effects": [],
|
||||
"range": "<6.14.0",
|
||||
"nodes": [
|
||||
"node_modules/ajv"
|
||||
],
|
||||
"fixAvailable": true
|
||||
},
|
||||
"minimatch": {
|
||||
"name": "minimatch",
|
||||
"severity": "high",
|
||||
"isDirect": false,
|
||||
"via": [
|
||||
{
|
||||
"source": 1113371,
|
||||
"name": "minimatch",
|
||||
"dependency": "minimatch",
|
||||
"title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
|
||||
"url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26",
|
||||
"severity": "high",
|
||||
"cwe": [
|
||||
"CWE-1333"
|
||||
],
|
||||
"cvss": {
|
||||
"score": 0,
|
||||
"vectorString": null
|
||||
},
|
||||
"range": "<10.2.1"
|
||||
}
|
||||
],
|
||||
"effects": [],
|
||||
"range": "<10.2.1",
|
||||
"nodes": [
|
||||
"node_modules/minimatch"
|
||||
],
|
||||
"fixAvailable": true
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"vulnerabilities": {
|
||||
"info": 0,
|
||||
"low": 0,
|
||||
"moderate": 1,
|
||||
"high": 1,
|
||||
"critical": 0,
|
||||
"total": 2
|
||||
},
|
||||
"dependencies": {
|
||||
"prod": 10,
|
||||
"dev": 72,
|
||||
"optional": 0,
|
||||
"peer": 0,
|
||||
"peerOptional": 0,
|
||||
"total": 81
|
||||
}
|
||||
}
|
||||
}
|
||||
Loaded 100 of 308 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user