---
id: SEED-004
status: folded
planted: 2026-05-20
folded: 2026-05-20
folded_into: Phase 24 (D-07, D-08)
folded_into_file: .planning/phases/24-tracked-dir-forked-repo-layout-agents-projects-branches-sess/24-CONTEXT.md
planted_during: v1.8 Phase 23 (commune/signoff stamping)
trigger_when: when Phase 24 / 24.1 tracked-dir restructure lands (tracked/projects/ + tracked/agents/{id}/ split)
scope: small
---

# SEED-004: Stamp params in psyche commit descriptions (tracked/projects + tracked/agents)

## Why This Matters

Phase 23 added `Stamp { machine, project, branch?, head_sha?, head_subject? }` to commune
and signoff payloads — but the underlying psyche-commit messages themselves don't carry
the same provenance. Once Phase 24/24.1 splits psyche storage into `tracked/projects/{name}/`
and `tracked/agents/{agent_id}/`, each commit lives in a per-scope file. Embedding stamp
fields in the commit description means git log alone surfaces:

- Which machine wrote the snapshot (multi-machine agents)
- Which working branch + HEAD SHA the snapshot reflects (drift forensics)
- Which project context produced the commit (for `tracked/agents/` — same agent, many projects)

This unlocks `git log` as a first-class drift / provenance tool without parsing file bodies,
and makes blame-style forensics across machines tractable.

## When to Surface

**Trigger:** when Phase 24 (tracked-dir layout) or Phase 24.1 (`tracked/agents/{id}/info.json`)
is in planning. The commit-message format depends on directory shape locking first.

## Scope

### tracked/projects/{name}/ commits
Include: `machine`, `branch`, `head_sha`, `head_subject`
(omit `project` — already implied by directory path)

### tracked/agents/{agent_id}/ commits
Include: `machine`, `project`, `branch`, `head_sha`, `head_subject`
(all five — same agent traverses many projects)

Likely shape: trailers in commit description, e.g.

```
context: doyle echo commune

Machine: HFENDULEAM
Project: claude_skill_owl
Branch: main
Head-SHA: a289f5b517c22aee29102fb14690bb80bcdd1a9f
Head-Subject: chore: bump spt plugin to v1.10.15
```

Or compact YAML-in-trailer form — TBD during plan-phase.

## Scope Estimate

**Small** — `Stamp::event_attrs()` / `Stamp::yaml_frontmatter()` already exist in
`src/common/git.rs`. Add a `Stamp::commit_trailers()` renderer + thread it through
the psyche commit pipeline (touch_loop / echo_commune / signoff write paths).
Add per-scope variant (omit `project` for tracked/projects/).

## Breadcrumbs

- `src/common/git.rs` — existing `Stamp` + renderers (Phase 23)
- `src/live/echo_commune.rs`, `src/live/touch_loop.rs`, `src/live/init_signoff.rs` — commit call sites
- `.planning/seeds/SEED-003-relocate-working-perches-nested-under-parent.md` — related tracked-dir restructure
- Psyche context — Phase 24 (`fe65bc4`, tracked-dir layout, 11 SCs), Phase 24.1 (`facd167`, info.json)

## Notes

Capture timing: planted same session Phase 23 deploy finishing. Defer until Phase 24/24.1
directory shape locks, since trailer field choice depends on per-scope split.
