docs: finalize bd-native memory fabric plan and phase-1 evidence
This commit is contained in:
parent
641db8b172
commit
9eb805cfa1
2 changed files with 261 additions and 0 deletions
108
docs/plans/2026-03-01-beads-native-memory.md
Normal file
108
docs/plans/2026-03-01-beads-native-memory.md
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
# Native Memory System Implementation Plan
|
||||
|
||||
Goal: establish a durable, low-noise, bd-native memory system with explicit retrieval, lineage, and selective enforcement.
|
||||
|
||||
## Final Architecture (Phase 1)
|
||||
|
||||
Memory uses a layered model:
|
||||
|
||||
1. Domain Anchors (open epics)
|
||||
- Purpose: stable index roots per domain
|
||||
- Type: `epic`
|
||||
- Labels: `memory,memory-anchor,<domain>`
|
||||
- Link style: `bd dep relate <anchor> <memory-node>`
|
||||
|
||||
2. Canonical Memory Nodes (closed decisions)
|
||||
- Purpose: immutable ratified rules/patterns
|
||||
- Type: `decision`
|
||||
- Labels: `memory,mem-canonical,mem-hard|mem-soft,<domain>`
|
||||
- Lifecycle: create -> ratify -> close; evolve with `bd supersede`
|
||||
|
||||
3. Execution Contracts (future phase)
|
||||
- Purpose: temporary blockers for hard constraints only
|
||||
- Type: `task|decision`
|
||||
- Labels: `memory-contract,mem-hard`
|
||||
- Link style: contract blocks active work; contract relates to canonical memory
|
||||
|
||||
## Query Model
|
||||
|
||||
Domain retrieval:
|
||||
```bash
|
||||
bd query "label=memory AND label=mem-canonical AND label=<domain> AND status=closed"
|
||||
```
|
||||
|
||||
Hard constraints only:
|
||||
```bash
|
||||
bd query "label=memory AND label=mem-canonical AND label=mem-hard AND status=closed"
|
||||
```
|
||||
|
||||
Attach context to active work:
|
||||
```bash
|
||||
bd dep relate <active-id> <memory-id>
|
||||
```
|
||||
|
||||
## Data Contract for Canonical Memory
|
||||
|
||||
Title:
|
||||
- `[MEMORY][<DOMAIN>][HARD|SOFT] <atomic rule sentence>`
|
||||
|
||||
Description fields:
|
||||
- Scope
|
||||
- Out of Scope
|
||||
- Rule
|
||||
- Rationale
|
||||
- Failure Mode
|
||||
|
||||
Acceptance:
|
||||
- Given/When/Then invariant + concrete verification commands
|
||||
|
||||
Metadata JSON:
|
||||
```json
|
||||
{
|
||||
"memory_version": 1,
|
||||
"memory_strength": "hard|soft",
|
||||
"domain": "memory-...",
|
||||
"effective_date": "YYYY-MM-DD",
|
||||
"owner": "team",
|
||||
"supersedes": null,
|
||||
"superseded_by": null
|
||||
}
|
||||
```
|
||||
|
||||
## Phase 1 Execution Evidence (2026-03-02)
|
||||
|
||||
Tracking bead:
|
||||
- `beadboard-yz6`
|
||||
|
||||
Anchors created:
|
||||
- `beadboard-76p` `[MEMORY-ANCHOR] Architecture`
|
||||
- `beadboard-fld` `[MEMORY-ANCHOR] UI/UX`
|
||||
- `beadboard-nq9` `[MEMORY-ANCHOR] Workflow Protocol`
|
||||
- `beadboard-5r1` `[MEMORY-ANCHOR] Agent Operations`
|
||||
- `beadboard-8st` `[MEMORY-ANCHOR] Reliability and Errors`
|
||||
|
||||
Canonical memories created and closed:
|
||||
- `beadboard-116` `[MEMORY][WORKFLOW][HARD] Evidence before completion claims`
|
||||
- `beadboard-dvp` `[MEMORY][AGENT][SOFT] Parallelize independent work with clear ownership`
|
||||
- `beadboard-60a` `[MEMORY][ARCH][HARD] Dependencies model execution order, not visual order`
|
||||
- `beadboard-zas` `[MEMORY][ARCH][HARD] Shared logic for cross-view behavior`
|
||||
- `beadboard-duo` `[MEMORY][UX][SOFT] User-facing copy must stay simple and explicit`
|
||||
- `beadboard-6fv` `[MEMORY][RELIABILITY][HARD] Triage stale-state bugs via parity and watcher checks`
|
||||
- `beadboard-fga` `[MEMORY][RELIABILITY][SOFT] Workarounds require trigger rollback and owner`
|
||||
|
||||
Connectivity verified via `bd dep list` on each anchor and `bd query` for canonical closed memory labels.
|
||||
|
||||
## Next Phase
|
||||
|
||||
1. Add task-start routine in agent protocol:
|
||||
- query by domain
|
||||
- relate top relevant memories
|
||||
- elevate only hard constraints into contract blockers
|
||||
|
||||
2. Add lint/guardrail checks:
|
||||
- active task in a domain must have at least one memory relation
|
||||
- applicable hard memories must have a contract blocker before completion
|
||||
|
||||
3. Add pruning policy:
|
||||
- promote repeated incidents into canonical decisions
|
||||
- supersede stale workaround memory nodes
|
||||
153
docs/plans/2026-03-02-bd-memory-fabric-design.md
Normal file
153
docs/plans/2026-03-02-bd-memory-fabric-design.md
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
# BeadBoard Memory Fabric Design
|
||||
|
||||
## Why A/B/C feel insufficient
|
||||
|
||||
- Option A (Vector Node Pattern) is strong for immutable history and retrieval, but weak on enforcement. Agents can skip query steps and still proceed.
|
||||
- Option B (Active Protocol Roster) is strong for visibility and onboarding, but weak on audit integrity. Directly mutating a single Epic note creates merge noise and weak provenance.
|
||||
- Option C (Execution Contract Pattern) is strong for hard enforcement, but too rigid. If every memory becomes a blocker, throughput drops and dependency graphs become noisy.
|
||||
|
||||
The core issue: each option optimizes one axis and sacrifices the other two.
|
||||
|
||||
## Recommended Architecture: Option D "Memory Fabric" (Layered)
|
||||
|
||||
Use three memory layers, each mapped to a specific `bd` mechanism:
|
||||
|
||||
1. Canonical Memory Nodes (immutable knowledge)
|
||||
- Type: `decision`
|
||||
- Status: `closed` once ratified
|
||||
- Labels: `memory`, one domain label (`memory-ux`, `memory-arch`, etc.), one strength label (`mem-hard` or `mem-soft`)
|
||||
- Fields:
|
||||
- `title`: single rule statement in plain language
|
||||
- `description`: Scope / Out of Scope / Rule / Rationale / Failure Mode
|
||||
- `acceptance`: objective checks for compliance
|
||||
- `metadata`: JSON with `version`, `supersedes`, `effective_date`, `owner`
|
||||
|
||||
2. Active Domain Anchors (discoverability and curation)
|
||||
- Type: `epic`
|
||||
- Status: `open`
|
||||
- Labels: `memory-anchor`, domain label
|
||||
- Purpose: stable index/root for each domain; minimal mutable notes
|
||||
- Linking:
|
||||
- `bd dep relate <anchor> <memory-node>` for semantic association
|
||||
- no blocker semantics by default
|
||||
|
||||
3. Execution Contracts (selective enforcement)
|
||||
- Type: `task` or `decision`
|
||||
- Status: `open` while unresolved
|
||||
- Labels: `memory-contract`, `mem-hard`
|
||||
- Usage: only for high-risk constraints (security, data integrity, release gates)
|
||||
- Linking:
|
||||
- contract blocks active work: `bd dep add <active-work> <contract>`
|
||||
- contract relates to canonical node: `bd dep relate <contract> <memory-node>`
|
||||
|
||||
This gives us A retrieval, B visibility, and C enforcement only where needed.
|
||||
|
||||
## Memory Lifecycle
|
||||
|
||||
1. Propose
|
||||
- Create draft decision bead with labels `memory,draft,<domain>`.
|
||||
|
||||
2. Ratify
|
||||
- Validate wording and acceptance checks.
|
||||
- Close it as canonical memory.
|
||||
|
||||
3. Index
|
||||
- Relate the canonical node to its domain anchor Epic.
|
||||
|
||||
4. Inject into work
|
||||
- For every new feature/task, run domain query and attach context:
|
||||
- `bd query "label=memory AND label=<domain> AND status=closed"`
|
||||
- `bd dep relate <active-id> <memory-id>` for soft guidance
|
||||
- if `mem-hard`, create/attach execution contract as blocker
|
||||
|
||||
5. Evolve
|
||||
- Never edit closed canonical rule text.
|
||||
- Create successor bead and use `bd supersede <old> <new>`.
|
||||
- Add note to old bead: "Superseded by <new-id> on <date>".
|
||||
|
||||
## Query Model
|
||||
|
||||
Primary retrieval queries:
|
||||
|
||||
- Domain memory set:
|
||||
- `bd query "label=memory AND label=memory-arch AND status=closed" --sort updated --reverse`
|
||||
- Hard constraints only:
|
||||
- `bd query "label=memory AND label=mem-hard AND status=closed"`
|
||||
- Anchor-centric context:
|
||||
- `bd show <anchor-id>` and inspect related memory nodes
|
||||
|
||||
Recommended ingestion sequence at task start:
|
||||
|
||||
1. Collect matching domain memories
|
||||
2. Attach all as `relates_to`
|
||||
3. Promote only `mem-hard` into blocker contracts
|
||||
4. Record acknowledgement note in active bead
|
||||
|
||||
## Data Contract for Canonical Memory Beads
|
||||
|
||||
Use this strict shape to keep memory machine-readable and human-auditable.
|
||||
|
||||
Title format:
|
||||
- `[MEMORY][<DOMAIN>][HARD|SOFT] <Rule sentence>`
|
||||
|
||||
Description template:
|
||||
- Scope:
|
||||
- Out of Scope:
|
||||
- Rule:
|
||||
- Rationale:
|
||||
- Failure Mode:
|
||||
|
||||
Acceptance template:
|
||||
- Given <context>, when <action>, then <expected invariant>
|
||||
- Verification command(s): <exact command list>
|
||||
|
||||
Metadata JSON template:
|
||||
```json
|
||||
{
|
||||
"memory_version": 1,
|
||||
"memory_strength": "hard",
|
||||
"domain": "memory-arch",
|
||||
"effective_date": "2026-03-02",
|
||||
"owner": "team",
|
||||
"supersedes": null,
|
||||
"superseded_by": null
|
||||
}
|
||||
```
|
||||
|
||||
## Governance Rules
|
||||
|
||||
- Do not store memory in markdown notes as source-of-truth.
|
||||
- Do not use optional fields to bypass schema rigor.
|
||||
- Every hard memory must include explicit acceptance checks.
|
||||
- Every supersession must use `bd supersede` + metadata update + note.
|
||||
- Contracts are temporary enforcement wrappers, not long-lived policy storage.
|
||||
|
||||
## Migration Plan From Current State
|
||||
|
||||
1. Create anchors
|
||||
- `EPIC: Memory Anchor - Architecture`
|
||||
- `EPIC: Memory Anchor - UI/UX`
|
||||
- `EPIC: Memory Anchor - Workflow`
|
||||
|
||||
2. Convert existing protocol statements from `AGENTS.md` into canonical memory decision beads.
|
||||
|
||||
3. Classify each as `mem-soft` or `mem-hard`.
|
||||
|
||||
4. Relate all canonical nodes to anchors.
|
||||
|
||||
5. Add task-start routine:
|
||||
- query domain memories
|
||||
- relate them to active bead
|
||||
- create blockers only for `mem-hard`
|
||||
|
||||
6. Add lint/check script (or CI step):
|
||||
- fail when active bead has no memory relations for its declared domain
|
||||
- fail when `mem-hard` memory exists but no corresponding contract/blocker is attached
|
||||
|
||||
## Why this is stronger
|
||||
|
||||
- Auditability: immutable canonical nodes + supersession graph.
|
||||
- Precision: structured schema and acceptance contracts.
|
||||
- Performance: contracts only for high-risk rules, not every memory.
|
||||
- Discoverability: always-on anchors make the graph readable.
|
||||
- Operational fit: uses existing `bd` commands only.
|
||||
Loading…
Add table
Add a link
Reference in a new issue