PACE (Personal Activity Canvas Engine) is an AI-powered Strava activity image generator that automatically turns your workouts into visually compelling images. It analyzes activity data and context to create shareable, expressive visuals for each Strava activity, helping athletes present their performance and stories in a more engaging and personalized way.
Note: This project is being developed and supported in collaboration with AIs.
GitHub Actions workflows serve as the canonical validation, so no separate local test command is required. Validation happens entirely in CI using a two-stage workflow:
- Static OpenSpec validation β runs the OpenSpec CLI against the repository, renders totals and a table showing every validated spec, and exposes the raw JSON for follow-on jobs. Failures block the run and unlock an AI fix pipeline that requires manual approval.
- AI validation β scopes to the official
openspec/specstree, keeps a detailed table of each validated spec even when there are no violations, and logs prompts/notes for debugging. Only the tracked spec files are shown in the summary, and the job still reports every violation it finds. - AI-based violation fixing β triggered via a reusable workflow once validation fails and approval is granted. It runs CodeMie with the validation summary, captures the suggested changes, and opens a PR that clearly states it was generated by the agent.
Key Points:
- Both validations run in PARALLEL
- AI needs approval BEFORE it runs
- View results in GitHub Actions Summary
- PR merge re-triggers both workflows
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Developer Action: Push to main, open PR, or Manual Trigger β
β (changes to openspec/**, workflows, validation packages) β
βββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββ
βΌ βΌ
βββββββββββββββββββββ βββββββββββββββββββββ
β OpenSpec β β AI Validation β
β Static Validation β β (requires manual β
β (runs auto) β β approval first) β
βββββββ¬ββββββββββββββ βββββββββ¬ββββββββββββ
βββββββββββ΄βββββββββββ ββββββ΄βββββββββββββ
βΌ βΌ βΌ βΌ
PASS FAIL FAIL PASS
β β β β
β βΌ βΌ β
β ββββββββββββββββββββ β
β β Approve OpenSpec β β
β β fix (manual) β β
β ββββββ¬ββββββββββββββ β
β Approved β
β β β
β βΌ β
β ββββββββββββββββββββ β
β β AI Fix β β
β ββββββ¬ββββββββββββββ β
β β β
β ββββββββββββββββββββ β
β β PR created: β β
β β agent/specs-fix- β β
β β {run_id} β β
β ββββββ¬ββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββ β
β β Developer reviewsβ β
β β & merges PR β β
β ββββββ¬ββββββββββββββ β
ββββββββββββββββββββ΄βββββββββββββββββββββββββββββββΊ DONE
Workflow Details:
ββββββββββββββββββββββββββββββββββββββββββββββ
β OpenSpec Static β
β β’ Scope: openspec/specs/ β
β β’ Output: Table of all specs β
β β’ On fail: Unlocks AI fix approval β
ββββββββββββββββββββββββββββββββββββββββββββββ€
β AI Validation β
β β’ Approval: BEFORE running β
β β’ Scope: openspec/specs/ β
β β’ Output: Detailed spec table β
β β’ On fail: Unlocks fix approval β
ββββββββββββββββββββββββββββββββββββββββββββββ€
β Fix Workflow β
β β’ Approval: AFTER validation fails β
β β’ Action: Agent creates PR β
β β’ Result: Dev reviews β merge β re-trigger β
ββββββββββββββββββββββββββββββββββββββββββββββ
