op-codegen-pipeline: klickweg harvest bridge — wire the board's nav to ruff #62's Rails navigates_to harvest#90
Merged
Conversation
…o ruff #62's Rails navigates_to harvest The board's klickweg connectivity was verified against a HAND-AUTHORED edge table (op-server::nav::NAV_EDGES, derived from the ClassView association graph). ruff #62 shipped the Rails `navigates_to` harvest (two shapes: ERB `link_to`/`button_to` clicks + controller `redirect_to` redirects). This wires the harvest into the pipeline so the klickweg becomes HARVEST-DERIVED rather than hand-authored. New `op_codegen_pipeline::nav_harvest`: - `harvest_klickweg{,_with_report}(app_root)` — runs `ruff_ruby_spo::extract_nav_edges` over an OpenProject Rails source tree, restricted to the served screens (`OPENPROJECT_SCREENS` = work_packages, projects). - `klickweg_pairs(edges)` — the shape-agnostic `(source, target)` connectivity graph (ERB + redirect edges between the same screens collapse to one pair). - `RESOURCE_TO_CONCEPT` / `concept_for` — the 1:1 bridge from Rails resource stems (harvest vocabulary) to op-server ClassView concept names (`work_packages`→`ProjectWorkItem`, `projects`→`Project`), so the harvested graph and the ClassView graph are provably the same graph under the map. Proof (tests/nav_harvest_probe.rs, over a synthetic Rails fixture at tests/fixtures/rails_nav/ — no proprietary source): - the harvested screen pairs are EXACTLY the board klickweg (work_packages ↔ projects, both directions) — i.e. the harvest reproduces what NAV_EDGES encodes by hand; - both harvest shapes fire (ERB click + controller redirect); - every served screen bridges to a ClassView concept. op-server::nav::NAV_EDGES gains a doc note recording that it is the baked mirror of this harvest, regenerating from the harvest once the OpenProject source is in the pipeline input. Additive: new module + test + fixture; no existing behavior changed. op-codegen-pipeline suite green (incl. 3 new probe tests); new code clippy-clean (remaining warnings are pre-existing, in git-dep crates). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U9t3fRwXmPC6tCpMtnfTrM
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_67e0aafa-fd44-47ef-a11f-3250d73a9aaa) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
The board's klickweg connectivity was verified against a hand-authored edge table (
op-server::nav::NAV_EDGES, derived from the ClassView association graph). ruff #62 shipped the Railsnavigates_toharvest (two shapes: ERBlink_to/button_toclicks + controllerredirect_toredirects). This wires the harvest into the pipeline so the klickweg becomes harvest-derived rather than hand-authored — closing the loop the klickweg thread was about.New
op_codegen_pipeline::nav_harvestharvest_klickweg{,_with_report}(app_root)— runsruff_ruby_spo::extract_nav_edgesover an OpenProject Rails source tree, restricted to the served screens (OPENPROJECT_SCREENS=work_packages,projects).klickweg_pairs(edges)— the shape-agnostic(source, target)connectivity graph (ERB + redirect edges between the same screens collapse to one pair).RESOURCE_TO_CONCEPT/concept_for— the 1:1 bridge from Rails resource stems (the harvest vocabulary) to op-server ClassView concept names (work_packages→ProjectWorkItem,projects→Project), so the harvested graph and the ClassView graph are provably the same graph under the map.Proof —
tests/nav_harvest_probe.rsOver a synthetic Rails fixture (
tests/fixtures/rails_nav/, no proprietary source):work_packages ↔ projects, both directions) — i.e. the harvest reproduces whatNAV_EDGESencodes by hand;op-server::nav::NAV_EDGESgains a doc note recording that it is the baked mirror of this harvest, regenerating from the harvest once the OpenProject source is in the pipeline input.Status
Additive — new module + test + fixture; no existing behavior changed.
op-codegen-pipelinesuite green (incl. 3 new probe tests); new code is clippy-clean (remaining warnings are pre-existing, in git-dep crates). This is the consumer half of the ruff #62 arm; the producer (Ruby harvester) is already on ruff main.🤖 Generated with Claude Code
Generated by Claude Code