Skip to content

fix(ogar-vocab): three codex P2s — neutral language, typed boolean flag, canonical target#59

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/codex-p2s-language-types-canonical-target
Jun 19, 2026
Merged

fix(ogar-vocab): three codex P2s — neutral language, typed boolean flag, canonical target#59
AdaWorldAPI merged 1 commit into
mainfrom
claude/codex-p2s-language-types-canonical-target

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Three codex P2s — all valid, all fixed

From the post-merge codex review of OGAR#57 (ec33225) and OGAR#58 (4146bb4).

1. Neutral language on synthetic canonical classes (#57 P2)

Class::new(...) defaults to Language::Ruby via Default<Language>, but billable_work_entry() / project_work_item() are hand-authored canonical concepts, not Ruby-harvested models. The TripleEmitter writes ogar:sourceLanguage so consumers were about to route the canonical classes through Ruby-specific handling. Set c.language = Language::Unknown on both — codex flagged BillableWorkEntry; ProjectWorkItem has the identical one-line cause, fixed proactively.

2. Typed billable flag (#57 P2)

Attribute::new("billable") left type_name = None; DDL adapters default untyped fields to string-like, so generated schemas would store billable as text. Set type_name = Some("boolean").

3. Canonical target on the about family edge (#58 P2)

family_edge("about", "WorkPackage") still pointed at the OP curator surface name, but #58 promoted Redmine Issue and OP WorkPackage to canonical ProjectWorkItem. The edge now targets ProjectWorkItem so consumers traversing BillableWorkEntry.about see both curators converge through the same shared concept.

Tests pin each contract

  • c.language == Language::Unknown on both canonical classes.
  • billable.type_name == Some("boolean").
  • Expected family-edge target switches "WorkPackage""ProjectWorkItem".

21 ogar-vocab + 22 ogar-from-ruff + 6 real-corpus green; clippy clean.

🤖 Generated with Claude Code

…ag, canonical target

All three P2s from codex on the merged OGAR#57 + OGAR#58.

1. (#57 P2) Synthetic canonical classes default to Language::Ruby via
   Default<Language>, but they're not Ruby-harvested. TripleEmitter
   writes ogar:sourceLanguage = Ruby and routes them through Ruby-specific
   handling. Set c.language = Language::Unknown in both
   billable_work_entry() and project_work_item() (proactive same-defect
   fix; project_work_item wasn't flagged separately but has the identical
   bug from the same one-line cause).

2. (#57 P2) Attribute::new('billable') leaves type_name=None; DDL
   adapters default untyped fields to string-like. The defining flag is
   boolean — type it as such so generated schemas don't store
   billable-as-text.

3. (#58 P2) BillableWorkEntry's family edge  still
   pointed at the OP curator surface name, but PR #58 promoted Redmine
   Issue and OP WorkPackage to canonical ProjectWorkItem. The edge now
   targets ProjectWorkItem so consumers traversing BillableWorkEntry.about
   see both curators converge. Updates the test fixture accordingly.

Test additions pin all three contracts:
- assert_eq!(c.language, Language::Unknown) on both canonical classes
- assert_eq!(billable.type_name.as_deref(), Some('boolean'))
- expected family-edge target list switches 'WorkPackage' -> 'ProjectWorkItem'

21 ogar-vocab + 22 ogar-from-ruff + 6 real-corpus green; clippy clean.
@AdaWorldAPI AdaWorldAPI merged commit d4e0802 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