Skip to content

feat(ogar-vocab): MemberRole + CustomValue + EnabledModule — structural completers (domain saturation)#73

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/ogar-vocab-memberrole-customvalue-module
Jun 19, 2026
Merged

feat(ogar-vocab): MemberRole + CustomValue + EnabledModule — structural completers (domain saturation)#73
AdaWorldAPI merged 1 commit into
mainfrom
claude/ogar-vocab-memberrole-customvalue-module

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Structural-completion trio — saturates the OP↔Redmine project-mgmt overlap

Each promotion completes a relationship around an existing canonical concept:

Canonical id Completes
project_member_role 0x0118 RBAC triangle: membership ↔ role
project_custom_value 0x0119 value side of project_custom_field
project_enabled_module 0x011A per-project module enablement

All three are identical across both curators (pure belongs_to joins).

  • project_member_rolemembership → ProjectMembership, role → ProjectRole (closes the RBAC triangle now that ProjectRole exists via feat(ogar-vocab): ProjectRole (RBAC) + Group folds into ProjectActor #72), plus the real inherited_from attribute both curators carry for group-derived role assignments.
  • project_custom_valuecustom_field → ProjectCustomField; polymorphic customized kept opaque (customized_type discriminator + value text).
  • project_enabled_moduleproject → Project + name (module key).

ID coordination

0x0117 left reserved for project_role (#72, in flight). This batch uses 0x01180x011A so neither PR rebases regardless of merge order. The member_role → ProjectRole family edge references the target by string, valid before #72 merges.

Tests

Resolver arms (curator name + plural-table + PascalCase), the 3 coverage tests extended, and new real-corpus test redmine_and_openproject_memberrole_customvalue_module_converge.

Green

ogar-vocab 41 · ogar-from-ruff 24 · ogar-from-rails 14 real-corpus (+1) · clippy clean.

Domain saturation

With #72 + this PR merged, every substantive cross-curator model from the 38-name Redmine↔OpenProject overlap probe is promoted. The OP↔Redmine project-mgmt domain (0x01XX) is at structural saturation:

  • Core: project, project_work_item, billable_work_entry, project_actor (User/Principal/Group)
  • Lookups: project_status, project_type, priority
  • Collaboration: journal, comment, news, message, forum, watcher
  • Structure: membership, role, member_role, repository, changeset, version, wiki_page, query, relation, attachment, custom_field, custom_value, enabled_module

Remaining un-promoted commons are thin leaves (UserPreference, Change, WikiRedirect, Setting) or abstract STI bases (Enumeration) — low marginal value. Natural next direction: a new curator corpus / domain rather than more depth here.

🤖 Generated with Claude Code

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

…l completers)

Final structural-completion batch for the OP <-> Redmine project-mgmt
domain. Each completes a relationship around an existing canonical:

| Canonical                | id      | Completes                          |
|--------------------------|---------|------------------------------------|
| project_member_role      | 0x0118  | RBAC triangle: membership <-> role |
| project_custom_value     | 0x0119  | value side of project_custom_field |
| project_enabled_module   | 0x011A  | per-project module enablement      |

All three are identical across both curators (belongs_to joins).

- project_member_role: membership -> ProjectMembership, role -> ProjectRole
  (closes the RBAC triangle now that ProjectRole exists via #72), plus
  the real inherited_from attribute both curators carry for group-derived
  role assignments.
- project_custom_value: custom_field -> ProjectCustomField, polymorphic
  customized kept opaque (customized_type discriminator + value text).
- project_enabled_module: project -> Project + name (module key).

0x0117 left reserved for project_role (OGAR#72, in flight) — this batch
uses 0x0118-0x011A so neither PR rebases regardless of merge order. The
member_role -> ProjectRole family edge references the target by string,
so it's valid before #72 merges.

- Resolver arms covering each curator name + plural-table forms +
  PascalCase (per the established doctrine).
- Extended the 3 coverage tests + new real-corpus test
  redmine_and_openproject_memberrole_customvalue_module_converge.

ogar-vocab 41, ogar-from-ruff 24, real-corpus 14 (+1); clippy clean.

The OP <-> Redmine project-mgmt cross-curator overlap is now saturated:
every substantive common-name model from the 38-name probe is promoted.
@AdaWorldAPI AdaWorldAPI force-pushed the claude/ogar-vocab-memberrole-customvalue-module branch from 0b15ce0 to 346a1fd Compare June 19, 2026 15:43
@AdaWorldAPI AdaWorldAPI merged commit 286476c into main Jun 19, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants