feat(mol): spawn molecules as ephemeral by default (bd-2vh3.2)

Molecule spawning now creates ephemeral issues that can be bulk-deleted
when closed using `bd cleanup --ephemeral`. This supports the ephemeral
molecule workflow pattern where execution traces are cleaned up while
outcomes persist.

Changes:
- Add `ephemeral` parameter to cloneSubgraph() and spawnMolecule()
- mol spawn: ephemeral=true by default, add --persistent flag to opt out
- mol run: ephemeral=true (molecule execution)
- mol bond: ephemeral=true (bonded protos)
- template instantiate: ephemeral=false (deprecated, backwards compat)

This is Tier 1 of the ephemeral molecule workflow epic (bd-2vh3).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-21 13:44:25 -08:00
parent 169684754d
commit d6ab9ab62c
6 changed files with 21 additions and 14 deletions

View File

@@ -268,7 +268,7 @@ func TestCloneSubgraph(t *testing.T) {
}
vars := map[string]string{"version": "2.0.0"}
result, err := cloneSubgraph(ctx, s, subgraph, vars, "", "test-user")
result, err := cloneSubgraph(ctx, s, subgraph, vars, "", "test-user", false)
if err != nil {
t.Fatalf("cloneSubgraph failed: %v", err)
}
@@ -308,7 +308,7 @@ func TestCloneSubgraph(t *testing.T) {
}
vars := map[string]string{"service": "api-gateway"}
result, err := cloneSubgraph(ctx, s, subgraph, vars, "", "test-user")
result, err := cloneSubgraph(ctx, s, subgraph, vars, "", "test-user", false)
if err != nil {
t.Fatalf("cloneSubgraph failed: %v", err)
}
@@ -367,7 +367,7 @@ func TestCloneSubgraph(t *testing.T) {
t.Fatalf("loadTemplateSubgraph failed: %v", err)
}
result, err := cloneSubgraph(ctx, s, subgraph, nil, "", "test-user")
result, err := cloneSubgraph(ctx, s, subgraph, nil, "", "test-user", false)
if err != nil {
t.Fatalf("cloneSubgraph failed: %v", err)
}
@@ -402,7 +402,7 @@ func TestCloneSubgraph(t *testing.T) {
}
// Clone with assignee override
result, err := cloneSubgraph(ctx, s, subgraph, nil, "new-assignee", "test-user")
result, err := cloneSubgraph(ctx, s, subgraph, nil, "new-assignee", "test-user", false)
if err != nil {
t.Fatalf("cloneSubgraph failed: %v", err)
}