Skip to content

feat(redmine-canon): close the bridge — 26/26 convergence via engine-walk#3

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/regen-engine-walk-26-of-26
Jun 19, 2026
Merged

feat(redmine-canon): close the bridge — 26/26 convergence via engine-walk#3
AdaWorldAPI merged 1 commit into
mainfrom
claude/regen-engine-walk-26-of-26

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

What

Closes the loop on the OGAR canonical extraction. After ruff#28 (engine walk) + OGAR#75 (extract_app_with), re-runs the producer through the engine-walking path so OpenProject's modules/* engines are harvested too.

The headline

26 / 26 concepts shared by both forks.

Every canonical concept the Redmine corpus contributes is now also contributed by OpenProject. No Redmine-only promoted concept remains.

What changed

  • fork_convergence.json bumped to fork-convergence/2 — extractor now walks modules/*/app/models for OpenProject (681 → 922 lifted classes).
  • billable_work_entry (0x0103, the first cross-domain bridge — the concept Odoo's account.analytic.line lands on in the commerce arm) now carries OpenProject's TimeEntry (from modules/costs/app/models) alongside Redmine's TimeEntry.
  • shared_concepts 25 → 26.
  • redmine.ogar.json provenance string updated to reflect the engine-walk extractor.

Tests

  • billable_work_entry_documents_the_modular_extraction_gap (the gap-pinning test from PR feat(redmine-canon): cross-fork convergence proof (Redmine ↔ OpenProject) #1) flipped to billable_work_entry_bridge_is_complete_both_forks: asserts both forks ship TimeEntry lifting onto the bridge.
  • every_redmine_concept_has_an_openproject_witness pins total convergence — no concept with a Redmine witness lacks an OP witness.
  • both_forks_mint_the_same_id_for_shared_concepts lower bound 25 → 26.
  • 11/11 tests pass; clippy clean (-D warnings); fmt clean. README updated with the closed bridge row and the engine-walk explanation.

"Rails words die, the invariant lives" — proven across the full corpus on both ends of the fork lineage.

…walk

Re-runs the OGAR producer through extract_app_with (OGAR#75, consuming
ruff#28) so OpenProject's modules/* engines are harvested too.

What changed:
- fork_convergence.json bumped to schema "fork-convergence/2" — the new
  extractor includes modules/*/app/models for OpenProject (681 -> 922
  lifted classes).
- billable_work_entry (0x0103, the first cross-domain bridge — the same
  concept Odoo's account.analytic.line lands on in the commerce arm) now
  carries OpenProject's `TimeEntry` (modules/costs/app/models) alongside
  Redmine's `TimeEntry`.
- shared_concepts 25 -> 26: every canonical concept Redmine contributes is
  now also contributed by OpenProject. Total convergence.
- redmine.ogar.json provenance string updated to reflect the new
  extractor path (extract_app_with, engine-walking).

Tests:
- billable_work_entry_documents_the_modular_extraction_gap flipped to
  billable_work_entry_bridge_is_complete_both_forks: asserts the bridge
  is shared and both forks ship `TimeEntry`.
- every_redmine_concept_has_an_openproject_witness pins the total
  convergence: no concept with a Redmine witness lacks an OP witness.
- lower bound for shared concepts: 25 -> 26.
- README: 25/26 -> all 26 shared, billable_work_entry row added with
  identical Redmine/OP names; gap note replaced with an explanation of
  where OP's TimeEntry sits and how the engine-walk closed it.

cargo test 11/11; clippy clean; fmt clean.
@AdaWorldAPI AdaWorldAPI merged commit eae4cfc 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