Uh oh!
There was an error while loading. Please reload this page.
chore(main): release 1.0.0 - #2
Closed
github-actions[bot] wants to merge 131 commits into
Closed
Conversation
…e features Co-authored-by: johnnyhuy <27847622+johnnyhuy@users.noreply.github.com>
Co-authored-by: johnnyhuy <27847622+johnnyhuy@users.noreply.github.com>
…g main app entry, content view, and project configuration
feat(docs): add CONTRIBUTING.md for development setup and guidelines chore(docs): remove outdated iOS README and update links in main README chore(docs): create new documentation for running the app and troubleshooting chore(docs): enhance API and usage examples with additional details chore(mise): update build commands to streamline project generation and building
…macOS-latest for iOS builds
…r-betterfit Implement BetterFit iOS strength training coach core framework
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
December 24, 2025 15:48
6fc32c7 to
9023db0Comparegithub-actionsBotforce-pushed
the
release-please--branches--main
branch
from
December 26, 2025 14:35
9023db0 to
1dd2356Compare- TabNavigationUITests: verify all 4 tabs accessible, Start Workout button visible and positioned correctly on each tab, transition to active workout state - ProfileJourneyUITests: cover Profile header, Health Overview, Weekly Targets, Personal Records (empty state + View All sheet), Achievements, Yearly Wrapped - Add UI interruption monitor to handle system permission dialogs in tests
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
May 11, 2026 12:31
7b7b0e1 to
f671423Comparegithub-actionsBotforce-pushed
the
release-please--branches--main
branch
from
May 17, 2026 02:06
f671423 to
17915beCompare* feat: add animations across the app - AnimatedCounter: count-up animation on appear for weekly goals and PR values in Profile (0→target over 0.8-1.0s) - FitnessIcon: gentle pulse scale animation (1.0→1.1) on fitness/exercise icons throughout the app - StartWorkoutGlow: The Finals style shine/shimmer effect on the yellow Start Workout button - Previous commit already fixed HealthKit demo data pollution (skip saving demo workouts to Apple Health) - Fixed CI: move iOS-only AuthService.swift to iOS app (was breaking Ubuntu CI with ObservableObject) - Remove iOS 26-only API usage (glassEffect) from shared preview code — fallback to shadow overlay - Replace GlassEffectContainer with plain HStack/VStack for iOS < 26 * fix: AppConfigurationTests cString optional unwrap for Linux CI
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
May 18, 2026 13:33
17915be to
512c226Compare…nce preference (#9) - Adds AppearancePreference (system/light/dark) backed by AppStorage. - Refactors AppTheme to expose scheme-aware tokens: textPrimary/Secondary/Tertiary, cardBackground(for:), cardStroke(for:), backgroundGradient(for:), accentSurface(_:for:), shadowColor/Radius(for:). - Resolves the Classic accent from a generic .blue to a fixed RGB so all themes have deterministic colors. - Adds view modifiers: bfTextPrimary/Secondary/Tertiary and bfBackground. This is the foundation for migrating every screen to light/dark support and consistent text contrast across the five themes. Co-authored-by: opencode-agent <noreply@opencode.ai>
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
June 21, 2026 10:33
512c226 to
96e6523Comparegithub-actionsBotforce-pushed
the
release-please--branches--main
branch
from
July 24, 2026 08:12
96e6523 to
d3d7ea7Compare* feat(iOS): add Fitbod design system and restyle screens
Introduces a token-based Design System (BFColors, BFTypography, BFSpacing,
BFButtonStyles, BFComponents) that replaces the old theme gradients
with flat dark surfaces and a Fitbod-style ember accent.
Adds AppearancePreference so users can pick System / Light / Dark, plus
a pair of new core files (AccentSurfaceOpacity, AppearancePreference) and
a default-theme storage key.
Restyles every screen to the new tokens: dark surfaces, hairline
borders, uppercase section labels, monospaced-digit stat tiles, generic
athletic outfit, no Nike, no Rogue/REP text on plates, no gradient
page backgrounds.
Fixes plan-sync on Start Workout: prefer today's plan, fall back to
the recommended workout, then mirror the started workout into the plan
so the home preview and Plan tab show the same exercises.
Wires ExerciseDetailSheet onDelete / onUpdate to the active workout
or today's plan. Adds updateActiveWorkout to BetterFit (the new
mid-session editor). Renders home rep motion from the active workout
when one is running, falling back to the plan.
Removes the unused ActiveWorkout / NumpadInputView / WorkoutExercise
DetailView files (dead code; the compact home rep card replaced them).
Tightens StaticTimelineRow layout so exercise names fit, removes the
redundant trailing category icon, and makes the row size to its
content instead of clipping at a fixed 80pt height.
* feat(watch): add WatchTheme and restyle watch screens
Adds Apps/iOS/BetterFitWatchApp/WatchTheme.swift with a token-based
palette (ember accent, near-black surfaces, plain outfit, 6 mm thick
Cinder block-style text) and applies it to WorkoutListView,
ActiveWorkoutView, NotificationsView, and ContentView. Uses
fal-style on-tab color and embeds WatchTheme as the source of truth
for the watch app's color system.
Locks large tap targets (> 44pt), keeps the existing font sizes, and
removes inline hardcoded colors. Same character across the watch app
matches the iOS app, so demos look consistent between devices.
* feat(core): expose updateActiveWorkout for mid-session edits
Adds BetterFit.updateActiveWorkout(_:) and
AutoTrackingService.updateCurrentWorkout(_:). These let the app
mutate the active workout in place (add, remove, or edit exercises)
without cancelling the session, which the iOS app's ExerciseDetailSheet
delete / update handlers and AddExerciseSheet now rely on.
The update is a no-op when no workout is active, and clamps the
exercise index back into range so the existing auto-tracking loop
can't go out of bounds.
* feat(pipeline): add exercise demo video generator
scripts/exercise-video-pipeline/ generates 5-second looping rep
videos for each exercise in the catalogue, two angles per exercise.
Pipeline:
Stage 1 (anchors) fal-ai/flux-2/flash generates a start-pose image
per exercise per camera. The prompt freezes a
CHARACTER_SCENE_BLOCK (man + outfit + studio)
and injects an equipment_block per exercise
(Rogue / REP / bar type, plate count, total
weight, real dimensions).
Stage 2 (videos) fal.ai animates one rep. Default backend is
xai/grok-imagine-video/reference-to-video for
speed; override with FAL_VIDEO_ENDPOINT to
use Veo 3.1 first-last-frame (tighter consistency
on bar / plate count, slower, pricier).
Cross-exercise character consistency: a master character reference
(_character__<angle>.jpg) is generated once and passed to every video
as the character ref. Per-exercise start-pose anchors stay unique so
the rep motion is correct, but the man + outfit + studio stay
identical.
Equipment specs:
- Iron cast plates (17.5 in / 1.3 in thick) for lighter loads
(90 to 225 lb exercises: curls, RDL, bench, OHP).
- Black rubber bumper plates (17.7 in / 2.9 in thick) for heavier
loads (270+ lb: squat, deadlift, trap bar deadlift).
- Mixed-diameter stacks for OHP, RDL, bench (45 + 25 + 10 per
side, 17.5 in then 11 in then 9 in) - exactly how a real bar
looks when a lifter loads it for working sets.
- Bar types: Rogue Ohio Power Bar (straight), Rogue ZEUS (W-shaped
EZ-curl), Rogue TB-1 (hexagonal trap bar), Rogue Monster Lite
(flat bench). No text or brand markings on plates.
Prompts: forbid 'no text, letters, numbers, or labels on the plates
or bar'. Embeds the same equipment and pose description into both the
anchor and the video prompt so the start frame and the video's first
frame match.
Caching: skip-if-exists on anchors, character refs, and videos so
re-runs only refresh the entries whose source file changed.
Generated images and videos are .gitignore'd (anchors/, videos/,
archive-*/); re-run the script to regenerate locally.
* feat(app): wire generated demo videos into exercise details
Bundles 8 short demo videos (one per exercise) into the app via
Apps/iOS/BetterFitApp/Resources/Videos/. Videos are the front45 outputs
from scripts/exercise-video-pipeline/ (barbell curl, EZ curl, back
squat, bench press, conventional deadlift, overhead press, Romanian
deadlift, trap bar deadlift).
Adds a DemoVideoPlayer component (SwiftUI + AVKit) that auto-plays
and loops the bundled video when present, or falls back to the
existing gradient placeholder. Uses AVPlayerItemDidPlayToEndTime
notification to seamlessly loop the short rep videos.
Adds a DemoVideoLibrary enum that fuzzy-matches the exercise name
against known slugs ('Standing Barbell Curl' -> 'barbell-curl',
'Back Squat' -> 'back-squat', etc.) and returns the bundled URL.
ExerciseDetailSheet now embeds the video player in place of the static
gradient. ~14.7 MB added to the binary.
* feat(app): add ActiveSessionView workout tracker
Adds a minimal set-tracker sheet that opens when the user pauses
an active workout. Lets the lifter:
- See each exercise in the workout as a card with name and 'Set N
of M' indicator
- Tap weight and reps (pre-filled from the existing target weight
and rep count on the workout model)
- Tap 'Log Set' to record the set — persists back to the
BetterFit model via updateActiveWorkout, advances the per-set
counter, and shows the set in a 'Completed sets' list with a
green checkmark
- Tap 'End' in the toolbar to complete the workout (via
completeWorkout which sets isCompleted and computes duration)
The Pause button on the floating workout controls now opens this
sheet on the first tap (and any subsequent Pause press); the
existing Resume flow resumes without opening the sheet. Same
SessionId-style data flows through BetterFit.updateActiveWorkout so
the completed sets persist into the workout record the same way the
deleted ActiveWorkout screens used to.
~280 lines, single file at
Apps/iOS/BetterFitApp/Features/ActiveWorkout/ActiveSessionView.swift
plus a small wiring change to RootTabView's pause handler.
* feat(app): add rest timer to active session sheet
Adds a sticky rest-timer bar at the top of the ActiveSessionView
sheet that auto-starts the moment a set is logged, so the lifter can
put the phone down between sets and come back when the timer is
up.
RestTimerState (struct):
- start (Date) + duration (TimeInterval), with addSeconds(15) for
the '+15s' quick-add button
- remaining(at:) clamped to zero so the progress ring and countdown
never display a negative number
- progress(at:) for the circular ring
- isFinished(at:) flips the accent color to green at zero
RestTimerBar (view):
- TimelineView(.periodic(from: .now, by: 1)) so it redraws every
second without a manual Timer — wakes on every tick, reads the
current state, returns the rendered view
- 52-pt circular progress ring, mm:ss in monospaced digits inside,
'Rest timer / Between sets' labels, '+15s' capsule, 'Skip' plain
- .move(edge: .top) transition on appear/disappear so the bar slides
in/out when a set is logged / the user taps Skip
Log Set flow:
- Update set count, persist via BetterFit.updateActiveWorkout,
increment position counter, fire UIImpactFeedbackGenerator
(light) for tactile confirmation
- Replace restTimer with a fresh RestTimerState at the configured
duration (default 90 s, state held in @State for future
per-exercise override)
Skip just nils the restTimer; the bar slides away. Next set
auto-starts a new timer. The bar's surface uses BFColors.background
Elevated so it reads as a layer over the exercise list without
pushing content down (no .frame() / .padding() layout shift).
~150 net lines.
* feat(pipeline): per-slug video endpoint override + smoke tests
Generates the curl (and any other plate-count-drifting) videos on a
tighter backend (default: Veo 3.1 first-last-frame) while the rest
of the batch stays on the cheap Grok reference-to-video default.
FAL_VIDEO_OVERRIDES="slug1:endpoint1,slug2:endpoint2"
FAL_VIDEO_OVERRIDES="" # disable overrides
Lookup rules:
- exact-prefix match against slug:endpoint pairs (longest match wins
if a slug is a prefix of another, e.g. 'bench' vs 'bench-press')
- empty / unset falls through to FAL_VIDEO_ENDPOINT
- inline ' # comment' after an entry is stripped
- unknown slugs use the default
The loop logs an 'override: <slug> -> <endpoint>' line whenever the
resolved endpoint differs from FAL_VIDEO_ENDPOINT.
scripts/exercise-video-pipeline/test_pipeline.sh covers the override
resolver, the equipment_block coverage per slug, the anti-text
directive in the assembled prompt, the 'lb total' weight declaration
that proves per-exercise specs, and the archive-*/ gitignore
hygiene. 23 assertions, runs anywhere without FAL_KEY.
mise.toml:
- 'test' now runs the pipeline smoke test before swift test
- 'pipeline:test' runs the smoke test only
- 'pipeline:regen' re-runs generate.sh (uses FAL_VIDEO_OVERRIDES /
FAL_VIDEO_ENDPOINT env)
* feat(app): add Settings sheet with units and account
Profile Me tab now opens a Settings sheet (units, notifications,
account, about). WeightUnitSetting moves into the BetterFit package
so package unit tests cover lb/kg conversion; guests keep Settings
but no Sign Out row.
Also adds the pipeline smoke test script that was documented in the
prior commit but not tracked.
* feat(iOS): sharpen workout hierarchy
Keep workout controls contextual, focus active sessions on one exercise,
and prioritize fitness discovery over settings.
Co-authored-by: opencode-agent <noreply@opencode.ai>
---------
Co-authored-by: opencode-agent <noreply@opencode.ai>github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
July 26, 2026 10:20
d3d7ea7 to
96659b3Compare* fix(iOS): remove invalid UIApplicationSceneManifest blocking launch The auto-generated scene manifest declared an empty UISceneDelegateClassName, which prevented UIKit from installing a scene delegate and left the app on a black launch screen on iOS 26 simulators. Removing the manifest lets SwiftUI's WindowGroup attach directly. Co-authored-by: opencode-agent <noreply@opencode.ai> * feat(design): add identity tokens and BetterFit mark mascot The mascot was rendered with the ember product accent, which the design system reserves for ordinary product actions. Identity yellow is for brand moments only, so the mascot now mirrors the BetterFit mark (three compressed ovals in identity yellow with black features for contrast) and a new `identity` token lives in BFColors alongside identityInk and identitySurface. The profile header swaps its generic avatar for the new EmberMascot, and athlete illustrations on workout cards stay on the ember product accent (correct per the posture rule). Co-authored-by: opencode-agent <noreply@opencode.ai> * feat(ios): lead with next action and tighten Workout/Plan layouts Restructure Workout home and Plan to follow the design-system flow rule: lead with the next action or conclusion, then support it; do not fill the screen with metrics. Workout home: - greeting 'Hello! Demo' -> 'Hello, Demo' (proper comma, single voice, no debug-flag feel) - workout overview collapses seven metrics into one conclusion line + recovery %; the category split was an echo of the heatmap below - workout preview reads from the currently-displayed suggested workout, so Target Muscles stays in sync with Up Next - Apple Health banner collapses two icon buttons into a single tappable card; long-press exposes Dismiss Plan: - page padding 16 -> 20 per spec - empty-day state becomes a clear 'Add exercises' primary CTA on a 16pt card instead of a dashed ghost button - recovery row corner radius aligned to BFRadius.card Co-authored-by: opencode-agent <noreply@opencode.ai> --------- Co-authored-by: opencode-agent <noreply@opencode.ai>
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
July 27, 2026 03:06
96659b3 to
86e540bCompare* fix(iOS): remove invalid UIApplicationSceneManifest blocking launch The auto-generated scene manifest declared an empty UISceneDelegateClassName, which prevented UIKit from installing a scene delegate and left the app on a black launch screen on iOS 26 simulators. Removing the manifest lets SwiftUI's WindowGroup attach directly. Co-authored-by: opencode-agent <noreply@opencode.ai> * feat(design): add identity tokens and BetterFit mark mascot The mascot was rendered with the ember product accent, which the design system reserves for ordinary product actions. Identity yellow is for brand moments only, so the mascot now mirrors the BetterFit mark (three compressed ovals in identity yellow with black features for contrast) and a new `identity` token lives in BFColors alongside identityInk and identitySurface. The profile header swaps its generic avatar for the new EmberMascot, and athlete illustrations on workout cards stay on the ember product accent (correct per the posture rule). Co-authored-by: opencode-agent <noreply@opencode.ai> * feat(ios): lead with next action and tighten Workout/Plan layouts Restructure Workout home and Plan to follow the design-system flow rule: lead with the next action or conclusion, then support it; do not fill the screen with metrics. Workout home: - greeting 'Hello! Demo' -> 'Hello, Demo' (proper comma, single voice, no debug-flag feel) - workout overview collapses seven metrics into one conclusion line + recovery %; the category split was an echo of the heatmap below - workout preview reads from the currently-displayed suggested workout, so Target Muscles stays in sync with Up Next - Apple Health banner collapses two icon buttons into a single tappable card; long-press exposes Dismiss Plan: - page padding 16 -> 20 per spec - empty-day state becomes a clear 'Add exercises' primary CTA on a 16pt card instead of a dashed ghost button - recovery row corner radius aligned to BFRadius.card Co-authored-by: opencode-agent <noreply@opencode.ai> * docs(readme): add screenshots and marketing showcase Adds a polished README with: - tagline and identity copy - retina (@2x) iOS screenshots in a comparison grid - 'why BetterFit' principles aligned to the design system - feature overview table - install, run, and docs links Co-authored-by: opencode-agent <noreply@opencode.ai> --------- Co-authored-by: opencode-agent <noreply@opencode.ai>
…lors (#15) * fix(iOS): remove invalid UIApplicationSceneManifest blocking launch The auto-generated scene manifest declared an empty UISceneDelegateClassName, which prevented UIKit from installing a scene delegate and left the app on a black launch screen on iOS 26 simulators. Removing the manifest lets SwiftUI's WindowGroup attach directly. Co-authored-by: opencode-agent <noreply@opencode.ai> * feat(design): add identity tokens and BetterFit mark mascot The mascot was rendered with the ember product accent, which the design system reserves for ordinary product actions. Identity yellow is for brand moments only, so the mascot now mirrors the BetterFit mark (three compressed ovals in identity yellow with black features for contrast) and a new `identity` token lives in BFColors alongside identityInk and identitySurface. The profile header swaps its generic avatar for the new EmberMascot, and athlete illustrations on workout cards stay on the ember product accent (correct per the posture rule). Co-authored-by: opencode-agent <noreply@opencode.ai> * feat(ios): lead with next action and tighten Workout/Plan layouts Restructure Workout home and Plan to follow the design-system flow rule: lead with the next action or conclusion, then support it; do not fill the screen with metrics. Workout home: - greeting 'Hello! Demo' -> 'Hello, Demo' (proper comma, single voice, no debug-flag feel) - workout overview collapses seven metrics into one conclusion line + recovery %; the category split was an echo of the heatmap below - workout preview reads from the currently-displayed suggested workout, so Target Muscles stays in sync with Up Next - Apple Health banner collapses two icon buttons into a single tappable card; long-press exposes Dismiss Plan: - page padding 16 -> 20 per spec - empty-day state becomes a clear 'Add exercises' primary CTA on a 16pt card instead of a dashed ghost button - recovery row corner radius aligned to BFRadius.card Co-authored-by: opencode-agent <noreply@opencode.ai> * docs(readme): add screenshots and marketing showcase Adds a polished README with: - tagline and identity copy - retina (@2x) iOS screenshots in a comparison grid - 'why BetterFit' principles aligned to the design system - feature overview table - install, run, and docs links Co-authored-by: opencode-agent <noreply@opencode.ai> * fix(design): drop cyberpunk category gradients and decorative warm colors The exercise timeline previews used per-category gradient pairs (blue/cyan, purple/pink, red/orange, green/teal) that don't exist in the design system and read as a neon-fitness aesthetic. Both StaticTimelineRow and UnifiedExerciseTimeline now use a single tinted ember surface with SF Symbol differentiation, so exercise categories stay visually distinct without inventing colors that fight the recovery palette. ProfileView health stats were using .red, .orange, .blue, .purple arbitrarily. Re-aligned: - BMI 'Normal' -> success (green, semantic for healthy range) - Strength Score 'Advanced' -> brandAccent (ember, positive tier) - Resting HR -> text secondary (was red, now neutral; HR isn't a status signal) - Active Cal 'Today' -> brandAccent (active state) - Real-stats icons (Total Workouts / Total Volume / Time Active) -> brandAccent instead of mixed orange/blue/purple Consequences: better visual coherence with the design system. Recovers, destructive actions, and the streak indicator are unchanged; ember and red still appear in their semantic roles (action and recovery: sore / destructive). Co-authored-by: opencode-agent <noreply@opencode.ai> --------- Co-authored-by: opencode-agent <noreply@opencode.ai>
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
July 27, 2026 04:46
86e540b to
02ca7b9CompareThe AthleteIllustration drew a single-stroke stick figure with a red bar through it for the push pose. That read as clip art and fights the design system's rule that illustration must use heavy geometric forms with the same high-contrast confidence as the mark. AthleteIllustration now renders three compressed white ovals on an ember-tinted surface -- the same three-oval form BetterFit's brand mark uses for plates/repetition/momentum -- with a small SF Symbol (arrow.up / arrow.down / figure.walk / heart.fill) offset to the bottom as a category hint. Removed: gradientColors, segments(), point(), drawAthlete(), categoryColor. The new visual has no pose-dependent coordinates; the pose only selects the SF Symbol. Card hero space on PlayingCardWorkoutCard grows from 100x140 to 140x140 so the new mark has room to breathe. Co-authored-by: opencode-agent <noreply@opencode.ai>
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
July 27, 2026 04:59
02ca7b9 to
e7cc6d4Compare* fix(art): replace stick-figure athlete with the BetterFit mark The AthleteIllustration drew a single-stroke stick figure with a red bar through it for the push pose. That read as clip art and fights the design system's rule that illustration must use heavy geometric forms with the same high-contrast confidence as the mark. AthleteIllustration now renders three compressed white ovals on an ember-tinted surface -- the same three-oval form BetterFit's brand mark uses for plates/repetition/momentum -- with a small SF Symbol (arrow.up / arrow.down / figure.walk / heart.fill) offset to the bottom as a category hint. Removed: gradientColors, segments(), point(), drawAthlete(), categoryColor. The new visual has no pose-dependent coordinates; the pose only selects the SF Symbol. Card hero space on PlayingCardWorkoutCard grows from 100x140 to 140x140 so the new mark has room to breathe. Co-authored-by: opencode-agent <noreply@opencode.ai> * docs(readme): retake screenshots and adopt Block/buzz layout Block/buzz uses full-width hero + stacked captioned screenshots. Mirrors that here: - Move assets to docs/assets/screenshots/ (buzz convention) - Rename to topic-based PNGs (workout-home, plan-week, profile-health) instead of type-prefixed ones (ios-*) - Single hero screenshot at the top with a one-line italic caption - New 'A look inside' section with two stacked screenshots, each linked and captioned in bold + soft followup - Drop the 3-up table; the per-screen shots now have room to read - Tighten the lead paragraph so the tagline does the talking - Trim the feature list into a sentence-led section - Compress the install + dev workflow into one block Screenshots retaken on iPhone 16 / iOS 26.2 against the current main demo state, retried after the mark / color alignment work so they show the actual product state. Co-authored-by: opencode-agent <noreply@opencode.ai> --------- Co-authored-by: opencode-agent <noreply@opencode.ai>
…rid (#18) Per the user feedback that the previous README stacked three portrait-phone shots at native resolution, the screenshots flew past the column width and ran the page very tall. This change: - Hero: width=320, centered with a single-line caption - 'A look inside': HTML table with two cells, each width=50%, screenshots at width=280, captions inline beneath each - Caps the look-inside section at the height of one phone screenshot (~450pt on retina) instead of three stacked - Tighter captions under each shot No source changes. Co-authored-by: opencode-agent <noreply@opencode.ai>
* docs(readme): add branded hero Carry the yellow and black identity into GitHub while keeping product screenshots compact and dark. Co-authored-by: opencode-agent <noreply@opencode.ai> * docs(readme): improve mobile layout Co-authored-by: opencode-agent <noreply@opencode.ai> * docs(readme): refresh hero asset Avoid GitHub's cached first revision and keep banner copy readable at narrow widths. Co-authored-by: opencode-agent <noreply@opencode.ai> --------- Co-authored-by: opencode-agent <noreply@opencode.ai>
Separate brand marks, profile identity, workout movement, and anatomy so each visual has one clear role. Recovery regions now map directly to independently colorable vector shapes. Co-authored-by: opencode-agent <noreply@opencode.ai>
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
July 27, 2026 08:25
e7cc6d4 to
d60b7daCompare* fix(ci): remove platform-dependent build failures Keep video pipeline functions sourceable on clean Linux runners and build iOS against a generic simulator destination when no device execution is required. Co-authored-by: opencode-agent <noreply@opencode.ai> * fix(core): preserve history during startup Merge persisted workouts with in-memory completions and synchronize history access so asynchronous initialization cannot discard newly completed workouts. Co-authored-by: opencode-agent <noreply@opencode.ai> --------- Co-authored-by: opencode-agent <noreply@opencode.ai>
github-actionsBotforce-pushed
the
release-please--branches--main
branch
from
July 30, 2026 13:17
d60b7da to
1049ff6Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 I have created a release beepboop
1.0.0 (2026-07-30)
Features
Bug Fixes
This PR was generated with Release Please. See documentation.