Foundry's event model defines the vocabulary of immutable facts that flow
through the system. Events carry payloads describing what occurred but have
no opinion about what should happen next — task blocks make those decisions.
The canonical event type definitions live in
foundry-core/src/event.rs (EventType enum). The implementation
roadmap for completing all task blocks and workflows is in
IMPLEMENTATION_PLAN.md at the project root.
Event Emitter Purpose
maintenance_run_startedOrchestrator / manual Begins a per-project maintenance chain
maintenance_run_completedOrchestrator (fan-in) All projects finished; carries aggregate results
Event Emitter Purpose
project_validation_completedValidateProject Pre-flight check (dir, branch, gates)
project_iteration_completedRouteGateResult One structural improvement attempted
project_maintenance_completedRouteGateResult Dependencies updated, gates verified
project_changes_committedCommitAndPush Git commit created
project_changes_pushedCommitAndPush Pushed to remote
Event Emitter Purpose
release_tag_auditedAuditReleaseTag Latest tag scanned for vulnerabilities
main_branch_auditedAuditMainBranch Main branch checked for same vulnerability
release_requestedAudit chain Intent to cut a patch release
release_completedCutRelease Tag pushed
Event Emitter Purpose
vulnerability_detectedExternal / nightly audit Entry point for remediation workflow
remediation_startedRemediateVulnerability Fix attempt underway
remediation_completedRemediateVulnerability Fix attempt finished (success or failure)
Event Emitter Purpose
release_pipeline_completedWatchPipeline GitHub Actions finished building and publishing
local_install_completedInstallLocally Tool reinstalled on local machine
Every event has:
id — Deterministic SHA256 hash of (type + project + occurred_at + payload)
event_type — One of the EventType enum variants
project — Which project this event relates to
occurred_at / recorded_at — When it happened vs. when it was logged
throttle — Propagated through the chain to control downstream behaviour
payload — Event-type-specific JSON data
Downstream blocks read payload fields to make routing decisions (self-filtering).
The engine routes by event type only — it cannot inspect payloads.
Field Used By Values
vulnerableAuditMainBranch true/false — whether the tag has known CVEs
dirtyRemediateVulnerability, CutRelease true/false — whether main still has the vulnerability
cveAll vulnerability blocks CVE identifier string
statusDownstream blocks "ok"/"error" — validation and completion status
has_changesCommitAndPush Whether there are uncommitted changes to persist