Skip to content

test(ogar-vocab): pin 5-way billable_work_entry convergence (planner↔ERP)#96

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/five-port-convergence-pin
Jun 22, 2026
Merged

test(ogar-vocab): pin 5-way billable_work_entry convergence (planner↔ERP)#96
AdaWorldAPI merged 1 commit into
mainfrom
claude/five-port-convergence-pin

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

What

Adds billable_work_entry_converges_across_all_five_ports to
ogar-vocab::ports — the single-test pin for the planner⟷ERP convergence
that APP-CODEBOOK-MIGRATION-PLAN.md (W0 + W1 + W2 + W3) names "planner
times == billable hours"
. Pins the W0 worked table in code.

Why a new test (the existing ones cover subsets)

existing test ports covered source
time_entry_converges_across_planner_and_erp_ports OP + RM + WoA + SMB (4) #93
planning_and_erp_converge_on_billable_work_entry OP + RM + Odoo (3) #94

Neither covers the full 5-port fan-out. This new test asserts in one place
that all five port-bearing apps resolve their own timesheet surface name
to the same canonical concept (class_ids::BILLABLE_WORK_ENTRY = 0x0103):

app (reserved prefix) surface name port
OpenProject (0x0001) TimeEntry OpenProjectPort
Odoo (0x0002) account.analytic.line OdooPort
WoA (0x0003) Stundenzettel WoaPort
SMB (0x0004) Stundenzettel SmbPort
Redmine (0x0007) TimeEntry RedminePort

Why the pin matters

Per APP-CLASS-CODEBOOK-LAYOUT.md §1, the low u16 is the shared concept
currency
— the RBAC + ontology key, the cross-app identity. Five apps
resolving the same low half means a logged planning hour and the
ERP-billed line are one canonical concept — no cross-system join, no
"hours planned" vs "hours invoiced" reconciliation step. Drift on ANY of
the five ports (rename, re-map, lost alias) breaks CI here.

This is the migration plan's "showcase" (W0) generalized to the full set
of ports already shipped (#93 + #94).

Scope

  • Test-only, no public API change.
  • Toolchain 1.95.0 (pinned).
  • cargo check --workspace --all-targets clean.
  • cargo test -p ogar-vocab --lib ports:: 26 passed; 0 failed (was 25).
  • Stays low-u16-only — does not mint anything (the high-u16 app prefixes
    are RESERVED per the layout doc but minting is gated on the 5+3 codebook
    pass; this PR doesn't touch that gate).

…->ERP)

Adds `billable_work_entry_converges_across_all_five_ports`, the
single-test pin for the planner<->ERP convergence the migration plan
(APP-CODEBOOK-MIGRATION-PLAN.md W0+W1+W2+W3) names "planner times ==
billable hours". Earlier tests pinned partial fan-outs:

  - `time_entry_converges_across_planner_and_erp_ports` (4-way: OP, RM,
     WoA, SMB) -- from #93.
  - `planning_and_erp_converge_on_billable_work_entry` (3-way: OP, RM,
     Odoo) -- from #94.

Neither covered all 5 ports. This new test asserts in one place that
OpenProject `TimeEntry`, Redmine `TimeEntry`, Odoo
`account.analytic.line`, WoA `Stundenzettel`, and SMB `Stundenzettel`
all resolve to `class_ids::BILLABLE_WORK_ENTRY` (0x0103). Drift on ANY
of the 5 ports breaks CI here, surfacing the migration plan's W0 table
in code.

Test-only; no API change. cargo check --workspace --all-targets +
cargo test -p ogar-vocab --lib ports:: clean (26 passed; was 25).
@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.

@AdaWorldAPI AdaWorldAPI merged commit 5ee87b5 into main Jun 22, 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