Skip to content
This repository was archived by the owner on Jun 16, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
430 commits
Select commit Hold shift + click to select a range
ac78e33
feat(08-P03): add DeviceType::HrMonitor variant; map HR_MONITOR in pa…
Jun 3, 2026
c0b88ef
test(08-P03): assert parse_device_type returns DeviceType::HrMonitor;…
Jun 3, 2026
e65f7c0
docs(08-P03): complete upload fix + DeviceType::HrMonitor plan summary
Jun 3, 2026
0383b75
merge(08-P03): integrate upload pipeline + DeviceType::HrMonitor from…
Jun 3, 2026
c53568c
docs(phase-08): update tracking after wave 2 (P03 complete)
Jun 3, 2026
c15c2ed
refactor(08-P04): extract pure buildUploadPayload from performUpload
Jun 3, 2026
cbcf753
test(08-P04): add GooseUploadServiceTests covering upload payload tax…
Jun 3, 2026
67c4165
docs(08-P04): complete upload payload unit tests plan summary
Jun 3, 2026
e072f17
merge(08-P04): integrate GooseUploadService unit tests from wave 3
Jun 3, 2026
0853aa8
docs(phase-08): update tracking after wave 3 (P04 complete)
Jun 3, 2026
fd0e989
docs(08): add code review report
Jun 3, 2026
9319bb9
test(08): persist human verification items as UAT
Jun 3, 2026
23dd3c8
docs(phase-08): complete phase execution
Jun 3, 2026
12409ec
docs(07): add plan summaries and mark phase complete (executed 2026-0…
Jun 3, 2026
a847cb7
docs(phase-07): complete phase execution
Jun 3, 2026
e22f17a
docs(v2.0): milestone audit report — gaps_found (parse_hr_measurement…
Jun 3, 2026
cd76720
docs(08.1): insert gap closure phase — integrate parse_hr_measurement…
Jun 3, 2026
bfbc7b9
docs(08.1): capture phase context — parse_hr_measurement upload integ…
Jun 3, 2026
003947a
docs(state): record phase 8.1 context session
Jun 3, 2026
55c10ab
docs(08.1): create gap-closure phase plan for HR monitor upload integ…
Jun 3, 2026
4565dc5
docs(08.1): create phase plan — 2 plans in 2 waves
Jun 3, 2026
84eb5ee
feat(08.1-01): store HR monitor GATT frames as decoded_frames rows
Jun 3, 2026
996e081
test(08.1-01): add failing tests for HR monitor upload stream (WEAR-0…
Jun 3, 2026
483de07
feat(08.1-01): integrate parse_hr_measurement into upload bridge + CR…
Jun 4, 2026
afc8308
fix(08.1-01): use past timestamps in HR monitor tests (captured_at mu…
Jun 4, 2026
ca03983
docs(08.1-01): complete SUMMARY.md — HR monitor upload integration ga…
Jun 4, 2026
6465137
merge(08.1-P01): integrate parse_hr_measurement into upload pipeline …
Jun 4, 2026
3bfc76e
docs(08.1-02): SUMMARY.md for HR monitor upload integration tests
Jun 4, 2026
b0aa9ef
docs(phase-08.1): update tracking after all plans complete
Jun 4, 2026
afa77a1
docs(phase-08.1): complete phase execution — gap closure WEAR-01/WEAR…
Jun 4, 2026
d90c4f1
docs(v2.0): update milestone audit report — BLOCKER-1 (CR-02 namespac…
Jun 4, 2026
3b567c3
fix(08.1): revert CR-02 filter to no-op — device_model vs device_id n…
Jun 4, 2026
6e78390
docs(v2.0): update milestone audit — BLOCKER-1 fixed, status tech_debt
Jun 4, 2026
e8238fa
chore: archive v2.0 milestone files
Jun 4, 2026
6dc54e0
chore: remove REQUIREMENTS.md for v2.0 milestone (archived to milesto…
Jun 4, 2026
2a83a5d
chore: archive v2.0 phase directories to milestones/v2.0-phases/
Jun 4, 2026
c84eced
chore(v2.0): finalize milestone close — MILESTONES.md + remove root a…
Jun 4, 2026
57735ad
chore: add missing GooseSwift.xcscheme shared scheme
Jun 4, 2026
aa52517
fix(ci): resolve cargo fmt, clippy, and CodeQL Swift linker failures
Jun 4, 2026
c26324e
docs: refresh codebase map
Jun 4, 2026
bf25c65
docs: start milestone v3.0 Wearable UX CI Hardening & RTC Sync
Jun 4, 2026
f9af940
docs: complete v3.0 project research (STACK, FEATURES, ARCHITECTURE, …
Jun 4, 2026
f62e66c
docs: v3.0 research complete — STACK FEATURES ARCHITECTURE PITFALLS S…
Jun 4, 2026
1098967
docs: define milestone v3.0 requirements (10 REQ-IDs)
Jun 4, 2026
340ee6a
docs: add FIX-04 FIX-05 from upstream PR #19 to v3.0 Phase 9
Jun 4, 2026
e387821
docs: v3.0 state update — 12 requirements, Phase 9 expanded
Jun 4, 2026
6adbff2
docs(09): capture phase context
Jun 4, 2026
7510c17
docs(state): record phase 9 context session
Jun 4, 2026
84e5d6d
docs(09): UI design contract for Phase 9 BLE Stability
Jun 4, 2026
38bea80
docs(09): research phase 9 BLE stability and data integrity
Jun 4, 2026
6cbe445
docs(09): add research and validation strategy
Jun 4, 2026
94e2469
docs(09): create phase plan — BLE stability & data integrity (4 plans…
Jun 4, 2026
2064559
docs(09): create phase plan
Jun 4, 2026
8527369
docs: cross-AI review for phase 9
Jun 4, 2026
22003a3
docs(09): revise plans for cross-AI review HIGH concerns
Jun 4, 2026
2827f24
docs(09): replan incorporating cross-AI review feedback
Jun 4, 2026
14e7c57
test(09-01): add failing tests for panic-catch and storage compaction
Jun 4, 2026
7b4cb9c
feat(09-01): wrap FFI entry in catch_unwind and switch release to pan…
Jun 4, 2026
af4f300
feat(09-01): expose storage.compact_raw_evidence bridge method and te…
Jun 4, 2026
7e1a690
docs(09-01): complete FFI panic safety and storage compaction plan su…
Jun 4, 2026
9592167
merge(09-01): FFI panic-safety + storage.compact_raw_evidence bridge
Jun 4, 2026
ce70e6b
docs(phase-09): update tracking after wave 1 (09-01 complete)
Jun 4, 2026
fc81f65
test(09-01): add failing tests for panic-catch and storage compaction
Jun 4, 2026
27bf1e0
feat(09-01): wrap FFI entry in catch_unwind and switch release to pan…
Jun 4, 2026
caa2649
feat(09-01): expose storage.compact_raw_evidence bridge method and te…
Jun 4, 2026
d516d68
test(09-02): add failing tests for active_device_id persistence in ca…
Jun 4, 2026
d75930a
feat(09-02): thread active_device_id from batch import args into capt…
Jun 4, 2026
4f0d26c
test(09-02): add D-02 regression test — device_type separation HR vs …
Jun 4, 2026
ecfac1e
docs(09-02): complete FIX-01 device_id propagation plan summary
Jun 4, 2026
787233d
merge(09-02): active_device_id propagation in capture path (FIX-01)
Jun 4, 2026
49cb8aa
docs(phase-09): update tracking after wave 2 (09-02 complete)
Jun 4, 2026
446f177
feat(09-03): implement WHOOP BLE reconnect with exponential backoff (…
Jun 4, 2026
f3a611a
feat(09-03): wire active_device_id and storage compaction into captur…
Jun 4, 2026
350f92c
feat(09-03): add reconnect attempt counter and Stop/Try Again control…
Jun 4, 2026
cd4238e
fix(09-03): cancel reconnect work item when Bluetooth powers off
Jun 4, 2026
9095c15
docs(09-03): complete WHOOP reconnect backoff and Swift wiring plan s…
Jun 4, 2026
7caee4f
merge(09-03): WHOOP reconnect backoff, Swift wiring, cancelReconnectC…
Jun 4, 2026
79e4684
fix(09-03): add GooseBLEReconnect.swift to Xcode project target
Jun 4, 2026
9b58d23
fix(09-03): auto-restart reconnect backoff when Bluetooth powers back…
Jun 4, 2026
c2b9b58
fix(09-03): startup reconnect is immediate; bt_restored uses backoff …
Jun 4, 2026
c7df1f1
fix(09-03): use backoff_retry reason so guard allows bt_restored reco…
Jun 4, 2026
3be71c6
docs: backlog — botão Request Bluetooth abrir definições do sistema
Jun 4, 2026
71002b6
fix(09-03): clear activePeripheral on BT power-off so bt_restored rec…
Jun 4, 2026
d24a831
docs(phase-09): update tracking after wave 3 (09-03 complete)
Jun 4, 2026
2d79673
feat(09-04): add hrReconnectState and cancellable backoff loop to HR …
Jun 4, 2026
bed6119
feat(09-04): add HR Reconnect status row and HR Stop/Retry controls t…
Jun 4, 2026
e5befc3
docs(09-04): complete HR monitor reconnect backoff plan summary
Jun 4, 2026
c9cd801
merge(09-04): HR monitor reconnect backoff + ConnectionView controls …
Jun 4, 2026
8e1e67a
docs(phase-09): update tracking after wave 4 (09-04 complete)
Jun 4, 2026
f8c9b1b
docs(09): add code review report
Jun 4, 2026
5d3ed38
fix(09): CR-01 dispatch @Published reconnectState mutation to main th…
Jun 4, 2026
e5c257a
fix(09): CR-02 clear pendingCompletion in flushCompletion to avoid cl…
Jun 4, 2026
8cb2fb1
fix(09): WR-01 protect activeDeviceID with stateLock for thread safety
Jun 4, 2026
cb02c49
fix(09): WR-02 clear debugMenuCharacteristic on BT power-off and disc…
Jun 4, 2026
6972500
fix(09): WR-04 remove non-existent raw_hex_encode_us from timing summary
Jun 4, 2026
5d8bb91
docs(09): add code review fix report
Jun 4, 2026
4f35a2d
test(09): create phase verification report
Jun 4, 2026
c6e3e7d
test(09): persist human verification items as UAT
Jun 4, 2026
51428f5
docs(phase-09): complete phase execution
Jun 4, 2026
f3c74e2
docs(10): capture phase context
Jun 4, 2026
1853754
docs(state): record phase 10 context session
Jun 4, 2026
60d61a9
docs(10): UI design contract for HR Monitor scan/connect screen
Jun 4, 2026
9a6981b
fix(10): resolve UI checker blocking issues in UI-SPEC
Jun 4, 2026
90940a6
docs(10): fix 3 UI-SPEC blocking issues found by checker
Jun 4, 2026
651dad2
docs(10): research phase domain
Jun 4, 2026
15db665
docs(10): add validation strategy
Jun 4, 2026
7851ba1
docs(10): add pattern map
Jun 4, 2026
3898110
docs(10): create phase plan for HR Monitor scan/connect UI
Jun 4, 2026
a805800
test(10-01): add HRMonitorStateTests Wave 0 scaffold
Jun 4, 2026
acfe77d
feat(10-01): promote discoveredHRDevices and hrConnectionState to @Pu…
Jun 4, 2026
fc7230c
feat(10-01): add connecting state, state mirrors, disconnectHRMonitor…
Jun 4, 2026
95e0b4f
docs(10-01): complete HR monitor BLE state promotion plan
Jun 4, 2026
6dad34e
feat(10): build HRMonitorView — scan list, connect sheet, connected p…
Jun 4, 2026
0673d1a
docs(10-02): complete plan summary, verification deferred to post-Pla…
Jun 4, 2026
9f507a5
feat(10-03): add MoreRoute.hrMonitor case with complete switch arms a…
Jun 4, 2026
0dc6321
feat(10-03): wire HRMonitorView into More tab Device section (Plan 03)
Jun 4, 2026
c61c276
docs(10-03): complete More tab HR Monitor navigation wiring plan
Jun 4, 2026
ff29c45
fix(10): add HRMonitorView.swift and HRMonitorStateTests.swift to Xco…
Jun 4, 2026
626ac27
docs(roadmap): insert Phase 10.1 BLE main-thread publishing fix
Jun 4, 2026
498c827
fix(10): use hrBluetoothState for HRMonitorView — fix false BT-off sc…
Jun 4, 2026
900c2fc
docs(10): mark phase complete, advance to 10.1
Jun 4, 2026
cd8e27d
docs(10.1): capture phase context — guard pattern, full audit scope
Jun 4, 2026
4e6c079
docs(10.1): create execution plan — BLE main-thread publishing fix
Jun 4, 2026
554e190
fix(10.1): add main-thread guards to all @Published mutators in Goose…
Jun 4, 2026
d6ea7d7
fix(10.1): add main-thread guards to all @Published mutators in Goose…
Jun 4, 2026
6a38ae7
docs(10.1): complete BLE main-thread publishing fix plan
Jun 4, 2026
1d759bc
docs(10.1): mark phase complete
Jun 4, 2026
61373a0
fix(concurrency): make runStorageCompactionIfNeeded nonisolated — use…
Jun 4, 2026
87b654a
fix(perf): resolve NavigationRequestObserver multi-update per frame —…
Jun 4, 2026
acff971
fix(perf): guard duplicate BLE notify subscriptions and redundant met…
Jun 4, 2026
81cc0e0
fix(concurrency): nonisolated defaultDatabasePath — pure FileManager …
Jun 4, 2026
9b84910
fix(perf): debounce MoreDataStore routeStatus — merge 3 sinks into si…
Jun 4, 2026
75d170b
fix(perf): remove @EnvironmentObject model from AppShellView — preven…
Jun 4, 2026
c1f2031
fix(perf): guard duplicate 2BED discovery — batteryCharacteristicDisc…
Jun 5, 2026
f644885
docs(backlog): add Phase 999.5 GooseAppModel @Observable migration
Jun 5, 2026
ddad8f8
docs(11): capture phase context — hrMonitor mode, auto-start, separat…
Jun 5, 2026
fa46b38
docs(11): add phase research — HR monitor independent capture
Jun 5, 2026
fab651a
docs(11): create execution plan — HR monitor independent capture
Jun 5, 2026
5f1a919
feat(11): add .hrMonitor capture mode and startHRMonitorCapture/stopH…
Jun 5, 2026
8369e5a
docs(11-01): complete HR monitor capture mode plan — SUMMARY and STAT…
Jun 5, 2026
52efd1f
feat(11): wire onHRConnectionStateChange — auto-start HR monitor capt…
Jun 5, 2026
4a7b62b
docs(11-02): complete HR monitor auto-capture wiring plan
Jun 5, 2026
f533835
docs(11): mark phase complete
Jun 5, 2026
a9788d7
docs(12): capture phase context — auto-trigger canSyncClock on ready,…
Jun 5, 2026
161ff3d
feat(12): auto-trigger RTC clock sync on WHOOP ready — GET_CLOCK + au…
Jun 5, 2026
035c7c3
docs(12): complete Phase 12 Plan 01 — WHOOP RTC clock sync auto-trigger
Jun 5, 2026
650d8ee
docs(12): mark phase complete
Jun 5, 2026
ed2dd43
docs(13): capture phase context — runPacketScores trigger on appear +…
Jun 5, 2026
eb73164
feat(13): trigger runPacketScores on Recovery V2 appear — bridge-back…
Jun 5, 2026
658de96
docs(13): complete recovery-v2-dashboard bridge trigger plan
Jun 5, 2026
bf089b7
docs(13): mark phase complete
Jun 5, 2026
6303178
docs(14): capture phase context — xcstrings + display-layer extension…
Jun 5, 2026
b427589
docs(14): add phase research — pt-PT localisation scope and approach
Jun 5, 2026
faad642
docs(14): create execution plans — pt-PT localisation 4 waves
Jun 5, 2026
1e85a5a
feat(14): add Localizable.xcstrings infrastructure + pt-PT locale + f…
Jun 5, 2026
f0adce6
docs(14-01): complete localisation infrastructure plan
Jun 5, 2026
ac756aa
feat(14): add Home/Health/Recovery/Sleep/Coach pt-PT translations (Wa…
Jun 5, 2026
8d375d3
docs(14-02): complete pt-PT localisation Wave 2 plan
Jun 5, 2026
ff8466b
feat(14): add More/Connection/Onboarding/Debug pt-PT translations (Wa…
Jun 5, 2026
f0c6dce
docs(14-03): complete More/Connection/Onboarding/Debug pt-PT localisa…
Jun 5, 2026
a214b83
feat(14): add LocalizedStatusStrings.swift — pt-PT display layer for …
Jun 5, 2026
54ab957
feat(14): final sweep — add 8 missed static UI strings to xcstrings a…
Jun 5, 2026
585113f
docs(14-04): complete dynamic status localisation plan — Wave 4 BUILD…
Jun 5, 2026
ee9ccd1
docs(14): mark phase complete
Jun 5, 2026
3c3179a
fix(12): trigger RTC clock sync during overnight guard ready state (a…
Jun 5, 2026
d54deb4
docs(15): capture phase context — rename hkHRVRmssdMs, remove /1.2, b…
Jun 5, 2026
0929ab6
fix(15): use SDNN directly in hkRecoveryScore — rename hkHRVRmssdMs, …
Jun 5, 2026
78b2ffc
docs(15-01): complete Recovery Formula V2 SDNN accuracy plan
Jun 5, 2026
1335211
docs(15): mark phase complete
Jun 5, 2026
f5a471d
chore: archive v3.0 milestone — Wearable UX, CI Hardening & RTC Sync
Jun 5, 2026
be2010e
chore(v4.0): init milestone — Security, Performance & Coach Expansion…
Jun 5, 2026
15c5b77
fix(ci): apply cargo fmt to resolve rust-core fmt check failure
Jun 5, 2026
6d907f1
docs(16): mark complete — PR #15 already integrated in commit 96c61bb
Jun 5, 2026
6463654
docs(17): capture phase context — @Observable all 3 classes, @Environ…
Jun 5, 2026
4128fe8
docs(17): add phase research — @Observable migration scope and pitfalls
Jun 5, 2026
ca6e93f
fix(ble): route historicalData/historicalIMUDataStream to main during…
Jun 5, 2026
ea04bfa
docs(17): create execution plans — @Observable migration 4 waves
Jun 5, 2026
191eaf3
feat(17-01): migrate GooseAppModel to @Observable — remove Observable…
Jun 5, 2026
27924c8
docs(17-01): complete GooseAppModel @Observable Wave 1 plan — SUMMARY…
Jun 5, 2026
ba0cef7
feat(17): migrate HealthDataStore to @Observable — remove ObservableO…
Jun 5, 2026
b094369
docs(17-02): complete HealthDataStore @Observable plan — SUMMARY and …
Jun 5, 2026
f00ad17
feat(17): migrate GooseBLEClient to @Observable — remove ObservableOb…
Jun 5, 2026
89790a4
docs(17-03): complete GooseBLEClient @Observable Wave 3 plan — SUMMAR…
Jun 5, 2026
226bfb7
docs(17-04): complete @Observable migration final sweep — Wave 4 veri…
Jun 5, 2026
39310a3
fix(ci): export required FFI symbols in CodeQL stub libgoose_core.a
Jun 5, 2026
a007b3c
chore: add open source community health files
Jun 5, 2026
9d4d6c0
docs: update all project documentation
Jun 5, 2026
45cfcab
fix(docs): correct 5 factual errors found by verify-only audit
Jun 5, 2026
7a405fe
docs(18): UI design contract for Coach Multi-Provider settings sheet
Jun 5, 2026
e6a4df1
docs(18): UI design contract — CoachSettingsSheet provider picker app…
Jun 5, 2026
a6bf1e1
docs(18): research phase — Coach Multi-Provider
Jun 5, 2026
dd0bd2a
docs(18): create phase plan — Coach Multi-Provider (6 plans, 6 waves)
Jun 5, 2026
3edb8bc
docs(18): create phase plan — 6 waves Coach Multi-Provider
Jun 5, 2026
a202681
test(18-01): add Wave 0 XCTest stubs for all five Phase 18 test files
Jun 5, 2026
ed000c6
feat(18-01): add CoachProvider protocol + CoachProviderRegistry + ext…
Jun 5, 2026
a023c4b
feat(18-01): rename OpenAICoachChatModel to CoachChatModel + @Observa…
Jun 5, 2026
fc03708
feat(18-01): ChatGPTCoachProvider + rewire CoachView/CoachChatScreen …
Jun 5, 2026
a849aa4
docs(18-01): complete Coach Multi-Provider foundation plan — SUMMARY
Jun 5, 2026
9759f08
chore(18-01): merge Wave 1 worktree into plan branch
Jun 5, 2026
90ce321
docs(phase-18): update tracking after wave 1
Jun 5, 2026
3bac5d8
feat(18-02): ClaudeKeychain helper + Keychain roundtrip test
Jun 6, 2026
6e83b38
feat(18-02): ClaudeCoachProvider SSE streaming + ClaudeProviderTests …
Jun 6, 2026
a7acc87
docs(18-02): complete ClaudeCoachProvider plan — SUMMARY
Jun 6, 2026
b641560
chore(18-02): merge ClaudeCoachProvider worktree
Jun 6, 2026
725acf5
test(18-03): add failing tests for CustomEndpointCoachProvider (RED)
Jun 6, 2026
375424f
feat(18-03): implement CustomEndpointCoachProvider (GREEN)
Jun 6, 2026
29dbe93
docs(18-03): complete CustomEndpointCoachProvider plan — SUMMARY
Jun 6, 2026
a1683d6
chore(18-03): merge CustomEndpointCoachProvider worktree
Jun 6, 2026
98227d8
test(18-04): add GeminiProviderTests — token model, PKCE, Keychain ro…
Jun 6, 2026
b9b0ff0
feat(18-04): implement GeminiCoachProvider — OAuth PKCE + SSE streami…
Jun 6, 2026
7e2a5b1
docs(18-04): complete GeminiCoachProvider plan — SUMMARY
Jun 6, 2026
37e6d9d
chore(18-04): merge GeminiCoachProvider worktree
Jun 6, 2026
4c795d0
docs(phase-18): update tracking after wave 2
Jun 6, 2026
60faadc
feat(18-05): re-enable four-provider registry test — remove XCTSkip f…
Jun 6, 2026
244b124
feat(18-05): add CoachSettingsSheet — provider picker, per-provider c…
Jun 6, 2026
3190ab6
feat(18-05): add gear icon + active-provider indicator to CoachView, …
Jun 6, 2026
c3cd832
docs(18-05): complete CoachSettingsSheet plan — SUMMARY + checkpoint …
Jun 6, 2026
a0f1633
chore(18-05): merge CoachSettingsSheet worktree (3/4 tasks)
Jun 6, 2026
6bcc78f
fix(18-05): open CoachSettingsSheet when no provider configured — was…
Jun 6, 2026
20f4cdd
docs(phase-18): update tracking after wave 3
Jun 6, 2026
a2b9986
feat(18-06): finalise COACH-01 conformance tests across all four prov…
Jun 6, 2026
3b47472
docs(18-06): complete integration wave — SUMMARY + checkpoint pending…
Jun 6, 2026
bd3b269
chore(18-06): merge integration wave task 1 (build + tests green)
Jun 6, 2026
cb3c95e
fix(18): cache isAuthenticated as stored property in Claude/Custom/Ge…
Jun 6, 2026
28375ca
docs(18): add code review report
Jun 6, 2026
8d797d1
fix: resolve Swift 6 concurrency warnings post-@Observable migration
Jun 6, 2026
a8af171
fix(18): apply code review warning fixes
Jun 6, 2026
b307b56
test(18): persist human verification items as UAT
Jun 6, 2026
766372d
docs(phase-18): complete phase execution
Jun 6, 2026
7fe58d6
perf: move overnight session discovery to background queue at startup
Jun 6, 2026
050c3b7
chore: commit pending changes before merge to main
Jun 6, 2026
ab8e90e
feat: add skip button to onboarding footer
Jun 6, 2026
85f5b01
feat(18): Coach Multi-Provider — four AI providers (ChatGPT, Claude, …
Jun 6, 2026
d1876b9
fix: don't restore onboardingComplete from Keychain on fresh install
Jun 6, 2026
967418e
docs: add Phase 19 L10N completion + mark Phase 18 Wave 6 complete
Jun 6, 2026
23cab03
docs(19): capture phase context
Jun 6, 2026
7ceff13
docs(state): record phase 19 context session
Jun 6, 2026
6cd6eeb
feat(19): add pt-PT translations for Coach/provider config strings (G…
Jun 6, 2026
b23a855
feat(19): add pt-PT translations for Health/Sleep/Cardio/UI strings (…
Jun 6, 2026
3a72aa4
docs(19-01): complete pt-PT localisation plan 01 summary
Jun 6, 2026
ae7d3c1
feat(19): add pt-PT translations for Coach/provider config strings (G…
Jun 6, 2026
9146b53
feat(19): add pt-PT translations for Health/Sleep/Cardio/UI strings (…
Jun 6, 2026
306ae81
docs(19-01): update SUMMARY.md with correct worktree commit hashes
Jun 6, 2026
e699d00
feat(19): pt-PT localisation completion — 119 strings translated, all…
Jun 6, 2026
0f2ea15
fix(l10n): add pt-PT translations for 9 missing Phase 18 strings and …
Jun 6, 2026
daebbe0
chore: archive v4.0 milestone files
Jun 6, 2026
676f820
chore: remove REQUIREMENTS.md for v4.0 milestone — fresh file created…
Jun 6, 2026
3c666a7
docs: create RETROSPECTIVE.md with v4.0 milestone lessons
Jun 6, 2026
2a593db
chore: update STATE.md — v4.0 complete, v5.0 planning pending
Jun 6, 2026
464e7ca
feat: fork tigercraft4/goose — v1.0 to v4.0 (all milestones)
Jun 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
name: Bug report
about: Something is broken or behaving unexpectedly
labels: bug
---

## What happened?

<!-- A clear description of the bug. -->

## Steps to reproduce

1.
2.
3.

## Expected behaviour

<!-- What should have happened. -->

## Environment

- Device: <!-- e.g. iPhone 15 Pro -->
- iOS version: <!-- e.g. 18.4 -->
- WHOOP device: <!-- e.g. WHOOP 5.0, WHOOP 4.0 -->
- WHOOP firmware: <!-- e.g. 50.38.1.0 — found in the WHOOP app under Device Settings -->
- Goose build: <!-- commit SHA or date -->

## Logs

<!-- Paste relevant output from More > Debug or the diagnostic log export. Remove any personal data. -->

<details>
<summary>Diagnostic log</summary>

```
paste here
```

</details>
21 changes: 21 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
name: Feature request
about: Suggest an improvement or new capability
labels: enhancement
---

## What problem does this solve?

<!-- Describe the problem or gap you're running into. -->

## Proposed solution

<!-- Describe what you'd like to happen. -->

## Alternatives considered

<!-- Any other approaches you thought about? -->

## Additional context

<!-- Screenshots, links, references — anything that helps. -->
23 changes: 23 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Summary

<!-- What does this PR do? One or two sentences. -->

## Changes

<!-- List the main changes. -->

-
-

## Test plan

<!-- How did you verify this works? -->

- [ ] Built and ran on simulator
- [ ] Tested on device (if applicable)
- [ ] Rust tests pass: `cd Rust/core && cargo test`
- [ ] No new `cargo fmt` or `cargo clippy` warnings

## Related issues

<!-- Closes #N or references #N -->
99 changes: 99 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: CodeQL

# Static analysis for security vulnerabilities in application source code.
#
# Coverage:
# * swift - GooseSwift/ — data flow analysis, injection patterns, insecure iOS
# API usage (CoreBluetooth, Keychain, URLSession).
# * python - server/ — SQL injection, path traversal, insecure deserialization,
# weak cryptography patterns (FastAPI + TimescaleDB stack).
#
# Rust is excluded: CodeQL support is experimental and cargo-audit already covers
# known advisories via the RustSec database (see security.yml).
#
# Swift job runs on macos-26 (Xcode 26.4.1 default, iOS 26.x SDKs available)
# to match the project's IPHONEOS_DEPLOYMENT_TARGET = 26.0.
# Python job runs on ubuntu-latest (no build step needed).
#
# Runs on every push/PR to main (no path filter — code changes always warrant a
# scan), on a weekly schedule (Monday 08:00 UTC, staggered 1 h after security.yml),
# and on demand via workflow_dispatch.

on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
schedule:
- cron: "0 8 * * 1" # Mondays at 08:00 UTC
workflow_dispatch:

permissions:
contents: read
security-events: write # required to upload SARIF results to GitHub Security tab
actions: read # required by github/codeql-action in private repositories

jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ${{ matrix.language == 'swift' && 'macos-26' || 'ubuntu-latest' }}

strategy:
fail-fast: false
matrix:
language: [swift, python]

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
queries: security-extended

# Swift: CodeQL requires a real compilation pass to trace data flow accurately.
# CODE_SIGNING_ALLOWED=NO avoids certificate requirements on CI runners.
# GOOSE_SKIP_RUST_CORE_BUILD=1 skips the Xcode build phase that cross-compiles
# Rust for iOS — CodeQL only needs the Swift source to be compiled, not a
# production-ready binary. A minimal stub libgoose_core.a satisfies the linker.
- name: Create stub libgoose_core.a for CodeQL (Swift only)
if: matrix.language == 'swift'
run: |
mkdir -p Rust/iphonesimulator Rust/iphoneos
# The stub must export the exact C symbols that GooseRustBridge.swift
# references via the bridging header: goose_bridge_handle_json and
# goose_bridge_free_string. A missing symbol causes an "Undefined
# symbols for architecture" linker error even in CodeQL builds.
cat > /tmp/goose_stub.c << 'EOF'
#include <stddef.h>
/* Stub FFI symbols — no-ops; CodeQL only needs Swift source compiled. */
const char *goose_bridge_handle_json(const char *request_json) { return NULL; }
void goose_bridge_free_string(char *value) { (void)value; }
const char *goose_core_version_json(void) { return NULL; }
EOF
SDK=$(xcrun --sdk iphonesimulator --show-sdk-path)
clang -target arm64-apple-ios-simulator \
-isysroot "$SDK" \
-c /tmp/goose_stub.c -o /tmp/goose_stub.o
ar rcs Rust/iphonesimulator/libgoose_core.a /tmp/goose_stub.o
ar rcs Rust/iphoneos/libgoose_core.a /tmp/goose_stub.o

- name: Build Swift target (Swift only)
if: matrix.language == 'swift'
run: |
xcodebuild \
-project GooseSwift.xcodeproj \
-scheme GooseSwift \
-destination 'generic/platform=iOS Simulator' \
build \
CODE_SIGNING_ALLOWED=NO \
GOOSE_SKIP_RUST_CORE_BUILD=1

# Python: CodeQL analyses Python without a build step.

- name: Perform CodeQL analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{ matrix.language }}"
107 changes: 107 additions & 0 deletions .github/workflows/rust-core-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: Rust Core CI

# Builds and tests the Goose Rust core. The Swift/iOS app needs macOS + Xcode
# and is not built here; the Rust core is the portable, Linux-buildable part of
# the project, so it is the natural target for fast pull-request feedback.

on:
push:
branches: ["main"]
paths:
- "Rust/core/**"
- ".github/workflows/rust-core-ci.yml"
pull_request:
paths:
- "Rust/core/**"
- ".github/workflows/rust-core-ci.yml"
workflow_dispatch:

defaults:
run:
working-directory: Rust/core

jobs:
build-test:
name: Build, test, and lint
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Rust toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable
rustup component add clippy
rustc --version
cargo --version

# Several integration tests shell out to python3 for the external
# reference adapters under tools/reference (NeuroKit2, pyHRV,
# pyActigraphy). python3 ships on ubuntu-latest; the adapters fall back to
# hand-derived values when the optional science packages are absent.
- name: Confirm python3 is available
run: python3 --version

- name: Cache cargo registry and build artifacts
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
Rust/core/target
key: ${{ runner.os }}-cargo-${{ hashFiles('Rust/core/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-

- name: Build
run: cargo build --all-targets --locked

- name: Test
run: cargo test --locked --no-fail-fast

# Clippy runs for visibility but does not gate the build: the crate
# currently carries pre-existing style warnings that are out of scope for
# this workflow. Real defects are caught by the test suite above.
- name: Clippy (non-blocking)
run: cargo clippy --all-targets --locked || true

android-build:
name: Android cross-compile (aarch64)
runs-on: ubuntu-latest
defaults:
run:
working-directory: Rust/core
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Rust toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable
rustup target add aarch64-linux-android
rustc --version
cargo --version

- name: Set up Android NDK r29
uses: nttld/setup-ndk@v1
with:
ndk-version: r29
add-to-path: true

- name: Cache cargo registry and build artifacts
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-android-${{ hashFiles('Rust/core/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-android-

- name: Install cargo-ndk
run: cargo install cargo-ndk --version 4.1.2 --locked

- name: Build for aarch64-linux-android
run: cargo ndk -t arm64-v8a build --release --lib
83 changes: 83 additions & 0 deletions .github/workflows/rust-core.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: rust-core

on:
push:
branches: [main]
paths:
- 'Rust/**'
- '.github/workflows/rust-core.yml'
pull_request:
paths:
- 'Rust/**'
- '.github/workflows/rust-core.yml'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
# MSRV pulled from Rust/core/Cargo.toml (`rust-version = "1.96"`).
# Keep this in sync if Cargo.toml is bumped.
RUST_TOOLCHAIN: "1.96"

jobs:
fmt:
name: cargo fmt
runs-on: ubuntu-latest
defaults:
run:
working-directory: Rust/core
steps:
- uses: actions/checkout@v4
- name: Install Rust ${{ env.RUST_TOOLCHAIN }} with rustfmt
run: |
rustup toolchain install ${{ env.RUST_TOOLCHAIN }} --profile minimal --component rustfmt
rustup default ${{ env.RUST_TOOLCHAIN }}
- run: cargo fmt --all -- --check

build-test:
name: build + test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-15]
defaults:
run:
working-directory: Rust/core
steps:
- uses: actions/checkout@v4
- name: Install Rust ${{ env.RUST_TOOLCHAIN }}
run: |
rustup toolchain install ${{ env.RUST_TOOLCHAIN }} --profile minimal
rustup default ${{ env.RUST_TOOLCHAIN }}
- uses: Swatinem/rust-cache@v2
with:
workspaces: Rust/core
- name: cargo build --lib
run: cargo build --lib --verbose
- name: cargo test --lib
run: cargo test --lib --verbose

clippy:
name: cargo clippy (advisory)
runs-on: ubuntu-latest
defaults:
run:
working-directory: Rust/core
# Advisory only for now: the crate currently emits ~120 clippy warnings.
# This job surfaces them in the PR checks tab without blocking merges.
# Flip `continue-on-error` to `false` once the existing warnings are cleared.
continue-on-error: true
steps:
- uses: actions/checkout@v4
- name: Install Rust ${{ env.RUST_TOOLCHAIN }} with clippy
run: |
rustup toolchain install ${{ env.RUST_TOOLCHAIN }} --profile minimal --component clippy
rustup default ${{ env.RUST_TOOLCHAIN }}
- uses: Swatinem/rust-cache@v2
with:
workspaces: Rust/core
- run: cargo clippy --lib --no-deps -- -D warnings
Loading