Merge branch 'beta'

# Conflicts:
#	memory-update.md
#	torch/_backups/backup_2026-02-26T13-45-30-661Z/scripts/find_dead_code.py
This commit is contained in:
thePR0M3TH3AN committed 2026-03-01 01:02:55 -05:00
commit 24aa3f12a2
243 files changed
+16410 -1482

No files matched your search

+1 -1
View File
@@ -50,7 +50,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y pkg-config build-essential
else
brew install pkg-config
brew install pkg-config || brew upgrade pkg-config || true
fi
- name: Install MSYS2 toolchain
if: runner.os == 'Windows'
+42 -17
View File
@@ -1,4 +1,9 @@
### 1. [2026-02-26] (scheduler, daily, store, insight)
### 1. [2026-02-27] (scheduler, daily, retrieve)
Memory retrieval seed for daily :: Deps Security Agent
Memory retrieval seed for daily :: Required startup + artifacts + memory + issue capture
### 1. [2026-02-28] (scheduler, daily, retrieve)
# Memory Update (2026-02-25)
@@ -20,26 +25,46 @@ If `npx --no-install torch-lock init --help` prints initialization prompts, it m
---
### 3. [2026-02-25] (scheduler, daily, store, insight)
### 3. [2026-02-26] (scheduler, daily, store, insight)
### 1. [2026-02-25] (torch, scheduler, host-mode)
When running `npm run --prefix torch scheduler:daily`, the scheduler resolves config from `torch/torch-config.json` (cwd-scoped), not the repo-root `torch-config.json`.
# Memory Update — scheduler-update-agent — 2026-02-26
### 2. [2026-02-25] (torch, scheduler, handoff)
A non-inter…
## Key findings
- Roster json is perfectly synced with prompt directories.
- No discrepancies found in daily or weekly rosters.
## Patterns / reusable knowledge
- Always verify file existence before assuming roster drift.
…
---
### 4. [2026-02-25] (scheduler, daily, store, insight)
### 1. [2026-02-25] (torch, scheduler, host-mode)
When running `npm run --prefix torch scheduler:daily`, the scheduler resolves config from `torch/torch-config.json` (cwd-scoped), not the repo-root `torch-config.json`.
### 2. [2026-02-25] (torch, scheduler, handoff)
A non-inter…
---
### 5. [2026-02-26] (scheduler, daily, retrieve)
### 4. [2026-02-27] (scheduler, daily, retrieve)
Memory retrieval seed for daily :: scheduler memory retrieval
## Patterns / reusable knowledge
- Always verify file existence before assuming roster drift.
…
### 5. [2026-02-25] (scheduler, daily, store, insight)
---
### 4. [2026-02-27] (scheduler, daily, retrieve)
Memory retrieval seed for daily :: scheduler memory retrieval
---
### 5. [2026-02-25] (scheduler, daily, store, insight)
### 1. [2026-02-25] (torch, scheduler, host-mode)
When running `npm run --prefix torch scheduler:daily`, the scheduler resolves config from `torch/torch-config.json` (cwd-scoped), not the repo-root `torch-config.json`.
### 2. [2026-02-25] (torch, scheduler, handoff)
A non-inter…
### 2. [2026-02-25] (torch, scheduler, handoff)
A non-inter…
Memory retrieval seed for daily :: Required startup + artifacts + memory + issue capture
@@ -0,0 +1,3 @@
### 1. [2026-02-28] (scheduler, weekly, retrieve)
Memory retrieval seed for weekly :: Required startup + artifacts + memory + issue capture
@@ -0,0 +1 @@
{"status":"ok"}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1 @@
{"status":"ok"}
+1
View File
@@ -0,0 +1 @@
MEMORY_STORED
+265 -4
View File
@@ -68,7 +68,8 @@
"importance": 0.8,
"embedding_id": null,
"created_at": 1772047328158,
"last_seen": 1772075164390,
"last_seen": 1772221041993,
"last_seen": 1772218140238,
"source": "agent-output",
"ttl_days": null,
"merged_into": null,
@@ -119,7 +120,8 @@
"importance": 0.8,
"embedding_id": null,
"created_at": 1772049603683,
"last_seen": 1772075164390,
"last_seen": 1772221041993,
"last_seen": 1772218140238,
"source": "agent-output",
"ttl_days": null,
"merged_into": null,
@@ -170,7 +172,7 @@
"importance": 0.8,
"embedding_id": null,
"created_at": 1772050579374,
"last_seen": 1772075164390,
"last_seen": 1772161782332,
"source": "agent-output",
"ttl_days": null,
"merged_into": null,
@@ -272,7 +274,8 @@
"importance": 0.8,
"embedding_id": null,
"created_at": 1772073865813,
"last_seen": 1772075164390,
"last_seen": 1772221041993,
"last_seen": 1772218140238,
"source": "agent-output",
"ttl_days": null,
"merged_into": null,
@@ -380,5 +383,263 @@
"merged_into": null,
"pinned": false
}
],
[
"7c40af4d-c986-4bfd-9e29-84197600cb0d",
{
"schema_version": 1,
"id": "7c40af4d-c986-4bfd-9e29-84197600cb0d",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm3u1t5b",
"type": "batch_window",
"content": "Memory retrieval seed for daily :: scheduler memory retrieval",
"summary": "Memory retrieval seed for daily :: scheduler memory retrieval",
"tags": [
"scheduler",
"daily",
"retrieve"
],
"importance": 0.4,
"embedding_id": null,
"created_at": 1772132692943,
"last_seen": 1772132692957,
"source": "scheduler-retrieve",
"ttl_days": null,
"merged_into": null,
"pinned": false
}
],
[
"c5cecbbf-c220-4684-a168-6595a9e71406",
{
"schema_version": 1,
"id": "c5cecbbf-c220-4684-a168-6595a9e71406",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm3w5633",
"type": "batch_window",
"content": "Memory retrieval seed for daily :: scheduler memory retrieval",
"summary": "Memory retrieval seed for daily :: scheduler memory retrieval",
"tags": [
"scheduler",
"daily",
"retrieve"
],
"importance": 0.4,
"embedding_id": null,
"created_at": 1772136208911,
"last_seen": 1772136208925,
"source": "scheduler-retrieve",
"ttl_days": null,
"merged_into": null,
"pinned": false
}
],
[
"67f350fa-e0bb-4997-9375-f884950713fd",
{
"schema_version": 1,
"id": "67f350fa-e0bb-4997-9375-f884950713fd",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm3w6j6s",
"type": "batch_window",
"content": "# Memory Update — scheduler-update-agent — 2026-02-26\n\n## Key findings\n- Roster json is perfectly synced with prompt directories.\n- No discrepancies found in daily or weekly rosters.\n\n## Patterns / reusable knowledge\n- Always verify file existence before assuming roster drift.\n\n## Warnings / gotchas\n- Ensure correct path prefix when running in host-repo mode.",
"summary": "# Memory Update — scheduler-update-agent — 2026-02-26\n\n## Key findings\n- Roster json is perfectly synced with prompt directories.\n- No discrepancies found in daily or weekly rosters.\n\n## Patterns / reusable knowledge\n- Always verify file existence before assuming roster drift.\n\n…",
"tags": [
"scheduler",
"daily",
"store",
"insight"
],
"importance": 0.8,
"embedding_id": null,
"created_at": 1772136272549,
"last_seen": 1772221041993,
"last_seen": 1772218140238,
"source": "agent-output",
"ttl_days": null,
"merged_into": null,
"pinned": false
}
],
[
"2c145015-9545-4200-b66a-aef3fe740012",
{
"schema_version": 1,
"id": "2c145015-9545-4200-b66a-aef3fe740012",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm4bdanj",
"type": "batch_window",
"content": "Memory retrieval seed for daily :: scheduler memory retrieval",
"summary": "Memory retrieval seed for daily :: scheduler memory retrieval",
"tags": [
"scheduler",
"daily",
"retrieve"
],
"importance": 0.4,
"embedding_id": null,
"created_at": 1772161782319,
"last_seen": 1772161782332,
"source": "scheduler-retrieve",
"ttl_days": null,
"merged_into": null,
"pinned": false
}
],
[
"b88cbe65-56d0-4ff2-8877-91e962d3216c",
{
"schema_version": 1,
"id": "b88cbe65-56d0-4ff2-8877-91e962d3216c",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm4bdw7l",
"type": "batch_window",
"content": "# Memory Update — style-agent — 2026-02-27\n\n## Key findings\n- Codebase formatting was generally consistent, but `black` identified and reformatted 5 files.\n- JS/TS formatting and linting checks passed without issues.\n- `pytest` suite (766 tests) passed, confirming no regressions from formatting changes.\n\n## Work performed\n- Ran `black .` to enforce Python code style.\n- Reformatted:\n - `src/seedpass/core/display_service.py`\n - `src/seedpass/core/manager.py`\n - `src/seedpass/core/password_generation.py`\n - `src/tests/test_stats_manager.py`\n - `test_atomic_write_perms.py`\n- Verified repository integrity with `npm run --prefix torch lint`, `npm run --prefix torch lint:inline-styles`, and `pytest`.\n\n## Patterns / reusable knowledge\n- The `style-agent` should strictly follow the `black` formatter configuration and not attempt manual style fixes unless necessary.\n- Pre-commit checks must include `pytest` to ensure formatting tools didn't inadvertently break logic (e.g., string concatenation issues).",
"summary": "# Memory Update — style-agent — 2026-02-27\n\n## Key findings\n- Codebase formatting was generally consistent, but `black` identified and reformatted 5 files.\n- JS/TS formatting and linting checks passed without issues.\n- `pytest` suite (766 tests) passed, confirming no regressions…",
"tags": [
"scheduler",
"daily",
"store",
"insight"
],
"importance": 0.8,
"embedding_id": null,
"created_at": 1772161810257,
"last_seen": 1772161810257,
"source": "agent-output",
"ttl_days": null,
"merged_into": null,
"pinned": false
}
],
[
"0dab145c-2792-4f6d-a52d-faaaaab161de",
{
"schema_version": 1,
"id": "0dab145c-2792-4f6d-a52d-faaaaab161de",
"agent_id": "deps-security-agent",
"session_id": "session-mm5ekywg",
"type": "batch_window",
"content": "Memory retrieval seed for daily :: Deps Security Agent",
"summary": "Memory retrieval seed for daily :: Deps Security Agent",
"094aab2a-4a25-4322-a198-1638752acc77",
{
"schema_version": 1,
"id": "094aab2a-4a25-4322-a198-1638752acc77",
"agent_id": "const-refactor-agent",
"session_id": "session-mm5d7amf",
"c60afd2d-1325-4096-849a-77e11f2b5e39",
{
"schema_version": 1,
"id": "c60afd2d-1325-4096-849a-77e11f2b5e39",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm5anfp7",
"type": "batch_window",
"content": "Memory retrieval seed for daily :: scheduler memory retrieval",
"summary": "Memory retrieval seed for daily :: scheduler memory retrieval",
"d7723c49-e9fa-48df-a7f3-ac1d98a93fce",
{
"schema_version": 1,
"id": "d7723c49-e9fa-48df-a7f3-ac1d98a93fce",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm58x8oz",
"type": "batch_window",
"content": "Memory retrieval seed for daily :: scheduler memory retrieval",
"summary": "Memory retrieval seed for daily :: scheduler memory retrieval",
"c27dc830-7ff6-4dec-a164-3ff874207ec0",
{
"schema_version": 1,
"id": "c27dc830-7ff6-4dec-a164-3ff874207ec0",
"agent_id": "audit-agent",
"session_id": "session-mm5l3771",
"type": "batch_window",
"content": "Memory retrieval seed for daily :: Required startup + artifacts + memory + issue capture",
"summary": "Memory retrieval seed for daily :: Required startup + artifacts + memory + issue capture",
"tags": [
"scheduler",
"daily",
"retrieve"
],
"importance": 0.4,
"embedding_id": null,
"created_at": 1772227645361,
"last_seen": 1772227645373,
"created_at": 1772225327752,
"last_seen": 1772225327764,
"created_at": 1772221041979,
"last_seen": 1772221041993,
"created_at": 1772218140227,
"last_seen": 1772218140238,
"created_at": 1772238573613,
"last_seen": 1772238573627,
"source": "scheduler-retrieve",
"ttl_days": null,
"merged_into": null,
"pinned": false
}
],
[
"d95dd159-0aca-4f66-8d6a-cdbbb138f0b2",
{
"schema_version": 1,
"id": "d95dd159-0aca-4f66-8d6a-cdbbb138f0b2",
"agent_id": "deps-security-agent",
"session_id": "session-mm5ela2k",
"type": "batch_window",
"content": "Prompt failed: missing runner codex",
"summary": "Prompt failed: missing runner codex",
"cef905d0-7a66-459c-8937-41310afc934f",
{
"schema_version": 1,
"id": "cef905d0-7a66-459c-8937-41310afc934f",
"agent_id": "const-refactor-agent",
"session_id": "session-mm5dpefy",
"9c49ca58-c6e5-4751-a3de-ab48bf7a4da1",
{
"schema_version": 1,
"id": "9c49ca58-c6e5-4751-a3de-ab48bf7a4da1",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm5b8fmq",
"d4e307de-89ae-48eb-ac20-565a0c1061d3",
{
"schema_version": 1,
"id": "d4e307de-89ae-48eb-ac20-565a0c1061d3",
"agent_id": "scheduler-memory-daily",
"session_id": "session-mm593i1h",
"type": "batch_window",
"content": "# Memory Update — audit-agent — 2026-02-27\n\n## Key findings\n- The `torch/_backups/` directory (not git-ignored?) is causing noise in `check-file-size` and `check-innerhtml` reports.\n- `torch/landing/index.html` is significantly oversized (1641 lines).\n- `docs/assets/theme.js` uses `innerHTML` multiple times and should be reviewed.\n\n## Patterns / reusable knowledge\n- Future runs should explicitly exclude `torch/_backups` via command line flags if possible, or update the script defaults.\n- No linting errors were found in the current codebase state.\n\n## Warnings / gotchas\n- Running `npm run lint` from root fails; must use `npm run --prefix torch lint`.\n- Ensure `reports/audit/` directory exists before running scripts.",
"summary": "# Memory Update — audit-agent — 2026-02-27\n\n## Key findings\n- The `torch/_backups/` directory (not git-ignored?) is causing noise in `check-file-size` and `check-innerhtml` reports.\n- `torch/landing/index.html` is significantly oversized (1641 lines).\n- `docs/assets/theme.js` us…",
"b9e34e7a-99bf-4956-a3f3-ba95e60541ad",
{
"schema_version": 1,
"id": "b9e34e7a-99bf-4956-a3f3-ba95e60541ad",
"agent_id": "audit-agent",
"session_id": "session-mm5l3s0c",
"type": "batch_window",
"content": "# Memory Update — bug-reproducer-agent — 2026-02-27\n\n## Key findings\n- The `scheduler-flow.md` script execution failed due to a missing runner (`codex`).\n- The automated `bug-reproducer-agent` prompt execution failed.\n- Fallback manual investigation identified one active issue: `BIP85 Non-Standard Derivation Path` (using `app_no=2` instead of standard). This is documented in `KNOWN_ISSUES.md`.\n\n## Patterns / reusable knowledge\n- Future runs should verify the runner environment variables (`SCHEDULER_PROMPT_PATH`, `SCHEDULER_AGENT`, `SCHEDULER_CADENCE`) are set correctly before invoking `run-selected-prompt.mjs`.\n- If the runner fails, manual fallback or alternative automation (e.g., Python script) is required.\n\n## Warnings / gotchas\n- `torch/scripts/agent/run-selected-prompt.mjs` depends on an external runner (`codex` or similar) which may not be available in all environments.",
"summary": "# Memory Update — bug-reproducer-agent — 2026-02-27\n\n## Key findings\n- The `scheduler-flow.md` script execution failed due to a missing runner (`codex`).\n- The automated `bug-reproducer-agent` prompt execution failed.\n- Fallback manual investigation identified one active issue: …",
"tags": [
"scheduler",
"daily",
"store",
"insight"
],
"importance": 0.8,
"embedding_id": null,
"created_at": 1772227659837,
"last_seen": 1772227659837,
"created_at": 1772226172512,
"last_seen": 1772226172512,
"created_at": 1772222021666,
"last_seen": 1772222021666,
"created_at": 1772218432277,
"last_seen": 1772218432277,
"created_at": 1772238600589,
"last_seen": 1772238600589,
"source": "agent-output",
"ttl_days": null,
"merged_into": null,
"pinned": false
}
]
]
+1
View File
@@ -0,0 +1 @@
Simulated memory update
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm3sewda",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm3sfj4i",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-update-agent",
"promptPath": "torch/src/prompts/daily/scheduler-update-agent.md",
"promptIntent": "Required startup + artifacts + memory + issue capture",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — scheduler-update-agent — 2026-02-26\n\n## Key findings\n- Roster json is perfectly synced with prompt directories.\n- No discrepancies found in daily or weekly rosters.\n\n## Patterns / reusable knowledge\n- Always verify file existence before assuming roster drift.\n\n…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm3u1t5b",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm3w5633",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm3w6j6s",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — scheduler-update-agent — 2026-02-26\n\n## Key findings\n- Roster json is perfectly synced with prompt directories.\n- No discrepancies found in daily or weekly rosters.\n\n## Patterns / reusable knowledge\n- Always verify file existence before assuming roster drift.\n\n…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm3yluve",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm3ymzdv",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "todo-triage-agent",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — codex — 2026-02-26\n\n## Key findings\n- Full test suite now passes: `766 passed, 11 skipped`.\n- `DisplayService` had diverged from `seedpass.core.manager` interactive helpers, causing test monkeypatches to miss and resulting in flaky behavior.\n\n## Bugs fixed\n- Fi…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm40pypl",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm40uz6h",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — codex — 2026-02-26\n\n## Key findings\n- Full test suite now passes: `766 passed, 11 skipped`.\n- `DisplayService` had diverged from `seedpass.core.manager` interactive helpers, causing test monkeypatches to miss and resulting in flaky behavior.\n\n## Bugs fixed\n- Fi…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm42vmce",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm42wrc2",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — codex — 2026-02-26\n\n## Key findings\n- Full test suite now passes: `766 passed, 11 skipped`.\n- `DisplayService` had diverged from `seedpass.core.manager` interactive helpers, causing test monkeypatches to miss and resulting in flaky behavior.\n\n## Bugs fixed\n- Fi…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm430xcj",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — test-audit-agent — 2026-02-26\n\n## Summary\nTest audit tools (flaky check, static analysis) ran but found no issues. However, the test suite itself is broken due to a missing dependency file (`test/scheduler-lock-failure-schema.contract.test.mjs`), causing `npm r…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm44rf4p",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm44wkva",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — codex — 2026-02-26\n\n## Key findings\n- Full test suite now passes: `766 passed, 11 skipped`.\n- `DisplayService` had diverged from `seedpass.core.manager` interactive helpers, causing test monkeypatches to miss and resulting in flaky behavior.\n\n## Bugs fixed\n- Fi…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm4505ym",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — style-agent — 2026-02-27\n\n## Key findings\n- Codebase formatting was generally consistent, but `black` identified and reformatted 5 files.\n- JS/TS formatting and linting checks passed without issues.\n- `pytest` suite (766 tests) passed, confirming no regressions…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm46yv2s",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm470o1s",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — codex — 2026-02-26\n\n## Key findings\n- Full test suite now passes: `766 passed, 11 skipped`.\n- `DisplayService` had diverged from `seedpass.core.manager` interactive helpers, causing test monkeypatches to miss and resulting in flaky behavior.\n\n## Bugs fixed\n- Fi…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm48z8yt",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm490p2z",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — codex — 2026-02-26\n\n## Key findings\n- Full test suite now passes: `766 passed, 11 skipped`.\n- `DisplayService` had diverged from `seedpass.core.manager` interactive helpers, causing test monkeypatches to miss and resulting in flaky behavior.\n\n## Bugs fixed\n- Fi…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm4bdanj",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm4bdw7l",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — style-agent — 2026-02-27\n\n## Key findings\n- Codebase formatting was generally consistent, but `black` identified and reformatted 5 files.\n- JS/TS formatting and linting checks passed without issues.\n- `pytest` suite (766 tests) passed, confirming no regressions…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm4bfdos",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm58x8oz",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm593i1h",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-updates/2026-02-27T03-20-00Z__audit-agent.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — audit-agent — 2026-02-27\n\n## Key findings\n- The `torch/_backups/` directory (not git-ignored?) is causing noise in `check-file-size` and `check-innerhtml` reports.\n- `torch/landing/index.html` is significantly oversized (1641 lines).\n- `docs/assets/theme.js` us…"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm5anfp7",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory retrieval",
"query": "scheduler | daily | agent | scheduler-memory-daily | intent | scheduler memory retrieval",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 5
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm5b8fmq",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "scheduler-memory-daily",
"promptPath": "",
"promptIntent": "scheduler memory store",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — bug-reproducer-agent — 2026-02-27\n\n## Key findings\n- The `scheduler-flow.md` script execution failed due to a missing runner (`codex`).\n- The automated `bug-reproducer-agent` prompt execution failed.\n- Fallback manual investigation identified one active issue: …"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm5d7amf",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "const-refactor-agent",
"promptPath": "torch/src/prompts/daily/const-refactor-agent.md",
"promptIntent": "Required startup + artifacts + memory + issue capture",
"query": "scheduler | daily | agent | const-refactor-agent | intent | Required startup + artifacts + memory + issue capture",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 1
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm5dpefy",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "const-refactor-agent",
"promptPath": "torch/src/prompts/daily/const-refactor-agent.md",
"promptIntent": "Required startup + artifacts + memory + issue capture",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — bug-reproducer-agent — 2026-02-27\n\n## Key findings\n- The `scheduler-flow.md` script execution failed due to a missing runner (`codex`).\n- The automated `bug-reproducer-agent` prompt execution failed.\n- Fallback manual investigation identified one active issue: …"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm5ekywg",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "deps-security-agent",
"promptPath": "torch/src/prompts/daily/deps-security-agent.md",
"promptIntent": "Deps Security Agent",
"query": "scheduler | daily | agent | deps-security-agent | intent | Deps Security Agent",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 1
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm5ela2k",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "deps-security-agent",
"promptPath": "torch/src/prompts/daily/deps-security-agent.md",
"promptIntent": "Deps Security Agent",
"events": 1,
"sourceFile": ".scheduler-memory/latest/daily/store.ok"
},
"outputs": {
"storedCount": 1,
"summaries": [
"Prompt failed: missing runner codex"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm5j6tzh",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "content-audit-agent",
"promptPath": "torch/src/prompts/daily/content-audit-agent.md",
"promptIntent": "Content Audit Agent",
"query": "scheduler | daily | agent | content-audit-agent | intent | Content Audit Agent",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 1
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm5jchxp",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "content-audit-agent",
"promptPath": "torch/src/prompts/daily/content-audit-agent.md",
"promptIntent": "Content Audit Agent",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — bug-reproducer-agent — 2026-02-27\n\n## Key findings\n- The `scheduler-flow.md` script execution failed due to a missing runner (`codex`).\n- The automated `bug-reproducer-agent` prompt execution failed.\n- Fallback manual investigation identified one active issue: …"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm5l3771",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "audit-agent",
"promptPath": "torch/src/prompts/daily/audit-agent.md",
"promptIntent": "Required startup + artifacts + memory + issue capture",
"query": "scheduler | daily | agent | audit-agent | intent | Required startup + artifacts + memory + issue capture",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 1
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm5l3s0c",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "audit-agent",
"promptPath": "torch/src/prompts/daily/audit-agent.md",
"promptIntent": "Required startup + artifacts + memory + issue capture",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update — bug-reproducer-agent — 2026-02-27\n\n## Key findings\n- The `scheduler-flow.md` script execution failed due to a missing runner (`codex`).\n- The automated `bug-reproducer-agent` prompt execution failed.\n- Fallback manual investigation identified one active issue: …"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,18 @@
{
"cadence": "weekly",
"operation": "retrieve",
"runId": "session-mm5ql8f7",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "changelog-agent",
"promptPath": "torch/src/prompts/weekly/changelog-agent.md",
"promptIntent": "Required startup + artifacts + memory + issue capture",
"query": "scheduler | weekly | agent | changelog-agent | intent | Required startup + artifacts + memory + issue capture",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 1
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,18 @@
{
"cadence": "daily",
"operation": "retrieve",
"runId": "session-mm5qscb6",
"servicePath": "src/services/memory/index.js#getRelevantMemories",
"inputs": {
"agentId": "content-audit-agent",
"promptPath": "torch/src/prompts/daily/content-audit-agent.md",
"promptIntent": "Content Audit Agent",
"query": "scheduler | daily | agent | content-audit-agent | intent | Content Audit Agent",
"events": 1
},
"outputs": {
"ingestedCount": 1,
"retrievedCount": 1
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_RETRIEVED
@@ -0,0 +1,20 @@
{
"cadence": "weekly",
"operation": "store",
"runId": "session-mm5qt2o5",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "changelog-agent",
"promptPath": "torch/src/prompts/weekly/changelog-agent.md",
"promptIntent": "Required startup + artifacts + memory + issue capture",
"events": 1,
"sourceFile": "memory-update.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Memory Update: changelog-agent run 2026-02-28\n\n## Learnings\n* The default branch is `beta`. `git log` should target `beta` instead of `main` when reading history for this repository.\n* A `CHANGELOG.md` file exists and we append changes. Since no existing release notes dir was …"
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
@@ -0,0 +1,20 @@
{
"cadence": "daily",
"operation": "store",
"runId": "session-mm5qtgwf",
"servicePath": "src/services/memory/index.js#ingestEvents",
"inputs": {
"agentId": "content-audit-agent",
"promptPath": "torch/src/prompts/daily/content-audit-agent.md",
"promptIntent": "Content Audit Agent",
"events": 1,
"sourceFile": "torch/reports/audit/content-audit-report-2026-02-28.md"
},
"outputs": {
"storedCount": 1,
"summaries": [
"# Content Audit Report 2026-02-28\n\nNo changes required. All documentation is accurate and aligned with the current TORCH product surface."
]
},
"status": "ok"
}
@@ -0,0 +1 @@
MEMORY_STORED
+33
View File
@@ -5,3 +5,36 @@ All notable changes to this project will be documented in this file.
## [Unreleased] - 2026-02-16
### Added
## [Unreleased] - 2026-02-28
### Added
- Added favicon and switched accent palette to green for landing page.
- Added comprehensive unit tests for `generate_fingerprint`.
- Added unit test for `StatsManager.reset` method.
- Added test to verify `atomic_write` cleanup on failure.
- Added test to verify `verify_checksum` behavior when file is missing.
### Changed
- Refactored `modify_entry` to reduce complexity by using helper methods.
- Refactored entry menus to use generic `MenuHandler.run_menu`.
- Refactored GUI backend config to `constants.py`.
- Refactored `handle_add_*` methods to remove duplication.
- Refactored `Vault.load_index` into smaller private methods.
- Refactored `_enforce_complexity` in `password_generation.py`.
- Refactored `display_sensitive_entry_info` into `DisplayService`.
- Refactored `initialize_managers` in `PasswordManager` for better readability.
- Refactored imghdr compatibility hack to a dedicated compat module.
### Fixed
- Fixed `test_ai_tui_agent_harness` on Windows platform skip handling.
- Removed unformatted `patch.py` from git history and repo.
- Fixed race condition in backup file permissions.
- Added pycryptodome dependency for PGP RSA features.
- Prevented arbitrary file overwrite in `backup_parent_seed`.
- Fixed legacy empty salt key derivation issues.
- Fixed index verification for TOTP in modify entry test.
- Fixed macOS build script and updated `requirements.lock`.
### Performance
- Offloaded blocking `import_vault` operations to thread.
+25
View File
@@ -29,6 +29,7 @@ SeedPass now uses the `portalocker` library for cross-platform file locking. No
## Table of Contents
- [Features](#features)
- [Agent and Automation Security Features](#agent-and-automation-security-features)
- [Architecture Overview](#architecture-overview)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
@@ -83,6 +84,30 @@ SeedPass now uses the `portalocker` library for cross-platform file locking. No
A small on-screen notification area now shows queued messages for 10 seconds
before fading.
## Agent and Automation Security Features
SeedPass includes an agent-focused CLI surface for non-interactive automation
with policy and security guardrails:
- **Auth brokers (no plaintext env required):** `env`, `keyring`, `command`, `prompt` providers for `agent init/get`, `vault unlock`, and `api start --unlock`.
- **Policy as code:** `agent policy-lint`, `agent policy-review`, and `agent policy-apply` for validated, diffable, risk-gated policy updates.
- **Scoped tokens + identities:** `agent token-issue/list/revoke` and `agent identity-create/list/revoke` with TTL, use limits, and revocation.
- **One-time/N-use secret leases:** `agent get --lease-only`, `agent lease-consume`, `agent lease-list`, `agent lease-revoke`.
- **Approval gates for risky actions:** `agent approval-issue/list/revoke` gates export, parent-seed reveal, and sensitive private-key retrieval flows.
- **Secret-class isolation:** dedicated high-risk unlock factor and lock state via `agent high-risk-factor-set`, `agent high-risk-unlock/status/lock`.
- **Safer automation primitives:** `agent job-run`, `agent job-template`, and job profiles with policy-stamp checks and signed template manifests.
- **Recovery hardening:** `agent recovery-split/recover/drill/drill-list` for Shamir split/recover and signed drill evidence.
- **Deterministic export controls:** policy-filtered exports plus manifest integrity checks with `agent export-check` and `agent export-manifest-verify`.
- **Security posture tooling:** `agent posture-check` and `agent posture-remediate` for drift detection and remediation bundles.
- **Auditable access chain:** append-only HMAC-chained audit records with verification support.
For machine-readable discovery, run:
```bash
seedpass capabilities --format json
seedpass agent bootstrap-context
```
## Architecture Overview
SeedPass follows a layered design. The **`seedpass.core`** package exposes the
+25
View File
@@ -0,0 +1,25 @@
# CI Flake Analysis - 2026-02-27
## Summary
The full test suite was run 4 times (1 initial run + 3 loop runs) to detect flaky tests.
**Command:** `PYTHONPATH=src python3 -m pytest`
**Results:**
- **Initial Run:** 766 passed, 11 skipped
- **Loop Run 1:** 766 passed, 11 skipped
- **Loop Run 2:** 766 passed, 11 skipped
- **Loop Run 3:** 766 passed, 11 skipped
## Conclusion
No flaky tests were detected in the current environment. The test suite appears stable.
## Skipped Tests
The following tests were skipped in all runs (likely due to missing optional dependencies or configuration):
- `src/tests/test_concurrency_stress.py` (3 skipped)
- `src/tests/test_gui_features.py` (3 skipped)
- `src/tests/test_nostr_index_size.py` (1 skipped)
- `src/tests/test_nostr_real.py` (3 skipped)
- `src/tests/test_nostr_sdk_workflow.py` (some possibly skipped or passed, log shows passed)
*Note: The number of skipped tests (11) remained consistent across all runs.*
+1
View File
@@ -0,0 +1 @@
# Flaky Tests Report
+1
View File
@@ -0,0 +1 @@
No flaky tests detected in 3 loops.
+9
View File
@@ -0,0 +1,9 @@
Title: todo: Replace this Python implementation with a Rust/WASM module for
Body:
File: src/utils/memory_protection.py:6
Excerpt: # TODO: Replace this Python implementation with a Rust/WASM module for critical cryptographic operations.
Intent: Enhance security and performance by moving critical crypto operations to a compiled Rust/WASM module to avoid Python memory management issues.
Effort: Large
Risk: High
Next Step: Research Rust bindings for Python (PyO3) or WASM integration strategies compatible with the current environment.
Note: Security-sensitive -> human review required.
+1
View File
@@ -0,0 +1 @@
src/utils/memory_protection.py:6:# TODO: Replace this Python implementation with a Rust/WASM module for
+13
View File
@@ -2,6 +2,12 @@
This directory contains SeedPass project documentation.
## Agent and Autonomy Docs
- `agent_autonomy_security_plan.md`
- `policy_as_code.md`
- `sync_conflict_contract.md`
## Core Security Docs
- `security_readiness_checklist.md`
@@ -26,3 +32,10 @@ This directory contains SeedPass project documentation.
- `installer_testing.md`
- `ci-health-2026-02-19.md`
- `agent-handoffs/README.md`
## Discoverability Commands
- `seedpass --help`
- `seedpass <group> --help`
- `seedpass capabilities --format json`
- `seedpass agent bootstrap-context`
+19
View File
@@ -30,6 +30,25 @@ SeedPass synchronizes profiles over Nostr using three event kinds:
Events encode JSON and include tags for checksums, fingerprints, and timestamps.
## Deterministic Conflict Resolution
When index payloads are merged (for example during Nostr delta replay), SeedPass
uses deterministic conflict semantics with strategy
`modified_ts_hash_tombstone_v2`.
High-level rules:
- Higher `modified_ts` entries win.
- Equal `modified_ts` entries use deterministic hash tie-breakers and
field-level union rules for selected metadata.
- Deletions are represented as tombstones in `_sync_meta.tombstones` and win
against older entry states.
- `_sync_meta.last_merge_ts` is derived from payload state, not wall-clock
time, so replaying the same payload is idempotent.
See [sync_conflict_contract.md](sync_conflict_contract.md) for the formal
merge/tombstone contract and replay guarantees.
## Versioning
Configuration and KDF schemas are versioned so clients can migrate older
+286
View File
@@ -0,0 +1,286 @@
# SeedPass Agent Autonomy Security Plan
## Goal
Implement a staged security architecture that enables autonomous agents to use SeedPass safely in production environments without relying on plaintext secrets or overly broad access.
## Program Structure
- Phase A: Foundation
Add policy engine hardening, brokered auth, scoped tokens, redaction, and auditable access.
- Phase B: Guardrails
Add approval gates, high-risk secret isolation, and deterministic export controls.
- Phase C: Operations
Add posture tooling, rotation workflows, recovery hardening, and conflict-safe sync semantics.
## Implementation Snapshot (2026-03-01)
- Implemented: 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
- In Progress: 2 (continuing enforcement-depth hardening and broad validation across all operation paths)
- Tracking source of truth: `docs/security_readiness_checklist.md` (Agent Autonomy Control Track section)
## 1. Native Non-Interactive Auth Brokers
- Problem:
Agent auth depends heavily on env vars and manual password flow.
- Implementation:
Add an auth broker abstraction with providers:
`env` (backward-compatible), `keyring` (OS-native), `command` (for HSM/YubiKey helpers).
Add broker options to `seedpass agent init/get` and then `vault unlock`, `api start`.
Add broker plugins for `pkcs11` and `yubikey` as optional modules later.
- Data/Config:
`--auth-broker`, `--broker-service`, `--broker-account`, `--broker-command`.
- Security:
Never persist broker-returned secrets; memory-only use.
- Tests:
broker resolution, failure handling, per-profile account defaults.
- Acceptance:
agent workflows can authenticate without password env vars by using keyring/broker commands.
## 2. Fine-Grained RBAC Per Profile
- Problem:
Coarse kind-level permissions are insufficient.
- Implementation:
Extend policy rules to enforce allow/deny by:
entry path, label regex, kind, field, operation (`read/create/update/export`).
Enforce in CLI agent commands, API endpoints, and service layer wrappers.
- Data/Config:
`agent_policy.json` schema v2 with explicit operation matrix and precedence.
- Tests:
policy precedence, deny overrides, path+field restrictions.
- Acceptance:
deterministic policy decisions for every operation and entry field.
## 3. Short-Lived Scoped Tokens
- Problem:
Long-lived static tokens increase blast radius.
- Implementation:
Expand token store to support:
scope lists, TTL, usage count, profile binding, optional IP/host binding, revocation reason.
Add token introspection endpoint/command.
- Data/Config:
`agent_tokens.json` versioned schema.
- Tests:
expiry, revoke, scope denial, kind denial, reuse after exhaustion.
- Acceptance:
all agent access can use revocable TTL-bound scoped credentials.
## 4. One-Time Secret Leases
- Problem:
Secrets may be exposed repeatedly after retrieval.
- Implementation:
Add lease records tied to token and resource:
fetch-once or N-use, automatic invalidation, lease audit linkage.
Optional server-side one-time retrieval IDs for API consumers.
- Tests:
first-use success, second-use denial, race behavior under concurrency.
- Acceptance:
one-time leases are enforced reliably under parallel access.
## 5. Policy-Enforced Redaction
- Problem:
Secrets can leak through stdout/logging by default.
- Implementation:
Make safe output mode default in agent/API.
Redact by field policy with optional reveal override requiring permission.
Add structured redaction markers.
- Tests:
output snapshot tests for masked/unmasked modes.
- Acceptance:
secrets are masked by default in automation logs.
## 6. Auditable Event Log
- Problem:
Access traceability is weak without tamper evidence.
- Implementation:
Keep append-only signed chain log.
Add verifier command:
`seedpass agent audit-verify`.
Add export to JSONL with integrity proofs.
- Tests:
chain continuity, tamper detection, clock skew handling.
- Acceptance:
any log tampering is detectable; access events are attributable.
## 7. Approval Gates
- Problem:
High-risk actions need step-up control.
- Implementation:
Define gate policies for `export`, `reveal_parent_seed`, `private_key_retrieval`.
Add approval plugins:
local second factor, signed approval token, webhook approver.
Add TTL and single-use approval grants.
- Tests:
denied without approval, success with valid grant, grant expiry.
- Acceptance:
risky operations cannot execute without valid step-up approval.
## 8. Secret-Class Isolation
- Problem:
High-risk materials should not share unlock context with standard secrets.
- Implementation:
Partition vault by class:
standard vs high-risk (`seed`, `ssh`, `pgp`).
Separate derived encryption keys and unlock factors.
Per-class lock/unlock state.
- Data/Config:
class partition metadata in encrypted config.
- Tests:
class lock boundary, cross-class access denial.
- Acceptance:
compromise of standard unlock path does not unlock high-risk partitions.
## 9. Agent Identities
- Problem:
Tokens alone do not model lifecycle and ownership.
- Implementation:
Add first-class agent accounts:
id, owner, policy binding, rotation interval, revocation state.
Tokens must be issued under agent identity.
- Data/Config:
`agent_identities.json` versioned schema.
- Tests:
identity disable/revoke, policy inheritance.
- Acceptance:
every token and access event maps to a managed agent identity.
## 10. Safer Automation Primitives
- Problem:
cron jobs often use plaintext env secrets.
- Implementation:
Add job runner integration:
broker-only auth, scoped policy binding, ephemeral runtime context.
Add template commands for systemd timers and cron wrappers.
- Tests:
non-interactive scheduled task success without plaintext secret files.
- Acceptance:
supported scheduled workflows avoid plaintext env password dependence.
## 11. Recovery Hardening
- Problem:
Recovery process can be brittle or under-tested.
- Implementation:
Add Shamir split/recovery workflows for parent seed protection.
Add scheduled backup verification drills with signed reports.
- Tests:
split/recombine determinism, threshold enforcement, drill report generation.
- Acceptance:
enforceable recovery posture with verifiable drills.
## 12. Conflict-Safe Sync Primitives
- Problem:
multi-device edits can conflict unpredictably.
- Implementation:
Introduce deterministic merge strategy:
monotonic timestamps + deterministic tie-breaker + field-level merge rules.
Encrypt metadata needed for conflict resolution.
- Tests:
concurrent edit replay, deterministic final state across nodes.
- Acceptance:
same inputs always produce same merged vault state.
## 13. Policy as Code
- Problem:
policy lifecycle lacks strong review workflows.
- Implementation:
Add schema validation, linting, canonical formatting, diff tooling, policy tests.
Add optional signed policy bundles and hash pinning.
- Tests:
lint failures, schema migration tests, canonical output tests.
- Acceptance:
policy changes are reviewable, testable, and reproducible.
## 14. Deterministic Export Controls
- Problem:
full-vault exports are dangerous for agent profiles.
- Implementation:
Enforce policy-restricted subset exports:
allowed kinds/paths/fields only, default deny full-vault for agent identities.
Add deterministic manifest for exported subset.
- Tests:
blocked full export, allowed subset export correctness.
- Acceptance:
agent profiles cannot perform unrestricted exports by default.
## 15. Security Posture Tooling
- Problem:
drift and misconfiguration can silently increase risk.
- Implementation:
Add `seedpass agent posture-check`:
stale credentials, weak broker config, overbroad policy rules, missing rotation, gate bypasses.
Output machine-readable report and severity levels.
- Tests:
posture check fixtures with expected findings.
- Acceptance:
actionable posture report with CI-friendly nonzero exit on critical findings.
## Recommended Delivery Order
1. Item 1 completion across all auth entry points.
2. Items 2, 7, 14 enforcement expansion.
3. Items 3, 4, 9 identity-token lifecycle.
4. Items 6, 13, 15 governance and audit maturity.
5. Items 8, 10, 11, 12 deeper operational hardening.
## Definition of Done (Cross-Cutting)
- No plaintext secret persistence introduced.
- New schemas are versioned and migration tested.
- All new controls covered by unit + integration tests.
- CLI/API paths return deterministic, machine-readable error payloads.
## Help and Discoverability TODO Backlog
### Objective
Make SeedPass self-describing for autonomous agents and human operators so feature discovery does not depend on external docs or code spelunking.
### TODO 1: Login-Time Guidance
- Add concise post-unlock guidance text in:
`seedpass vault unlock` and API `/api/v1/vault/unlock`.
- Include links/hints to:
`seedpass --help`, `seedpass <group> --help`, API `/docs`.
- Add tests verifying hint visibility and stability.
### TODO 2: Machine-Readable Capability Surface
- Add `seedpass capabilities --format json|yaml|text`.
- Include:
command groups, commands, option schema, auth modes, output mode (`json`/text), risk class, and policy gates.
- Ensure deterministic ordering for diffability in CI.
### TODO 3: Command Metadata Registry
- Add a central metadata registry for CLI/API capabilities.
- Fields:
`name`, `summary`, `requires_unlock`, `supports_noninteractive`, `requires_approval`, `sensitive_outputs`, `policy_operations`.
- Generate help and capabilities output from the same registry to prevent drift.
### TODO 4: Agent-Focused Help Profile
- Add `--help-profile agent|human`.
- Agent profile:
concise machine-actionable semantics, failure modes, deterministic examples, JSON schemas.
- Human profile:
richer narrative hints and workflow examples.
### TODO 5: Output Schema Discovery
- Add `--output json` and `--describe-output` support to critical commands (`agent get`, `vault unlock`, token/policy commands).
- Publish expected JSON field schema in command help and capability output.
### TODO 6: Risk and Approval Annotations in Help
- Mark risky commands in help with a stable tag:
`risk:high`, `approval:required`.
- Apply to:
export, reveal-parent-seed, private key retrieval paths.
### TODO 7: Context Bootstrap Command for Agents
- Add `seedpass agent bootstrap-context`.
- Return:
active profile fingerprint, policy status, broker options available, token status summary, feature support map, version info.
### TODO 8: API Discoverability Parity
- Ensure API endpoint metadata mirrors CLI capability data.
- Add a protected endpoint:
`/api/v1/capabilities`.
- Keep OpenAPI tags aligned with CLI command groups.
### TODO 9: Regression Tests for Help Contracts
- Snapshot tests for:
root help, group help, key command help, capabilities JSON.
- Add contract tests ensuring new commands include metadata fields.
### TODO 10: Documentation Sync Automation
- Add a CI check that compares:
generated capabilities output vs docs command reference.
- Fail CI when command metadata and docs diverge.
+13
View File
@@ -24,6 +24,19 @@ Backups are published as parameterised replaceable events:
When restoring, SeedPass downloads the most recent manifest and applies any newer delta events.
## Deterministic Merge and Replay Behavior
Delta application uses deterministic conflict resolution so multiple devices
converge on the same state even when updates arrive out of order:
- newer `modified_ts` wins
- equal timestamp conflicts use deterministic hash tie-breaks
- deletions are tracked via tombstones in `_sync_meta.tombstones`
- stale payload replay does not override newer state
For the detailed merge contract, see
[sync_conflict_contract.md](sync_conflict_contract.md).
## Troubleshooting
- **No events found:** ensure the relays are reachable and that the correct fingerprint is selected.
+78
View File
@@ -0,0 +1,78 @@
# Policy As Code
SeedPass agent policy is stored as versioned JSON (`version: 1`) at:
- `~/.seedpass/agent_policy.json`
The policy file is treated as code: linted, reviewed, and then applied.
## Workflow
1. Create or edit a candidate policy file in source control.
2. Lint and normalize it:
```bash
seedpass agent policy-lint --file ./policy/agent_policy.json
```
3. Review differences against active policy:
```bash
seedpass agent policy-review --file ./policy/agent_policy.json
```
4. Apply with risk gate:
```bash
seedpass agent policy-apply --file ./policy/agent_policy.json
```
If review finds high-risk posture changes (for example `default_effect=allow`,
unsafe output defaults, or broad export enablement), apply is blocked unless
`--allow-risky` is supplied.
## Deterministic Metadata
`policy-lint`, `policy-review`, and `policy-apply` emit:
- `policy_stamp`: export-relevant deterministic stamp.
- `policy_hash`: full normalized-policy SHA-256 hash.
These values make policy changes auditable in CI and change reviews.
Policy-filtered export packages (`mode: policy_filtered`) include deterministic
manifest integrity metadata:
- `included_entry_indexes`
- `included_entry_count`
- `entries_sha256` (canonical hash of filtered entries)
`agent export-manifest-verify` validates these fields against current policy and
detects tampering (for example changed entry kinds or modified entry payloads).
## Remediation Bundles
You can generate an actionable remediation bundle from current posture findings:
```bash
seedpass agent posture-remediate
```
For profile runtime checks (quick unlock, KDF strength, partition unlock drift),
run with broker auth and fingerprint:
```bash
seedpass --fingerprint <fp> agent posture-remediate \
--check-runtime-config --auth-broker keyring
```
## Legacy Compatibility
Legacy policy keys are still accepted and normalized to the rule model:
- `allow_kinds`
- `deny_private_reveal`
- `allow_export_import`
Normalization keeps backwards compatibility while preserving strict validation
for versioned policy files.
+21
View File
@@ -33,3 +33,24 @@ The selected `time_cost` is stored in the profile's configuration and used for s
- Production readiness checklist: `docs/security_readiness_checklist.md`
- Threat model draft: `docs/threat_model.md`
- Agent autonomy plan: `docs/agent_autonomy_security_plan.md`
- Policy as code workflows: `docs/policy_as_code.md`
- Sync conflict determinism contract: `docs/sync_conflict_contract.md`
## Agent Security Controls (Current)
SeedPass now includes dedicated controls for autonomous and CI usage:
- Non-interactive auth brokers (`env`, `keyring`, `command`, `prompt`).
- Fine-grained policy controls with lint/review/apply flow.
- Scoped, revocable tokens and agent identity binding.
- One-time/N-use secret leases.
- Policy-enforced redaction defaults in agent outputs.
- Approval gates for high-risk operations.
- Secret-class isolation for high-risk material.
- Safer job automation primitives with signed templates and policy stamps.
- Deterministic, policy-filtered export controls with manifest verification.
- Posture checks and remediation generation for drift detection.
- Chained audit log integrity verification.
Use `seedpass capabilities --format json` for machine-readable feature discovery.
+26
View File
@@ -56,6 +56,32 @@ Status legend: `Not Started`, `In Progress`, `Blocked`, `Done`
- Independent audit completed.
- Critical findings resolved before broad production use.
## Agent Autonomy Control Track (15-Item Plan)
Status legend: `Not Started`, `In Progress`, `Implemented`, `Validated`
| # | Control | Status | Evidence |
|---|---------|--------|----------|
| 1 | Native non-interactive auth brokers | Implemented | `src/seedpass/core/auth_broker.py`, `src/seedpass/cli/agent.py` (`--auth-broker` flows) |
| 2 | Fine-grained RBAC per profile | In Progress | `agent_policy.json` rule model (`operations`, `kinds`, `label_regex`, `path_regex`, `fields`) in `src/seedpass/cli/agent.py` |
| 3 | Short-lived scoped tokens | Implemented | `agent token-issue/list/revoke`, token TTL/use constraints in `src/seedpass/cli/agent.py` |
| 4 | One-time secret leases | Implemented | `agent get --lease-only`, `agent lease-consume/list/revoke` |
| 5 | Policy-enforced redaction | Implemented | `safe_output_default` and redaction fields in policy + agent output paths |
| 6 | Auditable event log | Implemented | `~/.seedpass/agent_audit.log` chained records, `agent audit-verify` |
| 7 | Approval gates | Implemented | `agent approval-issue/list/revoke`; enforced for export/reveal high-risk actions |
| 8 | Secret-class isolation | Implemented | `agent high-risk-factor-set/unlock/status/lock`, partition migration/store modules |
| 9 | Agent identities | Implemented | `agent identity-create/list/revoke`; token identity binding |
| 10 | Safer automation primitives | Implemented | `agent job-run`, job profiles, signed cron/systemd/API templates |
| 11 | Recovery hardening | Implemented | `agent recovery-split/recover/drill/drill-list` |
| 12 | Conflict-safe sync primitives | Implemented | deterministic merge + tombstones in `src/seedpass/core/sync_conflict.py` |
| 13 | Policy as code | Implemented | `agent policy-lint/review/apply` + `docs/policy_as_code.md` |
| 14 | Deterministic export controls | Implemented | policy-filtered export manifests + `agent export-check/export-manifest-verify` |
| 15 | Security posture tooling | Implemented | `agent posture-check/posture-remediate` with runtime config checks |
Notes:
- `Implemented` indicates feature availability in CLI/API paths and tests.
- `Validated` should be used after broader integration soak + external security review.
## How To Use
1. Update each row with current status and owner.
+83
View File
@@ -0,0 +1,83 @@
# Sync Conflict Contract
This document defines the deterministic merge contract for index payloads handled by:
- `seedpass.core.encryption.EncryptionManager.decrypt_and_save_index_from_nostr(..., merge=True)`
- `seedpass.core.sync_conflict.merge_index_payloads(...)`
## Goals
- Deterministic convergence across devices.
- Idempotent replay of identical payloads.
- Safe deletion semantics that prevent stale resurrection.
## Merge Strategy
Current strategy ID:
- `modified_ts_hash_tombstone_v2`
Per-entry merge rules:
1. Higher `modified_ts` wins.
2. If `modified_ts` is equal, tie-break by canonical entry hash.
3. On equal timestamp, selected fields are union-merged deterministically:
- `tags` and `custom_fields` use canonical sorted union.
- Optional kind-specific fields are backfilled when one side is empty.
4. `archived` at equal timestamp uses conservative OR semantics.
## Tombstone Semantics
Deletions are represented in `_sync_meta.tombstones`:
```json
{
"_sync_meta": {
"tombstones": {
"<index>": {
"deleted_ts": 1710000000,
"entry_hash": "<optional-entry-hash>",
"event_hash": "<deterministic-event-hash>",
"source": "<optional-source-tag>"
}
}
}
}
```
Rules:
1. Tombstone with higher `deleted_ts` wins.
2. Equal `deleted_ts` tie-breaks by tombstone `event_hash`.
3. Entry vs tombstone:
- `entry.modified_ts < deleted_ts`: entry removed.
- `entry.modified_ts > deleted_ts`: tombstone dropped.
- equal timestamp: event hash tie-break.
## `_sync_meta` Contract
`_sync_meta` is merged deterministically and currently includes:
- `strategy`: merge strategy identifier.
- `last_merge_ts`: deterministic max timestamp observed during merge.
- `source_count`: count of tracked source tags.
- `sources`: lexicographically sorted source tags (bounded list).
- `tombstones`: bounded map of delete markers.
`last_merge_ts` must not depend on wall-clock time; it is derived from existing/incoming metadata and payload timestamps so replaying the same payload yields identical state.
## Replay and Ordering Guarantees
- Replaying the same payload must be idempotent.
- Applying stale payloads must not override newer state.
- Stale re-adds must not resurrect entries deleted by newer tombstones.
- Newer re-creates can legitimately supersede older tombstones.
## Retention
- Tombstones are retained in a bounded map (`TOMBSTONE_RETENTION_CAP`) to prevent unbounded metadata growth.
- The cap logic is deterministic.
## Test Coverage
Core invariants are covered in `src/tests/test_delta_merge.py`, including order independence, replay idempotency, stale replay handling, and tombstone convergence.
Loaded 100 of 243 files, more files were not shown because too many files have changed in this diff. Show more