Hive Hive
Sign in

refactor(projects): introduce Project as the top-level grouping above Meadow

GitHub issue · Closed

Metadata
Source
tuist/hive #56
Updated
Jun 24, 2026
Domains
Hive
Details

Stacked on top of #53 — review/merge that first. This branch targets feat/release-update-sources-rss-feeds so the diff is just the project layer.

Summary

Introduces Project as a first-class entity above Meadow, separating the product (Tuist, Hive, Noora, Atlas, Kura) from the sub-domain within it (Cache, Generated projects, …). Projects own repositories and drop sources; meadows are optional tags within a project.

  • Schema: new projects table with project_id added to meadows, github_repositories, and drop_sources. The meadows_github_repositories many-to-many join is removed. The migration backfills one project per existing meadow (lossless), inheriting name, description, and visibility, and moves repositories into their meadow’s project.
  • Classifier candidate set narrows from “every meadow attached to the repo” to “every meadow in the source’s project”. Both the drops classifier and the forage GitHub issue classifier follow the same shape, so classification stays inside product boundaries.
  • Backward-compatible UX: Meadows.create_meadow/1 auto-bootstraps a project named after the meadow when no project_id is supplied, so existing forms and seeds keep working unchanged. New code passes project_id explicitly to group several meadows under one project.
  • UI: /projects index and /projects/:id detail page (sidebar entry above Meadows). /ops/drops modal gains a project picker. Seeds rewritten to demonstrate the model: a Tuist project with Cache and Generated projects sub-domain meadows, an Atlas project with no meadows (the Kura case where the instance only cares about one product).

Testing

  • mix precommit (compile, format, credo, full suite: 590 tests passing)

🤖 Generated with Claude Code

Comments

No GitHub comments yet.