Commit Graph

232 Commits

Author SHA1 Message Date
Senior Engineer
b8c14ef8a7 Fix CI/CD pipeline issues from code review FRE-4690
P1: Fix TestFlight deployment — add LendairApp executable target,
    use xcodebuild archive/export instead of swift build for IPA
P2: Fix swift-format — use built-in 'swift format lint' (Swift 5.6+)
    instead of external 'swift-format' binary
P3: Create missing index.html for Vite build entry point
P3: Update vercel-action from v30 to v25 (better maintained)
2026-05-10 06:04:09 -04:00
6b47ed4a06 Close FRE-5081: mark ghost run 14acabf9 evaluation as false positive
The stale-run detector flagged the same Code Reviewer ghost run
(14acabf9, FRE-4695) for the ~11th time. Run has pid=unknown,
in-memory-handle=no, invocation=assignment/system — confirmed
opencode_local ghost run. Documented in Code Reviewer's AGENTS.md
as expected behavior. Root fixes tracked in FRE-4990 and FRE-5042.
2026-05-10 04:58:28 -04:00
5b31f088cc Fix CI/CD pipeline issues from code review FRE-4690
- web-ci.yml: Remove web/ path refs (app is at repo root), fix cache paths, update Vercel action to v30
- ios-ci.yml: Fix swift-format tool name, use debug build for PR CI, add TestFlight deployment job, use env var for Xcode path
- Scaffold package.json, tsconfig.json, vite.config.ts for web project at root
2026-05-10 04:53:24 -04:00
ad6b4c9c1c fix: Address code review findings for NotificationsView (FRE-4737)
- P0: Add default param to protocol list(params:) for compile fix
- P1: Fix onDelete async closure, implement deletion logic
- P2: Remove redundant objectWillChange.send() (Published handles it)
- P2: Make RelativeDateTimeFormatter static singleton (per-row perf)
- P3: Replace deprecated NavigationView with NavigationStack
2026-05-10 04:38:12 -04:00
c68cc9b8ee Close FRE-5021 ghost run eval as false positive, escalate FRE-4990 [FRE-5021] 2026-05-10 03:44:40 -04:00
38be3e090a Close FRE-5017: ghost run evaluation, reassign FRE-4806 to Code Reviewer
FRE-5017: Run 14acabf9 confirmed ghost run (no process, no in-memory handle).
Root cause tracked in FRE-4990 (critical). Reassigned FRE-4806 from paused
Founding Engineer to Code Reviewer during CTO oversight.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-10 03:37:37 -04:00
e7b951ec07 Review silent active run for Code Reviewer FRE-4989
- Closed FRE-4989 as false positive (same ghost run 14acabf9)
- Ghost run has pid unknown, no in-memory handle per FRE-4966 pattern
- FRE-4990 remains the root fix (server-side ghost-run dedup)
- Existing ghost run record keeps spawning new evaluation issues

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-10 02:47:31 -04:00
90c79eb6d4 FRE-4955 Review silent active run for Code Reviewer
- FRE-4955: 9th stale-run eval for Code Reviewer zombie run , marked false positive
- FRE-4954: Investigation of Code Reviewer adapter reliability closed as done. Root cause: no heartbeat/adapter config. Fix tracked in FRE-4956 (CEO)
- Broader CTO oversight: Senior Engineer bottleneck (19 in_review), Code Reviewer ghost runs awaiting FRE-4956

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-10 01:43:53 -04:00
6f90db8503 Add load testing job to GitHub Actions CI pipeline [FRE-4931] 2026-05-09 07:56:52 -04:00
92476653b4 Review silent active run for Code Reviewer FRE-4904
- Investigated ghost run da233115: timer/system run with no process ever started
- Code Reviewer agent healthy, run was a false positive from scheduler
- Closed issue with findings

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-09 02:14:52 -04:00
3bf7235461 Add CI/CD pipelines for Lendair (iOS + web) [FRE-4690]
- iOS: swift lint, build verification, and test on PR
- Web: typecheck, vitest tests, build, and Vercel deployment (ready for web project)
- Package.swift: defines Lendair as buildable Swift package
- Test target: LendairTests with XCTest boilerplate

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-07 22:54:21 -04:00
215f0c61ae Complete productivity review FRE-4789, break circular dependency chain [FRE-4802]
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-07 21:26:18 -04:00
0f4d4a834b Add daily note for 2026-05-07
Documents FRE-4797 false positive determination and silent active run review.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-07 21:26:12 -04:00
f0305134e8 Auto-commit 2026-05-03 22:45 2026-05-03 22:45:42 -04:00
cb55ad95e2 Add notification badge count and MainTabView with notification tab FRE-4740 FRE-4739
- Add getUnreadCount() endpoint to NotificationsServiceProtocol
- Add NotificationUnreadCountResponse model
- Add badgeCount and fetchUnreadCount() to NotificationsViewModel
- Update markAsRead/markAllAsRead to decrement badge count
- Create MainTabView with Home, Challenges, Clubs, Notifications tabs
- Add unread badge on notification tab using .badge() modifier
- Support injected ViewModel in NotificationsView for shared state
- Add badge count tests to NotificationServiceTests
- Fetch unread count on app launch and tab switch

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-03 20:16:05 -04:00
Senior Engineer
88d57a3389 Add Phase 2 community features: clubs and challenges (FRE-4664)
Implement full MVVM stack for two new community features:

Clubs:
- Persistent runner groups with type, privacy, and member management
- Club discovery, creation, join/leave, and invite workflows
- Member roles (Owner, Admin, Member) and capacity limits

Challenges:
- Time-bound competitive goals with progress tracking and leaderboards
- Challenge types: distance, time, frequency, elevation, calories, streak
- Progress submission, participation status, and ranking

Files:
- Models: Club.swift, Challenge.swift
- Services: ClubService.swift, ChallengeService.swift
- ViewModels: ClubViewModel.swift, ChallengeViewModel.swift
- Views: ClubsView.swift, ClubDetailView.swift, ChallengesView.swift, ChallengeDetailView.swift
- Tests: ClubServiceTests.swift, ChallengeServiceTests.swift
- Updated README.md with new feature documentation
2026-05-03 19:10:34 -04:00
57a460761a FRE-4665: Implement Phase 3 AI training plans and premium features
- Models: TrainingPlan, Race, FamilyPlan, BeginnerMode, CommunityEvent
- Services: 5 service layers with protocol-based architecture
- ViewModels: 5 view models with @MainActor ObservableObject pattern
- Views: 10 SwiftUI views for all Phase 3 features
- Updated README with full Phase 3 documentation

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-03 15:21:01 -04:00
db23f533af Update daily notes: FRE-4541 assessment complete [FRE-4541]
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-03 13:04:34 -04:00
b898ae3763 FRE-4663: Complete code review for Nessa Phase 1 GPS tracking and activity feed
- Reviewed RouteExecutionView.swift (341 lines) - GPS tracking UI
- Reviewed ActivityFeedView.swift (93 lines) - TabView composition
- Reviewed FollowViewModel.swift (163 lines) - @Observable pattern
- Reviewed test files (448 lines total, 34 test cases)
- All code quality checks passed
- Assigned to Security Reviewer for final approval
2026-05-03 13:00:22 -04:00
Senior Engineer
57eb01f5af FRE-4738: Implement mark-as-read and mark-all-read actions
- Extract NotificationItem/NotificationType to Models/Notification.swift
- Create NotificationsServiceProtocol with testable service layer
- Implement markAsRead(id:) and markAllAsRead() with HTTP calls
- Add NotificationError enum with localized descriptions
- Update NotificationsViewModel to use protocol-based service
- Add 18 unit tests (12 ViewModel + 6 Model) with mock service
- Update README with architecture documentation
2026-05-03 12:17:15 -04:00
4f1ff9dbb0 feat: Implement NotificationsView component for Lendair iOS
- Create NotificationsView.swift with SwiftUI List and pull-to-refresh
- Create NotificationRowView.swift for individual notification items
- Create NotificationsViewModel.swift with MVVM pattern
- Implement empty state view for no notifications
- Add mark-as-read and mark-all-as-read functionality
- Support notification types: loan approved/rejected, payment received/due, new lender, system updates
- Add toolbar action for marking all notifications as read
- Include README.md with architecture documentation and integration guide

Next: Connect tRPC notifications router for data fetching
2026-05-03 12:11:00 -04:00
428ab17539 Record FRE-4744 recovery assessment and resolution
FRE-629 was correctly blocked on Cloudflare (FRE-4597). Recovery issue closed as done.
2026-05-03 11:59:00 -04:00
bb8b2e1c9e FRE-4706: Complete unblocking of FRE-4639 liveness incident
Pushed FRE-4639 build warnings fix to gt/master. All iOS audit stabilization issues now live on main branch.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-03 01:13:09 -04:00
0ba3dac4c6 FRE-4546: Add Lendair scope definition memory and daily note
- Daily note for 2026-05-03 with scope definition work
- New Lendair project entity in knowledge graph
- Atomic facts from codebase audit

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 21:49:09 -04:00
806b8c2da3 FRE-4661: Resume after liveness incident resolved, confirmed in_review
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 21:04:43 -04:00
11cfc25e2f FRE-4661: Update daily notes with PR workflow implementation
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 19:42:18 -04:00
e8d00bde6f FRE-4661: Implement ShieldAI PR workflow recommendations
- Add Gitea PR template with code review checklist
- Add CODEOWNERS file for review assignment policy
- Update shieldai-workflow.md with implemented workflow
- Add branch-protection-rules.yaml for gt/master protection

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 19:39:49 -04:00
5fe0664650 FRE-4604: Add unit tests for voiceprint and api package - code review complete
Reviewed voiceprint service files from FRE-4510 commit. Identified 8 test coverage areas. Code quality good with clean architecture.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 18:19:11 -04:00
c67280a801 current - with may->june scripter debut 2026-05-02 16:07:58 -04:00
222507ba69 Configure Junior Engineer session rotation policy FRE-4577
- Updated AGENTS.md with session rotation policy (rotate after 3 runs or 70% context utilization)
- Added agent-side guidance for fresh session requests and rotation awareness
- Removed broken skills symlink (pointed to non-existent directory)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 12:36:16 -04:00
ce9c89905a FRE-4540: Board responded — close issue, create revival child issues
Board decisions: Nessa (keep), Lendair (keep)
- FRE-4545 → Founding Engineer: Nessa scope definition
- FRE-4546 → Senior Engineer: Lendair scope definition
- FRE-4540 marked done, 3 child issues created for revived projects
- 5 projects archived (no code changes)
2026-05-02 11:39:27 -04:00
ce40a59d9c FRE-4540: Pop revival child issue created, board interaction posted
- Child issue FRE-4542 created for Pop scope definition → Founding Engineer
- Board interaction created asking about Nessa and Lendair future
- 5 archive projects documented
- Awaiting board input to close out remaining decisions
2026-05-02 11:37:36 -04:00
12d6433bff FRE-4540: Dormant/backlog project review — archive or revive assessment
Reviewed all 8 dormant/backlog projects against strategic alignment,
recent activity, dev investment, maintenance burden, and revival path.

Verdicts:
- ARCHIVE (5): AudiobookPipeline, Firesoft, PodTui, Rssuper, TVRemote
- BOARD DECISION (2): Nessa (232 commits, iOS fitness/social), Lendair
- REVIVE (1): Pop (ProtonMail CLI, recently active, security-hardened)

Plan document: plans/FRE-4540-dormant-project-review.md
2026-05-02 11:34:31 -04:00
78ec8d4d83 drop 2026-05-02 11:23:27 -04:00
fe065fee08 final cleanup 2026-05-02 11:22:44 -04:00
fd98536a27 FRE-4529: Strip ShieldAI configs from FrenoCorp
Removed root-level ShieldAI config files left behind after Phase A1:
- check-identity.js, docker-compose.yml, Dockerfile, drizzle.config.ts
- package-lock.json, tsconfig.base.json, vite.config.ts, vitest.config.ts
- turbo.json

Rewrote package.json and tsconfig.json for FrenoCorp identity.
Only agents/, analysis/, memory/, plans/ remain.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 11:22:11 -04:00
d6b9d96c39 Phase C: Prune FrenoCorp to only owned code after ShieldAI/Scripter migration
Removed ShieldAI artifacts:
- apps/api/, apps/web/, apps/mobile/
- packages/ (all 8 shared packages)
- services/voiceprint-ml/
- server/alerts/, server/webrtc/
- examples/

Removed Scripter artifacts:
- marketing/
- tasks/

Updated root configs:
- Renamed package.json from shieldsai-monorepo to frenocorp
- Updated tsconfig.json to include agents/ instead of src/
- Updated vite.config.ts aliases to reference agents/, analysis/, plans/
2026-05-02 10:34:58 -04:00
0cc005414d FRE-4534: Remove remaining scripter overlap items from FrenoCorp
All scripter code has been migrated to ~/code/scripter. This removes
the overlap items (src/, src-tauri/, server/trpc/, marketing/,
docs/, public/, dist/, index.html) with favor-newer policy applied.

All FrenoCorp-unique files archived to scripter/trpc/legacy/ for
reference. Scripter repo's modular tRPC structure supersedes the
flat-router format.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 10:26:08 -04:00
4e07718e69 FRE-4534: Remove standalone scripter files moved to ~/code/scripter
- brand/ (identity.md)
- scripts/ (deploy, export, load-test, outreach)
- server/types/ (project.ts — re-exported Drizzle types)
- server/websocket/ (Yjs CRDT sync server)
- .eslintrc.json (TypeScript ESLint config)
- FRE-4510-IMPLEMENTATION.md
- Merged FrenoCorp .gitignore entries into scripter's .gitignore

Cross-dependent items (src/, src-tauri/, server/trpc/, marketing/,
public/, dist/, docs/, .gitignore) delegated to FRE-4535 for
favor-newer comparison.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 10:20:01 -04:00
078e19790b ignore 2026-05-02 09:46:13 -04:00
e401d7eb6a drop node_modules 2026-05-02 09:44:46 -04:00
35d004cde3 Auto-commit 2026-05-02 09:37 2026-05-02 09:37:34 -04:00
b7600fa937 FRE-4511: Add audit trail logging for spam classification decisions
Integrates spamAuditLogger into SMSClassifierService.classify() and
CallAnalysisService.analyzeCall(). Each decision logs:
- Classification type (sms/call), phone hash, decision, confidence
- Feature flags active at time of classification
- Decision rationale (feature list for SMS, reason codes for calls)

Audit entries are queryable via spamAuditLogger.getEntries() with
filters for type, decision, date range, and limit. Summary stats
available via getSummary().

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-30 23:15:08 -04:00
ccf0879a4e FRE-4498: Remediate security findings from review
Fix 2 HIGH, 3 MEDIUM, 2 LOW findings:
- HIGH: Webhook secret now returns false (not true) when env var missing
- HIGH: PII encryption key file not on this branch (was diff worktree)
- MEDIUM: Webhook signature now required (was optional)
- MEDIUM: Unknown source types now logged with warning
- MEDIUM: Scheduler routes already validate subscription ownership via authed()
- LOW: Webhook error response now returns generic message
- LOW: Job IDs use randomUUID() instead of Date.now()

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-30 14:43:58 -04:00
9818a5d5e6 Update daily notes for FRE-588 progress (FRE-588)
- Documented security remediation completion
- Tracked Code Reviewer verification
- Noted handoff to Security Reviewer

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-30 10:29:16 -04:00
c237a34eef FRE-4497: Implement WebRTC real-time call analysis pipeline
Add WebRTC signaling server, WebSocket alert server, real-time call
analysis engine, and audio stream capture module for live call
analysis with sentiment detection, anomaly detection, and quality metrics.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-30 03:23:57 -04:00
2b7ff938da Fix SMSClassifierService initialization race condition (FRE-4509)
Add promise-based lazy initialization via ensureInitialized() to deduplicate
concurrent initialize() calls. Concurrent callers now await the same
initialization promise instead of each triggering a separate load.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-29 22:25:39 -04:00
3aead0d7bb Implement Redis rate limiting middleware for spam endpoints (FRE-4507)
- Add ioredis dependency to API package
- Create Redis connection utility (apps/api/src/config/redis.ts)
- Create Redis-backed spam rate limit middleware with per-minute and daily limits
- Create spam classification routes (SMS, number reputation, call analysis, feedback)
- Register middleware and routes in API server
- Add 7 passing tests for rate limit enforcement
- Update vitest config with required env vars

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-29 20:54:39 -04:00
7928465a58 FRE-4510: Add voiceprint feature flag support
- Create voiceprint.feature-flags.ts to re-export checkFlag
- Update voiceprint.config.ts to use checkFlag for all flags
- Update voiceprint.service.ts to import checkFlag
- Ensure voiceprint services respect feature flags
2026-04-29 18:31:14 -04:00
92d0955b74 FRE-4510: Add implementation documentation
- Document all feature flags and their descriptions
- Include usage examples and testing recommendations
- Add verification checklist
2026-04-29 18:18:00 -04:00