mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-10-27 07:52:03 +00:00
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:
commit
24aa3f12a2
243 files changed
+16609
-1681
No files matched your search
@@ -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'
|
||||
|
||||
@@ -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"}
|
||||
@@ -0,0 +1 @@
|
||||
MEMORY_STORED
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -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.*
|
||||
@@ -0,0 +1 @@
|
||||
# Flaky Tests Report
|
||||
@@ -0,0 +1 @@
|
||||
No flaky tests detected in 3 loops.
|
||||
@@ -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.
|
||||
@@ -0,0 +1 @@
|
||||
src/utils/memory_protection.py:6:# TODO: Replace this Python implementation with a Rust/WASM module for
|
||||
@@ -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`
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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
Reference in new issue
Block a user