mirror of
https://github.com/lukaszraczylo/claude-adam.git
synced 2026-07-07 03:44:26 +00:00
v0.2.0: drop cursor, add source_entries lifecycle, mandate memory frontmatter
Lifecycle redesign: - Each proposal records source_entries: [<ts>...] in frontmatter listing the journal timestamps that fed its cluster. - After apply/reject, skill calls adam/scripts/adam-archive.mjs which moves matching entries from journal.jsonl to journal/actioned-<id>.jsonl. - Agent reads applied/ + rejected/ frontmatter on each /reflect, builds an excluded-timestamps set, skips any leftover already-actioned entries. - cursor field in state.json is vestigial; agent ignores it. Effect: journal stays bounded by active observations. Rule changes re-evaluate the remainder without manual rewind. Race-safer for parallel sessions on shared state.json (no cursor write contention). Memory drafting: - agents/adam.md adds 'Memory drafting protocol' parallel to Skill drafting. - Memory proposals MUST contain auto-memory frontmatter (name, description, type, originSessionId) in '# Proposed change' body. - Skill enforces frontmatter check at apply time; refuses if missing. Tests: 18 -> 21. Two new tests for adam-archive happy path + no-op. Migration: existing applied proposals lack source_entries. Their backing journal entries archived as a one-time bulk migration; legacy proposals annotated with migration note.
This commit is contained in:
@@ -36,15 +36,16 @@ LLM coding sessions reveal repeated friction the moment you stop and look. ADAM
|
||||
├── skills/adam-self-improvement/SKILL.md # /reflect protocol
|
||||
├── commands/reflect.md # /reflect slash command
|
||||
└── adam/
|
||||
├── journal.jsonl # append-only signal log
|
||||
├── journal/ # rotated daily logs (>5 MB threshold)
|
||||
├── state.json # cursor + per-session counters
|
||||
├── usage.json # skill/agent invocation tallies
|
||||
├── journal.jsonl # append-only signal log (active observations)
|
||||
├── journal/ # rotated daily logs + actioned-<id>.jsonl per applied/rejected proposal
|
||||
├── state.json # per-session counters (cursor field is vestigial as of v0.2.0)
|
||||
├── usage.json # skill/agent invocation tallies + payload visibility counters
|
||||
├── proposals/ # queued, awaiting review
|
||||
├── applied/ # approved + auto-applied archive
|
||||
├── rejected/ # rejected (with reason)
|
||||
├── trash/ # soft-deleted artifacts (recoverable)
|
||||
└── tests/run-tests.sh # 18 verification tests
|
||||
├── scripts/ # adam-archive.mjs (called by skill on apply/reject)
|
||||
└── tests/run-tests.sh # 21 verification tests
|
||||
```
|
||||
|
||||
## Install
|
||||
@@ -71,7 +72,7 @@ After install:
|
||||
```
|
||||
Sum:
|
||||
+2 Signal repeated ≥3× across ≥2 sessions
|
||||
+2 Struggle signal repeated ≥3× within a single session (does not stack with above)
|
||||
+2 Struggle signal appearing ≥1× within a single session (does not stack)
|
||||
+2 Transcript contains positive endorsement near related action
|
||||
+1 Multi-axis cluster (≥2 distinct struggle types in same session)
|
||||
-1 Type-bias penalty (≥3 rejections, applied:rejected <1:2)
|
||||
@@ -88,6 +89,14 @@ auto_apply_eligible requires ALL:
|
||||
cross_session_evidence == true (single-session-only proposals always queue)
|
||||
```
|
||||
|
||||
## Lifecycle: how proposals become permanent
|
||||
|
||||
Every proposal records the journal entry timestamps that fed its cluster (`source_entries` in frontmatter). When you apply or reject a proposal, the skill calls `adam/scripts/adam-archive.mjs` which moves matching entries from `journal.jsonl` to `journal/actioned-<id>.jsonl`. Effects:
|
||||
|
||||
- The `journal.jsonl` stays bounded by **active** observations only.
|
||||
- The next `/reflect` reads applied/ + rejected/ frontmatter, builds an excluded-timestamps set, and skips any leftover journal entries that were already actioned.
|
||||
- Rule changes (e.g. lowering a threshold) immediately re-evaluate the remaining active observations — no manual cursor rewind needed.
|
||||
|
||||
## What it will not do
|
||||
|
||||
- No background LLM spend. The analyst runs only when you invoke `/reflect`.
|
||||
|
||||
Reference in New Issue
Block a user