Skip to content

feat(ogar-vocab): ProjectNews + ProjectMessage (2 more promotions)#70

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/ogar-vocab-news-message
Jun 19, 2026
Merged

feat(ogar-vocab): ProjectNews + ProjectMessage (2 more promotions)#70
AdaWorldAPI merged 1 commit into
mainfrom
claude/ogar-vocab-news-message

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Two more promotions — News + Message

Canonical id Redmine OpenProject
project_news 0x0114 News News
project_message 0x0115 Message Message

project_news — universal shape across both curators: belongs_to :project + :author + has_many :comments + title / summary / description scalars. The comments family edge points at the existing project_comment canonical (closes a back-ref).

project_message — threaded forum/board discussion with acts_as_tree. The parent-container diverges between curators (Redmine Board vs OP Forum — a future project_forum promotion would close that), but Message itself converges. The self-referential last_reply edge captures the thread chain.

What

  • CODEBOOK entries 0x01140x0115 in the project-mgmt block.
  • Resolver arms covering singular / plural / PascalCase per doctrine.
  • 2 canonical class functions with Language::Unknown + typed attrs + obvious family edges.
  • Extended codebook_ids_are_domain_prefixed_and_consistent, project_mgmt_batch_promotions_each_have_a_codebook_id_and_shape, and project_mgmt_resolver_arms_collapse_curator_names.
  • New real-corpus test: redmine_and_openproject_news_and_message_converge iterates both curators' News + Message and asserts canonical_concept + canonical_id match.

Green

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

Codebook now 23 promoted concepts

Project-mgmt (0x01XX): 21 concepts (0x0101 project → 0x0115 project_message).
Commerce (0x02XX): 6 concepts.
Reserved future blocks: OSINT (0x07XX), OCR (0x08XX), Health (0x09XX).

🤖 Generated with Claude Code

Continuing the OP <-> Redmine ladder from the probe overlap. Both News
and Message are cross-curator with substantive shape:

| Canonical          | id      | Redmine | OpenProject |
|--------------------|---------|---------|-------------|
| project_news       | 0x0114  | News    | News        |
| project_message    | 0x0115  | Message | Message     |

ProjectNews — universal shape (project + author + comments + title/
summary/description). Both curators ship the same AR structure.

ProjectMessage — threaded forum/board discussion. Note the parent-
container divergence: Redmine 'Board' vs OP 'Forum' (a future
project_forum promotion can close that). The self-referential
'last_reply' edge captures the acts_as_tree thread chain.

- CODEBOOK entries: 0x0114 and 0x0115 in the project-mgmt block.
- Resolver arms (singular/plural/PascalCase per the doctrine).
- Canonical class functions with Language::Unknown, typed attrs, and
  the obvious family edges to existing canonicals (project, author ->
  project_actor, comments -> project_comment for News; author ->
  project_actor, last_reply -> ProjectMessage self-ref for Message).
- Extended codebook_ids_are_domain_prefixed_and_consistent, project_-
  mgmt_batch_promotions_each_have_a_codebook_id_and_shape, and project_-
  mgmt_resolver_arms_collapse_curator_names to cover the 2 new concepts.
- New real-corpus test: redmine_and_openproject_news_and_message_converge
  iterates both curators' News + Message and asserts canonical_concept +
  canonical_id match.

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

Project-mgmt block (0x01XX) is now 21 concepts.
@AdaWorldAPI AdaWorldAPI merged commit bf5ab93 into main Jun 19, 2026
1 check passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5ab5e11e30

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

// Tree self-reference: both curators use `acts_as_tree` with
// `belongs_to :last_reply, class_name: "Message"` linking the
// thread chain.
family_edge("last_reply", "ProjectMessage"),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the Message parent edge

When loading threaded forum messages, this self-edge does not represent the thread structure: in both Redmine and OpenProject last_reply_id is only a cached pointer from a topic to its latest reply, while the actual reply tree comes from acts_as_tree/parent_id. As a result, replies generally have no last_reply, so consumers using the canonical ProjectMessage shape cannot reconstruct parent/child discussions; add a canonical parent/children self-reference or avoid treating last_reply as the thread chain.

Useful? React with 👍 / 👎.

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