Static copy
Copied from docs/en/governance/m9-exit-gate.md in https://github.com/poppy-team/prumo (MIT). Pinned to revision e91694d3959be1ed92757b34063efe0b2191821f, blob 1273ebade2b999024c5aa4763aaa500239bb6ace. The source repository remains canonical; this copy is refreshed through a sync pull request, not live.
Status: COMPLETE (M9 Exit Gate Passed)
Milestone M9 exit gate (per docs/development/phases.md): An agent can hand off to another agent or session with full structured context; session events are structured semantic units without conversational transcripts; summaries are generated per session and per Goal; the Experience Provider Contract governs episodic storage; experience proposals are validated before promotion; and retention policies manage storage expiration.
internal/experience/events.go: session_started, goal_selected, decision_made, checkpoint_saved, tool_executed, blocker_occurred, session_completed, handoff_created.schemas/experience-event.schema.json.internal/experience/summary.go: SynthesizeSessionSummary: aggregates completed tasks, current focus, active blockers, and decisions.SynthesizeGoalSummary: aggregates across all sessions contributing to a Goal, deriving progress status (planned, in_progress, blocked).internal/experience/handoff.go: pending, transferred, acknowledged, rejected).schemas/experience-handoff.schema.json.internal/experience/provider.go: ExperienceProvider with methods for recording events, saving/loading summaries, and creating/acknowledging handoffs.FileProvider implements thread-safe file storage under .prumo/experience/.internal/experience/proposal.go: ExperienceProposal.review_required: true) and cannot be promoted to canonical rules or workforce skills without governance approval.internal/experience/retention.go: FileProvider.Prune) cleans expired raw events while preserving synthesized summaries indefinitely.cmd/prumo/experience_commands.go and cmd/prumo/main.go: prumo-agent experience statusprumo-agent experience handoff create --id <id> --from <from> --to <to> --goal <goal>prumo-agent experience handoff show <id>prumo-agent experience handoff ack <id> --actor <actor>prumo-agent experience events --session <id>cmd/prumo/experience_commands_test.go.go test -race ./... — 100% pass across all packages.go vet ./... — clean.gofmt -l . — clean.python -m pytest -q — 136 pass (Python oracle preserved).internal/experience): all tests passing (100%).cmd/prumo): all tests passing (100%).Milestone M9 (Experience Layer) is COMPLETE. All criteria and exit gate invariants are satisfied.