Skip to content

feat(leitstand): replace Fluss with Fabrik and preserve old links - #1568

Merged
mergify[bot] merged 4 commits into
mainfrom
codex/fabrik-tab-1
Oct 15, 2026
Merged

mergify[bot] merged 4 commits into
mainfrom
codex/fabrik-tab-1

Conversation

@Cuarroc

@Cuarroc Cuarroc commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Der Reiter „Fluss“ heißt jetzt „Fabrik“ und öffnet sich unter /leitstand/fabrik.
Alte Links auf /leitstand/fluss führen automatisch zur Fabrik mit den bisherigen Ablaufdaten.
Du musst nichts umstellen; die unabhängige Prüfung steht noch aus.

Report

Package: FABRIK-TAB-1 · Review tier: B

Goal / benefit: Replace the existing flow tab with Fabrik while preserving bookmarks and the existing flow content.
Parent / ticket / owner: Authorized Leitstand Fabrik decision dated 2026-10-15; job srv-fabrik-tab-1d, branch codex/fabrik-tab-1; Root owns review and integration.
Native evidence: get_goal returned no existing goal; create_goal created the bounded implementation-and-draft-handover goal; subsequent get_goal reported it active. Independent review, acceptance and merge remain with Root.
Candidate: d839d9efac7012c310e57680d54f7229b0f5a7a6 (R1 fix); original reviewed head: 02eceef117e97a089413b3fe570f81f7f9f6173b.
Base: a5f8c538216a928a24869c161268dc94c4411584 (newest fetched main at implementation start).
Scope: Total package: 7 frontend/test files, 86 additions + 33 deletions = 119 diff lines against the merge base (R1 limit 400; no overrun). R1 changes only LeitstandRoute.tsx and its test: 15 additions + 1 deletion. Forcing finding: R1568-G1. No Rust, seam, dependency or src/shell/routes.ts changes.

What changed

  • Rename the tab and translation key to Fabrik, link to #/leitstand/fabrik, and order tabs Haupt / Fabrik / Betrieb / Werkzeuge / Klassisch.
  • Reuse the existing FlowTab/FlowGraph, lamps, quota meter and proof strip. No new styling or components.
  • Redirect the old flow URL in ShellMount both on initial entry and on later hash changes. location.replace preserves useful Back navigation.
  • Treat both canonical path and old alias as new Leitstand routes, including trailing slashes, without mounting the legacy terminal viewer.
  • Update existing flow tests to the canonical route and add coverage of old bookmarks and subsequent hash navigation.

Original implementation evidence (historical, head 02eceef1)

Observed on 2026-10-15 in the assigned worktree. Tests exercise App navigation/DOM and the public routing helpers; IPC is mocked at the Tauri boundary.

Command Exit code / result
npm run dev:start-check 0; before the gate run: 8.5 GB free, 0 Cargo builds; before push: 11.1 GB free, 0 Cargo builds
npx --no-install vitest run src/screens/leitstand/LeitstandRoute.test.tsx src/shell/mount/routing.test.ts -t 'reaches Fabrik from Haupt by its tab link|redirects old flow bookmarks and later hash navigation to Fabrik|keeps Fabrik and the old flow alias out of the legacy terminal viewer' before implementation 1; three expected assertion failures: old label/order, unchanged old URL, unrecognized Fabrik route
npx --no-install vitest run src/screens/leitstand src/shell 0; 33 files, 278 tests passed
npm run typecheck 0
npm run build 0; existing large-chunk warning
bash scripts/ci/red-first.sh 0; named tests absent on base and passing at head
git diff --check and git diff --check origin/main...HEAD 0
bash scripts/ci/gates.sh lane prepush 0; full lane, 1428 frontend tests passed, 2273 Rust tests passed / 7 skipped
git push -u origin codex/fabrik-tab-1 0; normal hook repeated the full prepush lane successfully
git ls-remote origin codex/fabrik-tab-1 0; remote matches candidate SHA above
rg -n '"Fluss"|tab.flow' src 0; only the unrelated existing tab.flows key remains, output below

Red tests were committed first as ef26c04c; implementation followed in 02eceef1. Both commits passed the precommit secret scan. The required red-first script automatically populated its temporary base checkout using the unchanged lockfile; no dependency manifests changed.

Additional foreground browser probe (VITE_TAURI_MOCKS=true node --input-type=module, Vite API + Playwright Chromium): exit 0. Verified initial alias redirect, active Fabrik link, visible flow graph, later trailing-slash alias and Back returning to Haupt. Inspected the 1440×900 screenshot at .pa/fabrik-tab-proof/fabrik.png (local, untracked); tab order and existing graph are visible. Server and browser closed before command completion; no desktop runtime was started.

Text search output:

src/i18n/de.ts:38:  "tab.flows": "Abläufe",
src/shell/routes.ts:33:    [t("/automatik", "tab.trigger"), t("/automatik/befehle", "tab.commands"), t("/automatik/ablaeufe", "tab.flows")]),

R1 change and current evidence

Job / authority: srv-fix-pr1568-r1, NACHBESSERN, Root assignment dated 2026-10-15. Parent: FABRIK-TAB-1; implementation owner: assigned worker; review and integration owner: Root.
Native goal: get_goal returned no existing goal, then create_goal created the bounded G1 fix and checked-handover goal. The post-push get_goal returned that objective active; completion follows verified PR report and handover. No parent acceptance or merge is implied.

The existing fabrik boolean now also recognizes the trimmed retired path /leitstand/fluss. This selects Fabrik before ShellMount's redirect effect and keeps useQuestions disabled. routing.ts exports FABRIK_PATH but has no exported old-alias constant/helper; the single existing boolean was extended without a second route list or changes outside the assigned files.

The direct component regression renders both old-path forms, asserts the Fabrik tab synchronously, excludes Haupt content, flushes effects, checks the actual Tauri list_questions boundary received no call, and checks the flow region. Internal hooks and route components are not mocked. This isolates the initial render from ShellMount's later redirect.

Observed on 2026-10-15 at candidate d839d9ef:

Command Exit code / result
git rev-parse HEAD at start 0; matched required 02eceef117e97a089413b3fe570f81f7f9f6173b; clean assigned branch
npm run dev:start-check before prepush / push 0; 12.5 / 12.7 GB free, 0 Cargo builds
npx --no-install vitest run src/screens/leitstand/LeitstandRoute.test.tsx -t 'renders old flow paths as Fabrik immediately without requesting Haupt questions' before fix 1; compiling regression fails for both aliases: Fabrik inactive, Haupt question pane present, list_questions called, flow absent
npx --no-install vitest run src/screens/leitstand/LeitstandRoute.test.tsx src/shell/mount/routing.test.ts after fix 0; 35 tests passed
git commit for red test / fix 0 / 0; precommit includes secret scan, typecheck and architecture drift; no new findings
bash scripts/ci/gates.sh lane prepush 0; full own-worktree lane at d839d9ef, 1429 frontend tests passed; 2273 Rust tests passed, 7 skipped
bash scripts/ci/red-first.sh 0; exact named regression absent at merge base, green at head; all existing package trailers also pass
git push -u origin codex/fabrik-tab-1 0; ordinary hook repeated full prepush successfully
git ls-remote origin codex/fabrik-tab-1 0; remote exactly d839d9efac7012c310e57680d54f7229b0f5a7a6
git diff --stat origin/main...HEAD 0; 86 additions + 33 deletions = 119 total package lines
git diff --check / git status --short --branch 0 / 0; no whitespace errors; clean tracked worktree after push

Red regression commit: 78ee0d51b80e03221633aad326c5b8bf70cc1e5c. Fix commit: d839d9efac7012c310e57680d54f7229b0f5a7a6. Both carry the exact named Test-First trailer and passed the precommit secret scan. No history rewriting or dependency changes.

To honor the no-install constraint, red-first's temporary base checkout reused the already installed node_modules: an exported npm shell function handled only npm ci by first comparing both package.json and package-lock.json byte-for-byte with the assigned worktree and then linking its existing dependencies. All other npm commands forwarded unchanged. The gate script and every test were unmodified; no packages were installed.

NICHT ABGEDECKT

  • Linux does not compile or run #[cfg(windows)] tests (run_in_pty, npm_shim, ConPTY, DPAPI) or Windows Clippy branches. The Windows lane runs in the merge queue.
  • Browser evidence uses Tauri mocks, not the native desktop backend. The entire Linux CI lane was not run; frontend build and the focused browser probe were run separately from prepush.
  • R1 proves initial route selection and absence of question IPC in the component test; no new frame-by-frame browser recording or screenshot was taken for this delta. The earlier screenshot/browser probe is historical evidence for 02eceef1.
  • Existing skipped tests remain skipped. External services are not verified by these gates.
  • AgentsRoom lage-jetzt was unavailable in this worktree; live Git/GitHub sources were checked. Start-check had no usage file, so provider limits were not verified; no model identity was inferred from configuration.

Reviews and disposition

Review: ausstehend (Stufe B).

The Root dispatch reports Claude APPROVE and Gemini findings on original head 02eceef1. The original review files are unavailable in this worktree and GitHub has no posted review bodies; their full text was not independently re-read. The disposition below follows the explicit R1 assignment. Claude delta review of d839d9ef is queued by the orchestrator, not by this worker.

Finding Source / severity Disposition
R1568-G1 Gemini / medium; src/screens/leitstand/LeitstandRoute.tsx:37 Accepted and fixed in d839d9ef; regression committed first in 78ee0d51. Old paths select Fabrik immediately and never request Haupt questions in the direct component test.
R1568-G2 Gemini / low; tab order Rejected for this round: the explicit non-goals forbid tab reordering; order remains unchanged. Any reconsideration belongs to Root.
Claude A1 Claude advisory, full text unavailable locally Follow-up with Root: explicitly excluded by the R1 assignment; this worker has no authorization to expand the G1-only fix.
Claude A2 Claude advisory, full text unavailable locally Follow-up with Root: explicitly excluded by the R1 assignment; this worker has no authorization to expand the G1-only fix.
Claude A3 Claude advisory, full text unavailable locally Follow-up with Root: explicitly excluded by the R1 assignment; this worker has no authorization to expand the G1-only fix.

Open points / handover

  • R1 is implemented, locally tested, committed and pushed; this existing draft PR carries the updated report. Delta review, acceptance and merge remain pending.
  • Root/review-feeder: obtain the Claude delta review at d839d9ef, resolve the advisory follow-ups, and integrate through Mergify after acceptance. No review-ok label or queue action by this worker.
  • Windows validation remains for the merge queue. The separate test(shell): record narrow v2 acceptance and keyboard coverage (V2-ACC1b) #1540 acceptance fixture update remains with Root after merge.
  • No implementation blocker; no tab reordering, other route changes or new features in R1.

Test-First: src/screens/leitstand/LeitstandRoute.test.tsx::reaches Fabrik from Haupt by its tab link
Test-First: src/screens/leitstand/LeitstandRoute.test.tsx::redirects old flow bookmarks and later hash navigation to Fabrik
Test-First: src/shell/mount/routing.test.ts::keeps Fabrik and the old flow alias out of the legacy terminal viewer
Test-First: src/screens/leitstand/LeitstandRoute.test.tsx::reaches Fabrik from Haupt by its tab link
Test-First: src/screens/leitstand/LeitstandRoute.test.tsx::redirects old flow bookmarks and later hash navigation to Fabrik
Test-First: src/shell/mount/routing.test.ts::keeps Fabrik and the old flow alias out of the legacy terminal viewer
Test-First: src/screens/leitstand/LeitstandRoute.test.tsx::renders old flow paths as Fabrik immediately without requesting Haupt questions
Resolve R1568-G1 by applying the Fabrik branch before ShellMount redirects old bookmarks, leaving Haupt questions disabled.

Test-First: src/screens/leitstand/LeitstandRoute.test.tsx::renders old flow paths as Fabrik immediately without requesting Haupt questions
@Cuarroc
Cuarroc marked this pull request as ready for review October 15, 2026 15:55
@Cuarroc

Cuarroc commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Root 2026-10-15 17:55:53: tier B, author OpenAI (codex). Reviews bound to head d839d9e: Claude delta APPROVE (02eceef..d839d9e, srv-review-pr1568-claude-1748) + Gemini APPROVE at d839d9e. Gemini G1 (flash on /leitstand/fluss) fixed in d839d9e with red-first test. New Gemini lows (ShellMount.tsx:45 query string on old bookmark; en.ts key) -> follow-up. Marked ready; review-ok after green CI on this head.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T15:57:48.068952Z d839d9e Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@Cuarroc

Cuarroc commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Root review gate 2026-10-15 18:04:52, bound to head d839d9e: Claude delta APPROVE + Gemini APPROVE at this head; all checks green incl. CodeQL/GitGuardian (gh pr checks: no fail, no pending). Gemini lows (ShellMount.tsx:45 query string, en.ts key) -> follow-up. Setting review-ok.

@Cuarroc Cuarroc added the review-ok Pipeline: review disposition complete, no open high finding label Oct 15, 2026
@Cuarroc

Cuarroc commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Root auto-queue: head d839d9e unchanged since review-ok, all checks green. @Mergifyio queue

@mergify mergify Bot added the queued label Oct 15, 2026
@mergify
mergify Bot merged commit 90d1a8c into main Oct 15, 2026
20 checks passed
@mergify

mergify Bot commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

This pull request spent 13 minutes 39 seconds in the queue, including 13 minutes 21 seconds running CI.

Required conditions to merge
  • check-success = gates (linux)
  • check-success = gates (windows)
  • check-success = red-first
  • github-review-approved [🛡 GitHub repository ruleset rule main-pr-required-checks]
  • label != do-not-merge
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (linux)
    • check-neutral = @github-actions/gates (linux)
    • check-skipped = @github-actions/gates (linux)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (windows)
    • check-neutral = @github-actions/gates (windows)
    • check-skipped = @github-actions/gates (windows)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/red-first
    • check-neutral = @github-actions/red-first
    • check-skipped = @github-actions/red-first
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-neutral = @mergify/Mergify Merge Protections
    • check-skipped = @mergify/Mergify Merge Protections
    • check-success = @mergify/Mergify Merge Protections

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review-ok Pipeline: review disposition complete, no open high finding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant