Skip to content

feat(nav): NAV-2b Fabrik without the Betrieb tab - #1647

Merged
mergify[bot] merged 4 commits into
mainfrom
claude/nav-2b
Oct 16, 2026
Merged

mergify[bot] merged 4 commits into
mainfrom
claude/nav-2b

Conversation

@Cuarroc

@Cuarroc Cuarroc commented Oct 16, 2026 •

Copy link
Copy Markdown
Owner

Die Fabrik hat jetzt keinen Reiter „Betrieb“ mehr; Betrieb gibt es nur noch als eigenen Bereich unter /betrieb. Der alte Pfad /leitstand/betrieb führt weiter dorthin, auch mit Schrägstrich oder Abfrage. Schlägt das Lesen der Profile in Betrieb fehl, steht jetzt ein ehrlicher Hinweis da statt Stille.

Plan-ID: NAV-2b

Report

Was geändert

  • LeitstandRoute: Zweig, Reiter und BETRIEB_PATH entfernt; der Schritt „Auftrag einreihen“ der leeren Fabrik öffnet /betrieb. Schlüssel leitstand.tab.betrieb entfernt, neu betrieb.profilesHint.
  • routing.ts: resolveAlias normalisiert Schrägstrich und Abfrage (Abfrage bleibt erhalten); /leitstand/betrieb ist keine Leitstand-Route mehr (R1641-G1/K2).
  • BetriebRoute: fehlgeschlagenes Profil-Lesen zeigt HonestState (R1641-K4).
  • e2e: der alte Pfad /leitstand/betrieb landet auf /betrieb (R1641-K5); ein Mount-Test belegt, dass die Umleitung replace nutzt (kein Zurück-Eintrag).
  • Tests umgezogen: Leer-Zustand ohne Projekt deckt betrieb.mount.test.tsx ab; Reiter-Tests der Fabrik ohne Betrieb.
  • docs/PLAN.md: nur die Zeile NAV-2b.

R1641-K3 (Alias vor anderen Hash-Lesern): nicht vorgezogen. ShellMount löst den Alias schon im Initialzustand auf, so dass alle pfadabhängigen Ansichten und Daten den neuen Pfad sehen; die Seitenleiste (Shell) liest den Hash selbst und folgt per hashchange unmittelbar nach dem replace. Ein früheres Umschreiben bräuchte einen Seiteneffekt beim Rendern oder eine Änderung an Shell.tsx/main, außerhalb dieses Pakets.

Red → grün (Basis f42baa3, rot-Commit d866d7d)

  • LeitstandRoute.test.tsx: „the Fabrik tab bar has no Betrieb tab“, „an empty board offers Auftrag einreihen and opens the Betrieb area“
  • routing.test.ts: „retired path with trailing slash resolves to /betrieb“, „…with a query string keeps the query…“, „the retired Betrieb path is no Leitstand route any more“
  • betrieb.mount.test.tsx: „a failed profile read shows a notice“

Belege

  • npx vitest run src/screens src/shell src/i18n → Exit 0 (608 Tests)
  • npm run typecheck → Exit 0
  • bash scripts/ci/red-first.sh → Exit 0
  • bash scripts/ci/gates.sh lane prepush → Exit 0 (alle Gates grün)
  • Push-Hook beim git push → Exit 0; git ls-remote zeigt 67a07ce

NICHT ABGEDECKT

  • Der neue e2e-Test (Playwright) wurde auf dem Server nicht ausgeführt, nur typgeprüft; er läuft in der Bahn linux.
  • Windows-Hälfte (#[cfg(windows)]-Tests, Windows-Arme von clippy): läuft in der Merge-Queue.
  • Keine sichtbare Prüfung per Screenshot (keine Layout-Änderung außer einem entfernten Reiter).

Review: ausstehend (Stufe B), Root beauftragt.

🤖 Generated with Claude Code on the ProjectA server worker

Root acceptance (head ee2fb27, 2026-10-16 ~20:55 CEST)

Tier B, author family Anthropic (claude-sonnet-5-5@high, server job srv-nav-2b-20261016). Reviewers: Gemini 3.8 Flash (Google) APPROVE and Kimi K3 (Moonshot) APPROVE, both via OpenRouter on head ee2fb27. Size +73/−55 = 128. Carry-over R1641-G1/K2..K5 addressed per the report.

ID Source Severity Finding Disposition
R1647-K1 Kimi K3 medium BetriebRoute.tsx:30-33: with a failed profile read and no project two role="status" regions render at once accepted as follow-up (verified at head; a11y polish, no wrong statement shown): next Betrieb/NAV package merges them into one status region
R1647-K2 Kimi K3 low removed BETRIEB_PATH export may have importers rejected: typecheck + prepush green at head
R1647-K3 Kimi K3 low history test depends on NAV-2a using replace no change needed: that is the point of the test (R1641-K5)
R1647-K4 Kimi K3 low routing.ts:24 split style rejected: style only, behaviour correct per the reviewer
R1647-G Gemini – no findings –

Verdict: accepted. review-ok bound to ee2fb27.

Cuarroc and others added 4 commits October 16, 2026 17:58
Tab bar without Betrieb, alias with trailing slash and query, Betrieb
area opened from the empty board, a notice for a failed profile read,
and e2e/history guards for the retired path.

Test-First: src/screens/leitstand/LeitstandRoute.test.tsx::the Fabrik tab bar has no Betrieb tab
Test-First: src/screens/leitstand/LeitstandRoute.test.tsx::an empty board offers Auftrag einreihen and opens the Betrieb area
Test-First: src/shell/mount/routing.test.ts::retired path with trailing slash resolves to /betrieb
Test-First: src/shell/mount/routing.test.ts::retired path with a query string keeps the query and resolves to /betrieb
Test-First: src/shell/mount/routing.test.ts::the retired Betrieb path is no Leitstand route any more
Test-First: src/shell/mount/betrieb.mount.test.tsx::a failed profile read shows a notice

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Remove the Betrieb branch, tab and key leitstand.tab.betrieb from the
Fabrik; the empty-board step opens /betrieb. resolveAlias normalises a
trailing slash and a query string. A failed profile read on /betrieb
shows an honest notice.

Regression-For: d866d7d

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No-Test: plan text only

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No-Test: plan text only

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@Cuarroc
Cuarroc marked this pull request as ready for review October 16, 2026 18:51
@Cuarroc Cuarroc added the review-ok Pipeline: review disposition complete, no open high finding label Oct 16, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 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-16T18:54:03.246631Z ee2fb27 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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ee2fb27b79

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +24 to +26
const [bare, ...query] = path.split("?");
const target = ALIASES[trim(bare)];
return target === undefined ? path : [target, ...query].join("?");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the query through the actual alias path

When a bookmark such as #/leitstand/betrieb?x=1 is opened, the query is still discarded: ShellMount calls pathFromHash before resolveAlias, while pathFromHash removes everything after ? in src/shell/routes.ts:97-100, so this function receives only /leitstand/betrieb and replaces the hash with #/betrieb. The new unit test invokes resolveAlias directly and therefore misses the live routing pipeline; alias the raw fragment before stripping the query and ensure isBetrieb recognizes the resulting query-bearing path. Otherwise the PLAN row's claim that query strings are handled remains untrue after merge.

AGENTS.md reference: AGENTS.md:L121-L121

Useful? React with 👍 / 👎.

return (
<div className="g-lr">
<div className="g-lr-head"><h1>{t("nav.betrieb")}</h1></div>
{profilesFailed && <div role="status"><HonestState kind="offline" title={t("leitstand.profilesFailed")} hint={t("betrieb.profilesHint")} /></div>}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Render one status region when no project is selected

When list_agent_profiles fails while no project is selected, this new status is rendered alongside the existing no-project role="status" on line 33. Both live regions appear during the same render, so assistive technology can announce two competing state messages rather than one coherent explanation. Suppress the profile warning until a project exists or combine both messages under a single status region.

Useful? React with 👍 / 👎.

@Cuarroc

Cuarroc commented Oct 16, 2026

Copy link
Copy Markdown
Owner Author

@Mergifyio queue

@Cuarroc

Cuarroc commented Oct 16, 2026

Copy link
Copy Markdown
Owner Author

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

@mergify

mergify Bot commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

queue

☑️ This pull request is already queued

@mergify mergify Bot added the queued label Oct 16, 2026
@mergify
mergify Bot merged commit 3f7dbfa into main Oct 16, 2026
25 checks passed
@mergify

mergify Bot commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

This pull request spent 27 minutes 28 seconds in the queue, including 14 minutes 50 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

@mergify
mergify Bot deleted the claude/nav-2b branch October 16, 2026 19:30
@mergify mergify Bot removed the queued label Oct 16, 2026
Cuarroc added a commit that referenced this pull request Oct 16, 2026
Keep main's rows for DS-H-03, NAV-2b and ROADMAP-1c-1; mark DS-H-02b done
(#1648) and add merge dates for #1646 #1647 #1648 #1652.

No-Test: docs status sync only
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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