Full story map for Loopless (FreelanceHub). All stories are derived from the project plan and requirements document. Stories are organized by epic and assigned to sprints.
Status legend: Done · In Progress · Planned · Backlog
PM-2 / M1.2 deliverable. Every MVP story is scored with RICE for objective ranking and classified with MoSCoW for release scope. The two frameworks complement each other: RICE answers "in what order?", MoSCoW answers "is it in this release at all?".
RICE = (Reach × Impact × Confidence) / Effort — Intercom's standard formula.
| Input | Scale | Notes |
|---|---|---|
| Reach | 1–10 | Estimated users touched in a quarter, normalized to our target user base. 10 = every active user every day; 4 = developers/devops only; 2 = admins only. |
| Impact | 0.25 / 0.5 / 1 / 2 / 3 | 3 = massive (north-star moving); 2 = high; 1 = medium; 0.5 = low; 0.25 = minimal. |
| Confidence | 50% / 80% / 100% | 100% = scoped + spiked; 80% = scoped, no spike; 50% = speculative. |
| Effort | 0.25 / 0.5 / 1 / 2 / 3 (person-months) | Single dev-month working full time. Halved for backend-only work, doubled when SignalR + UI + tests all required. |
Score is relative, used only for ordering inside the same MoSCoW bucket. Outside the bucket (e.g. comparing a Must to a Could) the MoSCoW label wins regardless of score.
MoSCoW scope rules for the MVP (this release):
| Bucket | Definition | Action if cut |
|---|---|---|
| Must | MVP cannot ship without it. Tied to either auth, the core product loop (discovery → project → standup → message), or a graded fellowship requirement. | Block the release |
| Should | Significant value, but a workaround exists. Ships if scope allows; first to slip if a Must overruns. |
Defer to v1.1 |
| Could | Nice-to-have. Ships only if all Must + Should are done and time remains. |
Park in backlog |
| Won't (this release) | Recognized but explicitly out of scope. Documented to prevent scope-creep arguments mid-sprint. | Re-evaluate next quarter |
Stories sorted within each MoSCoW bucket by descending RICE score.
| # | Story | Reach | Impact | Confidence | Effort (pm) | RICE | Sprint | Status |
|---|---|---|---|---|---|---|---|---|
| 1 | US-1.3 Sign in with email | 10 | 2 | 100% | 0.25 | 80.0 | 2 | Planned |
| 2 | US-1.1 Sign up as freelancer | 10 | 3 | 100% | 0.5 | 60.0 | 2 | In Progress |
| 3 | US-1.5 Select proficiency (freelancer onboarding) | 10 | 3 | 100% | 0.5 | 60.0 | 2 | Done |
| 4 | US-1.2 Sign up as enterprise | 8 | 3 | 100% | 0.5 | 48.0 | 2 | In Progress |
| 5 | US-1.6 Complete enterprise onboarding | 8 | 3 | 100% | 0.5 | 48.0 | 2 | In Progress |
| 6 | US-3.1 Create a project | 8 | 3 | 100% | 0.5 | 48.0 | 4 | Planned |
| 7 | US-4.1 Submit daily standup | 8 | 3 | 100% | 0.5 | 48.0 | 4 | Planned |
| 8 | US-5.4 Message history | 10 | 2 | 100% | 0.5 | 40.0 | 5 | Planned |
| 9 | US-4.2 View team standups | 8 | 2 | 100% | 0.5 | 32.0 | 4 | Planned |
| 10 | US-2.4 Profile pages | 10 | 2 | 100% | 1 | 20.0 | 3 | Planned |
| 11 | US-7.2 AI project summary (RAG) | 7 | 3 | 80% | 1 | 16.8 | 4 | Planned |
| 12 | US-3.5 View project dashboard | 10 | 3 | 100% | 2 | 15.0 | 4 | Planned |
| 13 | US-2.3 Search | 9 | 2 | 80% | 1 | 14.4 | 3 | Planned |
| 14 | US-3.4 Link GitHub repository | 8 | 2 | 80% | 1 | 12.8 | 4 | Planned |
| 15 | US-2.1 Freelancer discovery feed | 10 | 3 | 80% | 2 | 12.0 | 3 | Planned |
| 16 | US-2.2 Project discovery feed | 10 | 3 | 80% | 2 | 12.0 | 3 | Planned |
| 17 | US-5.1 Send a direct message (SignalR) | 10 | 3 | 80% | 2 | 12.0 | 5 | Planned |
| 18 | US-7.1 Semantic freelancer matching (pgvector) | 10 | 3 | 80% | 2 | 12.0 | 4 | Planned |
| 19 | US-8.1 Docker Compose dev environment | 4 | 3 | 100% | 1 | 12.0 | 1 | Done |
| 20 | US-8.2 CI pipeline (GitHub Actions) | 4 | 3 | 100% | 1 | 12.0 | 5 | Done |
| 21 | US-8.3 Kubernetes deployment | 4 | 3 | 100% | 2 | 6.0 | 5 | Done |
| 22 | US-8.5 Observability stack (Prom/Graf/Loki/ELK) | 4 | 3 | 80% | 2 | 4.8 | 5 | Done |
| # | Story | Reach | Impact | Confidence | Effort (pm) | RICE | Sprint | Status |
|---|---|---|---|---|---|---|---|---|
| 1 | US-3.2 Express interest in a project | 7 | 2 | 100% | 0.5 | 28.0 | 4 | Planned |
| 2 | US-3.3 Accept / reject applicants | 7 | 2 | 100% | 0.5 | 28.0 | 4 | Planned |
| 3 | US-3.8 Leave / archive a project | 6 | 1 | 100% | 0.25 | 24.0 | 5 | Planned |
| 4 | US-1.4 Sign in with GitHub SSO | 7 | 2 | 80% | 1 | 11.2 | 2 | Planned |
| 5 | US-4.3 Standup reminders (Hangfire) | 6 | 1 | 80% | 0.5 | 9.6 | 4 | Planned |
| 6 | US-5.3 File sharing in messages | 6 | 2 | 80% | 1 | 9.6 | 5 | Planned |
| 7 | US-4.4 Standup analytics + blocker trends | 5 | 2 | 80% | 1 | 8.0 | 6 | Planned |
| 8 | US-7.3 Blocker detection (NLP sentiment) | 5 | 2 | 80% | 1 | 8.0 | 6 | Planned |
| 9 | US-8.4 Terraform IaC | 4 | 2 | 80% | 1 | 6.4 | 5 | In Progress |
| 10 | US-8.6 Staging environment | 4 | 2 | 80% | 1 | 6.4 | 5 | Planned |
| 11 | US-6.3 Content moderation queue | 2 | 3 | 80% | 1 | 4.8 | 6 | Planned |
| 12 | US-6.1 Admin user management | 2 | 2 | 100% | 1 | 4.0 | 6 | Planned |
| 13 | US-6.2 Platform analytics dashboard | 2 | 2 | 100% | 1 | 4.0 | 6 | Planned |
| 14 | US-3.6 Manage tasks (kanban) | 8 | 2 | 80% | 1 | 12.8 | 4 | Planned |
| 15 | US-3.7 AI project summary trigger UI | 7 | 3 | 80% | 1 | 16.8 | 5 | Planned |
| # | Story | Reach | Impact | Confidence | Effort (pm) | RICE | Sprint | Status |
|---|---|---|---|---|---|---|---|---|
| 1 | US-5.2 Typing indicators (SignalR) | 7 | 1 | 80% | 0.5 | 11.2 | 6 | Backlog |
| 2 | Feature flag dashboard polish UI | 2 | 1 | 80% | 0.5 | 3.2 | 6 | Backlog |
The following are recognized product directions but deliberately excluded from the MVP to protect the 12-week timeline. Re-evaluate Q3 2026.
| Item | Why excluded for MVP |
|---|---|
| Native mobile apps (iOS/Android) | Web-responsive covers 90% of demo audience; native = +12 person-weeks |
| Marketplace + escrow payments | Regulatory + KYC overhead exceeds capstone scope |
| Multi-brand / white-label support | Adds tenant isolation complexity; covered partially by bonus multi-tenancy track |
| Public freelancer rating + reviews | Requires moderation pipeline at scale; defer to post-launch |
| Localization beyond English | Single locale ships first; i18n scaffold deferred |
| Stripe / payment integration | Out of scope per project plan §1 |
| Real-time co-editing of project pages | Operational transform / CRDT effort not justified for v1 |
| Video calls / screen sharing | Async-first product positioning; sync calls are anti-thesis |
| MoSCoW | Stories | Total effort (pm) | Effort weighted by Confidence |
|---|---|---|---|
| Must | 22 | 17.25 | 14.6 |
| Should | 15 | 11.25 | 9.05 |
| Could | 2 | 1.0 | 0.8 |
| MVP commit | 37 | 28.5 | 23.65 |
With three full-time fellows over 12 weeks ≈ 9 person-months capacity at sustainable pace — so the Must bucket alone (14.6 confidence-weighted person-months) is already 62% over a single quarter's capacity. This is why the rubric-graded MVP scope is fellowship-graded across two quarters of equivalent effort and why every Should is explicitly defer-safe.
The score is not static. Re-run RICE on any story when:
- A fellowship rubric explicitly requires it (Confidence → 100%, MoSCoW → at minimum
Should). - An A/B test or PostHog event disconfirms our Reach or Impact estimate by >50%.
- A dependency story ships ahead of schedule (Effort drops, Confidence rises).
- A production incident (see
postmortem.md) creates a newMustaction item.
As a freelancer,
I want to create an account with my email and password,
So that I can access the Loopless platform and set up my profile.
Acceptance Criteria:
- Sign-up form accepts email, password, and confirm password
- Password must be ≥ 8 characters with at least one number
- Duplicate email shows a clear error message
- On success, user is redirected to the onboarding wizard
- Email confirmation is sent (or mocked in dev)
Sprint: 2 · Status: In Progress · Tasks: CP-75
As an enterprise representative,
I want to register my company on Loopless,
So that I can post projects and discover freelancers.
Acceptance Criteria:
- Sign-up flow has a role selector (Freelancer / Enterprise) before account creation
- Enterprise users provide company name during onboarding
- Enterprise onboarding shows category chips (8 categories) instead of skill chips
- On completion, enterprise dashboard is shown
Sprint: 2 · Status: In Progress · Tasks: CP-72, CP-73
As a registered user,
I want to log in with my email and password,
So that I can access my dashboard and continue my work.
Acceptance Criteria:
- Login form accepts email and password
- Invalid credentials show a clear error without revealing which field is wrong
- Successful login redirects to the user's role-appropriate dashboard
- Session persists across page refreshes (JWT stored in secure httpOnly cookie)
Sprint: 2 · Status: Planned · Tasks: CP-74
As a user,
I want to log in using my GitHub account,
So that I can authenticate quickly without managing a separate password.
Acceptance Criteria:
- "Continue with GitHub" button is present on login and sign-up pages
- OAuth flow redirects to GitHub and back to Loopless
- On first GitHub login, user is directed to onboarding to complete their profile
- GitHub avatar is used as the user's profile picture
Sprint: 2 · Status: Planned · Tasks: CP-76
As a freelancer,
I want to select my skills and proficiency levels during onboarding,
So that the platform can match me with relevant projects.
Acceptance Criteria:
- 50+ skill chips are displayed, grouped by category
- Each chip can be toggled on/off
- At least 1 skill must be selected to proceed
- Selected skills are saved to the user profile and used for semantic matching
- Selections persist if the user navigates back in the wizard
Sprint: 2 · Status: Done · Tasks: CP-70, CP-71, CP-72, CP-73
As an enterprise user,
I want to specify my company's industry and project needs during onboarding,
So that the platform can surface relevant freelancers.
Acceptance Criteria:
- 8 enterprise category chips are shown (e.g., Engineering, Design, Marketing)
- At least 1 category must be selected to proceed
- Company size and project budget range can be optionally set
- Onboarding completion creates an enterprise profile and redirects to dashboard
Sprint: 2 · Status: In Progress · Tasks: CP-72, CP-73
As an enterprise user,
I want to see a ranked list of freelancers relevant to my needs,
So that I can quickly identify the best candidates for my project.
Acceptance Criteria:
- Feed shows freelancers ranked by semantic similarity to the enterprise's category profile
- Each card shows: name, avatar, top skills, match score, hourly rate
- Feed is paginated (20 results per page)
- Filter by skill, availability, and rate range
Sprint: 2 (mocked UI), 5 (API integration) · Status: Planned · Tasks: CP-63, CP-127
As a freelancer,
I want to see a ranked list of projects matching my skills,
So that I can find the most relevant work opportunities.
Acceptance Criteria:
- Feed ranks projects by cosine similarity to the freelancer's skill embeddings
- Each card shows: project title, enterprise name, required skills, budget, deadline
- Filter by skills, budget, and duration
- "Express Interest" button on each card
Sprint: 2 (mocked UI), 4 (backend matching) · Status: Planned · Tasks: CP-63, CP-107
As a user,
I want to search for freelancers or projects by keyword,
So that I can find what I'm looking for beyond the ranked feed.
Acceptance Criteria:
- Global search bar in the top navigation
- Results split into Freelancers and Projects tabs
- Search indexes: name, skills, bio, project title, description
- Results return within 300ms for queries hitting the search index
Sprint: 4 · Status: Planned · Tasks: CP-107
As a user,
I want to view a detailed profile page for any freelancer or enterprise,
So that I can evaluate a potential match before reaching out.
Acceptance Criteria:
- Freelancer profile shows: bio, skills, match score, GitHub activity, past projects, reviews
- Enterprise profile shows: company description, open projects, past collaborations
- Profiles are publicly accessible by direct URL
- "Message" and "Propose Project" CTAs are visible on freelancer profiles
Sprint: 2 (mocked UI) · Status: Planned · Tasks: CP-67
As an enterprise user,
I want to create a project with title, description, required skills, budget, and deadline,
So that I can attract suitable freelancers.
Acceptance Criteria:
- Project creation form with all required fields + Zod validation
- Skill tags can be attached to the project (used for semantic matching)
- Project can be saved as Draft or Published
- Published projects appear in the discovery feed within 30 seconds
Sprint: 2 (mocked UI), 4 (backend) · Status: Planned · Tasks: CP-64, CP-101
As a freelancer,
I want to express interest in a project with a short message,
So that the enterprise can evaluate my application.
Acceptance Criteria:
- "Express Interest" button appears on project cards and detail pages
- Modal prompts for a short cover message (max 500 characters)
- Enterprise receives a notification when a freelancer expresses interest
- Freelancer can see their pending applications in their profile
Sprint: 4 · Status: Planned · Tasks: CP-101
As an enterprise user,
I want to review applications and accept or reject freelancers for a project,
So that I can build my project team.
Acceptance Criteria:
- Applications list shows: freelancer name, match score, cover message, profile link
- Accept sends a notification to the freelancer and creates a project membership
- Reject sends a notification and removes the application from active queue
- Bulk accept/reject supported
Sprint: 4 · Status: Planned · Tasks: CP-102
As an enterprise user,
I want to link a GitHub repository to my project,
So that Loopless can auto-sync commits and generate AI project summaries.
Acceptance Criteria:
- OAuth connection to GitHub in project settings
- Repository selection from a dropdown of repos in the organization
- Commit sync runs every 30 minutes via Hangfire background job
- Last sync timestamp is visible in the project dashboard
Sprint: 4 · Status: Planned · Tasks: CP-103
As a project member (freelancer or enterprise),
I want to see a project dashboard with active tasks, recent commits, and team members,
So that I can stay aligned without synchronous meetings.
Acceptance Criteria:
- Dashboard shows: task list, GitHub commit feed, team roster, standup history
- AI-generated project summary visible at top (from RAG pipeline)
- Role-appropriate actions: enterprise can manage tasks; freelancers can update status
Sprint: 2 (mocked UI), 4 (backend) · Status: Planned · Tasks: CP-64, CP-104
As a project manager (enterprise user),
I want to create and assign tasks to freelancers within a project,
So that I can track progress without leaving the platform.
Acceptance Criteria:
- Tasks have: title, description, assignee, due date, status (Todo / In Progress / Done)
- Assignee must be an accepted project member
- Status changes are logged in the activity feed
- Tasks are visible on the project dashboard
Sprint: 4 · Status: Planned · Tasks: CP-104
As a project member,
I want to see an AI-generated summary of the project's recent activity,
So that I can catch up quickly after being away.
Acceptance Criteria:
- Summary is generated from: recent commits, linked files, project description
- RAG pipeline uses pgvector embeddings + GPT summary endpoint
- Summary is regenerated after each commit sync cycle (every 30 min)
- Summary shows "last updated" timestamp
Sprint: 4 · Status: Planned · Tasks: CP-108
As a user,
I want to leave a project I am no longer working on, or archive a completed project,
So that my workspace stays organized.
Acceptance Criteria:
- Freelancer can leave a project; enterprise receives a notification
- Enterprise can archive a project; all members lose active access but history is preserved
- Archived projects are searchable with an "Archived" filter
Sprint: 5 · Status: Planned · Tasks: CP-132
As a freelancer,
I want to submit a structured daily standup check-in,
So that my team knows my progress without requiring a live meeting.
Acceptance Criteria:
- Standup form has three fields: Yesterday / Today / Blockers
- Each field is required; max 500 characters each
- Only one standup per user per day per project
- Submission triggers a notification to all project members
Sprint: 2 (mocked UI), 3 (backend) · Status: Planned · Tasks: CP-66, CP-87
As an enterprise user or team member,
I want to see all standup entries for my project in a feed,
So that I can monitor team progress asynchronously.
Acceptance Criteria:
- Standup feed is sorted by date descending
- Each entry shows: author avatar, name, timestamp, and all three fields
- Filter by team member and date range
- Missing standups are highlighted (no entry for a working day)
Sprint: 2 (mocked UI), 3 (backend) · Status: Planned · Tasks: CP-66, CP-87
As a project member,
I want to receive a daily reminder to submit my standup,
So that I don't miss my check-in.
Acceptance Criteria:
- Reminder is sent at a configurable time (default 9:00 AM user's timezone) via in-app notification
- Reminder is skipped if the user already submitted that day
- User can disable reminders per project in settings
Sprint: 4 · Status: Planned · Tasks: CP-94
As an enterprise user,
I want to see completion rate and blocker frequency for my team's standups,
So that I can identify at-risk team members early.
Acceptance Criteria:
- Dashboard widget shows: 7-day completion rate per member, top recurring blockers
- Blockers are extracted using AI keyword analysis
- Export standup history as CSV
Sprint: 6 · Status: Planned · Tasks: CP-141
As a user,
I want to send a direct message to another user on the platform,
So that I can communicate without leaving Loopless.
Acceptance Criteria:
- Users can initiate a DM from any profile page or project member list
- Message input supports text and emoji
- Messages are delivered in real time via SignalR
- Unread message count appears on the messaging icon in the nav
Sprint: 2 (mocked UI), 4 (backend) · Status: Planned · Tasks: CP-65, CP-105, CP-106
As a user in a DM conversation,
I want to see when the other person is typing,
So that the conversation feels natural.
Acceptance Criteria:
- "…" indicator appears when the other user has been typing for > 1 second
- Indicator disappears when the other user stops typing for > 3 seconds
- Works across multiple browser tabs
Sprint: 4 · Status: Planned · Tasks: CP-105
As a user,
I want to attach files to my messages,
So that I can share deliverables and references without switching tools.
Acceptance Criteria:
- File upload via drag-and-drop or browse button
- Max file size: 20MB; allowed types: PDF, PNG, JPG, DOCX, ZIP
- Files are stored in S3-compatible object storage
- Recipient can preview images inline; other files show a download link
Sprint: 5 · Status: Planned · Tasks: CP-130
As a user,
I want to scroll back through past messages in a conversation,
So that I can reference earlier discussions.
Acceptance Criteria:
- Infinite scroll loads messages in batches of 50
- Messages are stored indefinitely (no auto-delete)
- Search within a conversation by keyword
Sprint: 2 (mocked UI), 5 (backend) · Status: Planned · Tasks: CP-65, CP-106
As a platform admin,
I want to view, suspend, and delete user accounts,
So that I can enforce platform policies.
Acceptance Criteria:
- Admin dashboard lists all users with role, join date, and activity status
- Suspend action blocks login without deleting data (reversible)
- Delete action soft-deletes and anonymizes personal data (GDPR)
- Admin actions are logged in an audit trail
Sprint: 5 · Status: Planned · Tasks: CP-129
As a platform admin,
I want to see key platform metrics (signups, active projects, messages sent),
So that I can track platform health.
Acceptance Criteria:
- Dashboard shows: daily/weekly signups, active projects count, total messages sent
- Charts use 30-day rolling window by default
- Metrics are sourced from Prometheus; displayed in Grafana-style widgets
Sprint: 6 · Status: Planned · Tasks: CP-140
As a platform admin,
I want to review flagged content and profiles,
So that I can maintain community standards.
Acceptance Criteria:
- Users can flag a message or profile
- Flagged items appear in an admin review queue
- Admin can dismiss flag, send warning to user, or suspend account
- Flagged content is blurred for other users until reviewed
Sprint: 6 · Status: Planned · Tasks: CP-143
As an enterprise user,
I want to receive AI-ranked freelancer recommendations based on my project needs,
So that I find the best match faster.
Acceptance Criteria:
- Enterprise selects required skills; embeddings are generated via OpenAI API
- IVFFlat ANN search on pgvector returns top-20 nearest freelancers
- Match score (0–100%) shown on each freelancer card
- Re-ranking runs nightly for all active enterprise profiles
Sprint: 4 · Status: Planned · Tasks: CP-107
As a project member,
I want to see a natural language summary of my project's recent activity,
So that I can understand project health at a glance.
Acceptance Criteria:
- RAG pipeline ingests: last 50 commits, task descriptions, recent standups
- Summary is ≤ 200 words, in plain English
- "Regenerate" button allows manual refresh
- Summary is cached; regenerated automatically every 30 minutes
Sprint: 4 · Status: Planned · Tasks: CP-108 (shared with US-3.7)
As an enterprise user,
I want to be alerted when a team member's standup mentions a recurring blocker,
So that I can intervene before it delays the project.
Acceptance Criteria:
- NLP keyword extraction identifies potential blockers from standup "Blockers" field
- If same blocker keyword appears 3+ times in 7 days, a notification is sent to the enterprise
- Blocker alert shows: which freelancer, what keyword, how many times
Sprint: 6 · Status: Planned · Tasks: CP-142
As a developer,
I want to spin up the full stack locally with a single command,
So that I can develop without manual service configuration.
Acceptance Criteria:
-
docker compose upstarts all 10 services - Services are accessible at documented ports within 60 seconds
- Hot reload works for both frontend and backend
- Volume mounts preserve data between restarts
Sprint: 1 · Status: Done · Tasks: CP-10
As a developer,
I want to have automated lint, test, and build checks on every PR,
So that broken code is caught before it merges.
Acceptance Criteria:
- GitHub Actions runs on every push to any branch and every PR to
main - Jobs: lint (ESLint + .NET analyzer), test (Jest + xUnit), build, Trivy security scan
- PR cannot merge if any job fails
- Discord notification sent on build failure
Sprint: 1 · Status: Done · Tasks: CP-11
As a DevOps engineer,
I want to deploy the application to Kubernetes with Deployments, Services, and Ingress,
So that the app can scale and self-heal in production.
Acceptance Criteria:
- Kubernetes manifests for frontend, backend, and all dependencies
- Horizontal Pod Autoscaler configured for frontend and backend
- Ingress routes traffic based on path prefix
- All secrets stored in Kubernetes Secrets (not ConfigMaps)
Sprint: 4–5 · Status: Planned · Tasks: CP-111, CP-120
As a DevOps engineer,
I want to provision cloud infrastructure using Terraform,
So that environments are reproducible and version-controlled.
Acceptance Criteria:
- Helm charts provisioning: PostgreSQL, Redis, MinIO (all in-cluster)
- Charts parameterized via
values.yamlfor staging and production environments - Persistent storage configured with
storageClassName - All services accessible by backend pods via Kubernetes service DNS
Sprint: 5 · Status: Planned · Tasks: CP-121
As a DevOps engineer,
I want to collect metrics, logs, and traces from all services,
So that I can diagnose production issues quickly.
Acceptance Criteria:
- Prometheus scrapes metrics from frontend, backend, and infrastructure services
- Serilog ships structured logs to Loki; Grafana dashboards display them
- Alerts defined in Prometheus for: high error rate, p95 latency > 500ms, pod restarts
- Grafana accessible at
:3011in dev, secured behind auth in prod
Sprint: 5 · Status: Planned · Tasks: CP-122, CP-123
As a developer,
I want to have a staging environment that mirrors production,
So that I can verify features before they reach real users.
Acceptance Criteria:
- Staging is deployed automatically when
mainbranch passes CI - Staging uses a separate database and Keycloak realm
- Staging URL is shared with team in the deployment notification
- Production deployment requires manual approval gate in GitHub Actions
Sprint: 6 · Status: Planned · Tasks: CP-144, CP-145, CP-146