Skip to content

0001. Use Easy Prefix for Easy8-Owned Entities

Status

Proposed

Date: 2026-07-23

Context

Easy8 is a fork of Redmine. It must stay compatible with Redmine database structure to support migration from Redmine to Easy8 and to reduce risk during future Redmine upgrades.

If Easy8 introduces generic names for its own entities, a future Redmine version can introduce the same table, model, route, permission, menu item, or related identifier. Such conflicts make migrations harder and can block compatibility with Redmine data.

Ruby namespaces such as Easy::Portfolio would normally be a clean way to separate Easy8-owned concepts. However, the existing Redmine-based infrastructure does not handle namespaces consistently. For example, the current menu manager cannot handle Easy:: namespaces correctly.

The existing codebase also commonly uses Easy-prefixed names. Continuing this convention keeps new code consistent with existing Easy8 platform code.

Decision

New Easy8-owned entities should use the Easy prefix instead of generic names or the Easy:: namespace.

Prefer names like:

  • EasyPortfolio
  • easy_portfolios
  • EasyPortfolioQuery
  • EasyPortfoliosController
  • easy_portfolios_path
  • :view_easy_portfolios

Avoid names like:

  • Portfolio
  • portfolios
  • PortfolioQuery
  • PortfoliosController
  • Easy::Portfolio

Related identifiers should follow the same convention where practical, including table names, model classes, controllers, routes, permissions, menu item names, EasyQuery classes, jobs, services, and API-facing identifiers.

Consequences

This reduces the risk of future conflicts with Redmine core database structure and application identifiers.

This keeps Redmine-to-Easy8 migration paths safer because Easy8-owned tables and identifiers are easier to distinguish from Redmine-owned ones.

This preserves compatibility with infrastructure that does not handle Ruby namespaces reliably.

The tradeoff is that EasyPortfolio is less idiomatic Ruby than Easy::Portfolio. In this codebase, Redmine compatibility and existing Easy8 consistency are more important than namespace purity.

Scope

This applies to new Easy8-owned entities and their related identifiers.

This does not require renaming existing entities.

This does not apply when intentionally reusing or extending a Redmine-owned table, model, route, permission, or API contract.

Plugin-specific entities may use a plugin-specific prefix when that better isolates the plugin and follows existing plugin conventions. Do not introduce an unprefixed generic entity name unless there is a clear compatibility reason.