Repository navigation
fix: isolate question scopes and pending answer lifetimes - #1900
Conversation
Cover public route scope controls and honest fleet attribution. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::reads real scopes and labels fleet projects and workers without borrowing active context Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::keeps fleet reachable without a project and never calls unread or offline lists empty Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Keep fleet questions reachable without an active project and reset scope views. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::reads real scopes and labels fleet projects and workers without borrowing active context Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::keeps fleet reachable without a project and never calls unread or offline lists empty Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Cover project and scope round trips while reads and answers are pending. Preserve drafts and exact stored-answer confirmation across ordinary polls. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::isolates late reads and answers across project and scope round trips Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::keeps current drafts through polls and resets refused drafts on scope and project switches Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Use a distinct history question so the regression reaches the late answer. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::isolates late reads and answers across project and scope round trips Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::keeps current drafts through polls and resets refused drafts on scope and project switches Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Ignore stale answer results and fallback reads after project or scope changes. Keep the existing Promise<void> and optional stored-row callback contract. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::isolates late reads and answers across project and scope round trips Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::keeps current drafts through polls and resets refused drafts on scope and project switches Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Review round 1 — Root disposition, 2026-10-25 ~04:45Z, head 16cb5f5Tier B (frontend TS, no seam), author OpenAI Codex gpt-6-astra/high. Reviewers from two non-author families:
Fix round forced by C1/K1: same branch, red-first, total diff <= 400 per AGENTS rule 1 (expected well under 300). Then one outside-family delta review of |
Cover registered names in both card paths and distinguish unread or failed registry reads from a completed read with a missing registration. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::resolves registered fleet names in ordinary and decision cards and identifies missing registrations Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::distinguishes pending and failed project reads from missing registrations Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Read the existing project registry once per route lifetime and pass optional name context to both card paths. Keep failed and pending reads distinct from a completed registry read that cannot resolve the stored ID. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::resolves registered fleet names in ordinary and decision cards and identifies missing registrations Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::distinguishes pending and failed project reads from missing registrations Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Move the fallback format into the existing local text catalog to satisfy the hardcoded-string gate without changing its policy or output. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::resolves registered fleet names in ordinary and decision cards and identifies missing registrations Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::distinguishes pending and failed project reads from missing registrations Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Cover missing and wrong-project workers through the public route, with short stored IDs and explicit unknown identities in fleet scope. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::preserves project missing-worker wording and shortens only fleet fallback identities Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Restore missing-worker wording in project scope and shorten stored fleet IDs to eight characters. Derive matching worker context locally and document the existing silent stale-answer return without changing it. Plan-ID: KR-06b-2 Test-First: src/screens/leitstand/needs/scope-lifetime.test.tsx::preserves project missing-worker wording and shortens only fleet fallback identities Co-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>
Fix-round delta review — Root disposition, head 292c096Delta
Next: ready → CI → review-ok bound to this head → Mergify. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 292c09650c
ℹ️ 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".
| <Button size="sm" aria-pressed={scope === "project"} onClick={() => setScope("project")}>{T.project}</Button> | ||
| <Button size="sm" aria-pressed={scope === "all"} onClick={() => setScope("all")}>{T.all}</Button> |
There was a problem hiding this comment.
Synchronize the canonical plan with this package
The commit report identifies this package as Plan-ID: KR-06b-2, but that row is absent from docs/PLAN.md, while the corresponding 06b entry in docs/plan/v2.0/plan.md still says geplant. Adding the working scope controls without updating that record leaves the canonical plan inconsistent with the delivered behavior. AGENTS.md explicitly requires the Plan-ID row check through its binding review reference, which requires this mismatch to be fixed in the same PR before review-ok; coordinate the separately assigned PLAN update before accepting this package.
AGENTS.md reference: AGENTS.md:L74-L76
Useful? React with 👍 / 👎.
Root disposition — Codex connector finding on head 292c096 (05:27Z)R1900-X1 (medium) — accepted. Root's earlier routing note ("product PRs do not edit docs/PLAN.md, PLAN owner batches") contradicts that binding rule and is withdrawn. The same gap exists for already-merged #1894 (KR-04b), #1896 (KR-06b-1), #1898 (KR-06b-1b); that catch-up is a separate tier-C PFLEGEN package, not this PR. Next: NACHBESSERN on this branch, docs-only commit adding the |
Resolve R1900-X1 with the package delivery, mock-only evidence limits, open follow-ups and parent goal in the existing Nutzbar-1 table. Preserve every existing plan row and all reviewed code and tests. Plan-ID: KR-06b-2 No-Test: docs-only plan row Co-Authored-By: GPT-6 Astra <noreply@openai.com>
Root acceptance — review-ok bound to head
|
Merge Queue Status
This pull request spent 9 minutes 12 seconds in the queue, including 8 minutes 28 seconds running CI. Required conditions to merge
|
Der Nachtrag ergänzt genau die eigene KR-06b-2-Planzeile mit Lieferumfang, Grenzen und offenen Nachläufern.
Alle Code- und Testdateien bleiben unverändert; die lokalen Pflichtprüfungen und der normale Push sind grün.
PR #1900 wartet auf Roots Dokumentenabnahme und Mergify, während nativer Betrieb, Gesamt- und Nutzerabnahme offen bleiben.
Report
Plan-ID: KR-06b-2. Operator: NACHBESSERN, R1900-X1 documentation-only completion.
Child:
6c247c5e-a94f-4f09-a3e7-ab1f50b3984f; parent:b5998181-4fc9-4637-9783-1903d16a4a46, OPEN.Current candidate and scope — 2026-10-25
6acaaf7802ec280a7d0ccf908969fb2577f5ac22.292c09650c31be97ee9aafd546ab181199515f60.4a59cf0f889f3c2c114cae77c0a675f757e6e001, samecodex/kr-06b-2-scope-r2branch and PR fix: isolate question scopes and pending answer lifetimes #1900.292c0965..4a59cf0f, one added table row, zero deletions, onlydocs/PLAN.md:253. All seven reviewed code/test files are byte-identical; every pre-existing PLAN byte, row, dependency, title and status is preserved.gpt-6-astra, efforthigh. Actualget_goalreturned null at start and handover; no goal was created, resumed, replaced or completed. The bounded objective is this checked one-row handover to Root; the parent remains OPEN.R1900-X1 disposition and review boundary
R1900-X1 (medium): accepted by Root and implemented in
4a59cf0f889f3c2c114cae77c0a675f757e6e001. Root's correction withdraws the earlier product-no-PLAN/batched-own-row exception. Product PRs carry their own post-merge Plan-ID row in the same PR before review-ok. Previous statements below saying “No PLAN”, separate-owner PLAN bookkeeping or an absent KR-06b-2 row are superseded historical dispatch/evidence at 292c096, not current policy or current candidate status.Review: ausstehend (Stufe C: Root-Dokumentenprüfung). The entire PR remains tier B; its code review rounds are CLOSED per Root's final code-delta disposition. Root recorded outside-family APPROVE on
16cb5f5e..292c0965, resolving C1/K1, K2/C2, K3 and C3. This worker commissioned no new reviewer, code-review round or QA. Root next checks the bounded docs-only delta292c0965..4a59cf0f, accepts it, then alone binds review-ok and uses Mergify. Existing non-draft/no-label state was preserved; no ready, draft, label, queue or merge action was taken.The prior Kimi actual-model verification limit and dated E1 evidence limit remain explicit in the historical report; this documentation correction does not cure or replace them. R1900-D1/D2/C4/C5/C6/K4/K5 remain OPEN, not implemented by the row. Catch-up ticket
d87be838-da1c-43b9-a6ac-061c928566cbremains blocked until actual #1900 merge; no KR-04b/KR-06b-1/KR-06b-1b row was added here.Fresh evidence at 4a59cf0
All commands ran in the owning worktree. Every heavy phase used a fresh foreground resource/ancestry/target-owner guard followed by
&&and the command; all guard/start-check admissions passed. Commands were awaited to completion.bash scripts/sync.sh startnpm run dev:start-check -- --max-cargo 2 --min-free-gb 3.5git diff --check 6acaaf78 HEADnpm run plan:check -- --offlinebash scripts/ci/secret-scan.shgit commit -F <UTF8-LF-message>git interpret-trailers --parse <actual-message>and parsed actual commit bodygit diff --exit-code 292c0965 HEAD -- . ':(exclude)docs/PLAN.md'git diff --no-renames --ignore-submodules=none --numstat 6acaaf78 HEADbash scripts/ci/gates.sh lane prepushgit push -u origin codex/kr-06b-2-scope-r2git ls-remote origin refs/heads/codex/kr-06b-2-scope-r24a59cf0f889f3c2c114cae77c0a675f757e6e001gh pr view 1900 --json headRefOid,state,isDraft,labelsgit status --porcelain=v1Live main remained
6acaaf78;gh run list --branch main --workflow ci --limit 1returned completed/success run 40158729004 for that SHA.gh pr view 1896/1898confirmed both predecessors MERGED. These are separate live GitHub observations, not evidence supplied by the offline PLAN gate. No refresh merge was performed.NICHT ABGEDECKT — this documentation correction
#[cfg(windows)]tests (run_in_pty, npm_shim, ConPTY, DPAPI) or Windows clippy branches. The Windows lane runs in the merge queue; an ordinary PR stub is not that proof.Verbatim common boundary for this precommit/prepush/push execution (precommit prints
precommitin the lane line):Historical code report at 292c096 — preserved author receipts and review history
The following report is preserved from before R1900-X1. Its candidate, draft status, pending code-review steps and no-PLAN routing statements describe that earlier dispatch and are superseded by the current sections above. Earlier evidence and limitations remain traceable; no historical command is represented as rerun in this documentation-only correction.
Plan-ID: KR-06b-2. Operator: NACHBESSERN (bounded round-one corrections). Child:
6c247c5e-a94f-4f09-a3e7-ab1f50b3984f; parent:b5998181-4fc9-4637-9783-1903d16a4a46, OPEN until aggregate Root acceptance.6acaaf7802ec280a7d0ccf908969fb2577f5ac22.16cb5f5eb1ff0573ba71a4f5115cde94c46c6a0f.292c09650c31be97ee9aafd546ab181199515f60oncodex/kr-06b-2-scope-r2.16cb5f5eb1ff0573ba71a4f5115cde94c46c6a0f..292c09650c31be97ee9aafd546ab181199515f60(93 RAW = 80 added + 13 deleted).gpt-6-astra, efforthigh, own turn context dated 2026-10-25.git diff --no-renames --ignore-submodules=none --numstat 6acaaf78 HEAD). Reviewed size: 226 RAW. Correction forecast before edits: 340–375 total; actual total remains below 300, so the Root-authorized review exception forced by R1900-C1/K1 was not needed. No exclusions.src/lib/useQuestions.ts;src/screens/leitstand/LeitstandRoute.tsx;src/screens/leitstand/needs/{NeedsYou.tsx,Ask.tsx,DecisionLane.tsx,texts.ts,scope-lifetime.test.tsx}. The only new path, declared before edits, issrc/screens/leitstand/needs/scope-lifetime.test.tsx.Behavior and interfaces
Scope buttons use the existing
QuestionsState.scope/setScope: project reads passprojectId; fleet reads pass undefined and use the actual fleet list, including decision lanes. The existing project action and board remain available; the questions panel stays reachable without an active project. Unread, offline and missing-project states do not claim an empty measured list.Fleet cards now resolve registered project names through the existing read-only
listProjectsIPC wrapper, once per route mount with an unmount guard. OptionalprojectNamescontext reaches both ordinary cards and DecisionLane. Undefined means unread/pending, null means failed, and a completed map missing the stored ID means unregistered; each fallback retains the stored ID. Empty project IDs remain explicitly unknown. No active project name is substituted. Worker branch/task context still requires both worker and project IDs to match, using a local derived value rather than reassigning a prop. Missing or wrong-project workers retainneeds.noAgentin project scope; fleet fallback IDs are shortened to eight characters, with explicit unknown and preflight wording preserved. No inventory backend, poller or new question mutation was added.Project/scope changes remount the local question view and clear fetched rows/history before paint. A hook-local lifetime identity guards callbacks and answer outcomes, including null-result fallback reads. It changes on project/scope/enabled transitions, not on ordinary polls. The original implementation brief’s lifetime C4 was addressed inside that cut; R1900-C4 below is a different, deferred finding. The shared request helper remains unchanged.
Interface inventory, checked with bounded caller/fixture grep and baseline typecheck:
useQuestionsis used by App and LeitstandRoute; NeedsYou is used by the route and its existing test/i18n harnesses; Ask is used by NeedsYou and DecisionLane. QuestionsView and ShellAccessibility typed fixtures remain compatible and unchanged. The original optional props wereNeedsYouProps.projectId,Ask.fleet,DecisionLane.fleet; this correction adds only optionalprojectNamesto NeedsYou, DecisionLane and Ask. Before the interface edit,rgover production callers and fixtures found only the route plus NeedsYou/i18n harnesses and the two internal Ask paths. No forbidden fixture/caller change was needed; final typecheck and related suites passed.QuestionsStateremains unchanged, includinganswer(id, text, onStored?): Promise<void>. This is bounded source evidence, not a complete graph claim.ClosedHistory, history copy, cap 50, ordering, stored-answer provenance and existing answer/refusal/unlock/confirmation tests are unchanged. No PLAN, style, dependency, backend, native seam, IPC, shared concurrency, gate or configuration changes. Other #1898 follow-ups remain uncommissioned. PLAN bookkeeping stays with its separately assigned owner under Root's batched method.
Correction evidence (fresh observations, 2026-10-25)
The same clean local/remote/OPEN DRAFT PR head was verified at
16cb5f5ebefore writes.bash scripts/sync.sh startandnpm run dev:start-check -- --max-cargo 2 --min-free-gb 3.5: 0. Own turn context provesgpt-6-astra/high; native usage was separately observed within the authorized cap (the start-check warning itself is not quota evidence). Actualget_goalreturned null at start and handover; no native goal was created, replaced, completed or resumed. Live main was6acaaf78, with completed/success ci and Push-on-main runs; no main merge was performed.npm run typechecknpm run test:unit -- src/screens/leitstand/needs/scope-lifetime.test.tsxbefore C1/K1 fixAgent nicht mehr da; six other tests passnpm run test:unit -- src/screens/leitstand/needs/scope-lifetime.test.tsx src/i18n/hardcoded.test.tsnpm run buildbash scripts/ci/red-first.shbash scripts/ci/secret-scan.sh+ normalgit commit -F <LF-message>git interpret-trailers --parse <actual-message>/ actual commit bodybash scripts/ci/gates.sh lane prepushat c873c1cgit push -u origin codex/kr-06b-2-scope-r2git ls-remote origin refs/heads/codex/kr-06b-2-scope-r2git diff --check 6acaaf78 HEAD;git status --porcelain=v1C1/K1 RED commit:
eafb6788a1779205b12ff6a302f319924605afc7; implementationc873c1cb832f0f8ad6a41ee6f8017629db612fb4; unchanged-output text-format correction68ff43a3f32537b9d30d7288aaf877dc569bea56. The full prepush failure was corrected in the already permitted localtexts.ts, without changing the gate. The first green slice was pushed and remote-verified before the next slice.K2/C2 RED commit:
b6591e851ed0c0bf314e160e3439c62d85a83eb7; implementation plus K3/C3:292c09650c31be97ee9aafd546ab181199515f60. Compared with reviewed head,useQuestions.tshas exactly one added comment and no runtime/signature/state changes. No history rewrite occurred.Three new exact Test-First names in
src/screens/leitstand/needs/scope-lifetime.test.tsx:resolves registered fleet names in ordinary and decision cards and identifies missing registrationsdistinguishes pending and failed project reads from missing registrationspreserves project missing-worker wording and shortens only fleet fallback identitiesThese regressions mount public LeitstandRoute with real useQuestions and IPC normalization, mocking only Tauri and interval-time boundaries. Registry fixtures answer the existing
list_projectsread. Assertions cover both ordinary and decision cards, exact real names, missing registration, deferred success, failed read, absent/wrong-project workers, eight-character fleet IDs, explicit unknown identity, and rejection of borrowed active branch/task/name context. Existing matching-worker, preflight, polling, draft, late-read, stored/null/refused-answer and lifetime cases remain passing. No assertion was weakened.Every heavy phase used a fresh foreground guard followed by
&&and the phase, checking load, memory, process ancestry, cargo/heavy roots, target ownership and own start-check. Final push admission at 05:09:21Z was refused (load1 8.74) before push; after one foreground 30-second wait, fresh admission at 05:10:03Z passed (load1 5.15, no cargo/heavy roots or target owners). No bypass or other process termination.Preserved original implementation history (author receipts at reviewed 16cb5f5)
Old branch
codex/kr-06b-scoperemains clean and unpushed atd7e493d2fcec4644c90e588b14cbd78190f18bfd. The replacement started clean at the exact base; no amend, reset, rebase, stash, force push or history rewrite was used.The old 84-line test was reused unchanged in new RED commit
515414608ffdb6ba0fda53baa077c188a545d6ca.git diff --exit-code d7e493d2 -- src/screens/leitstand/needs/scope-lifetime.test.tsxat that commit: 0. Both copies contain 4,731 bytes, blob7bb6a005fedf77db50a8212338a917131d6835f1, SHA25688210e4a7e2f916ded089613317f3958bf5f40ebb0158ce68f9e7ab436def07b. The reviewed 16cb5f5 test file retained that exact byte prefix; this correction intentionally changes its two raw-project-ID assertions to exact registered names and adds dedicated regressions.Scope GREEN:
984bf98827b77eb49b294f92f28a2446f4a13d93, full prepush and normal push hook 0, remote verified before the next slice. Additional tests were committed in2d56367d5c3b07e7c274a8ab76652627d7f6f908; a duplicate fixture question initially made the query ambiguous. Separate test correction4b71035be5efc6e2ca4b722071a258b04c2d67f7supplies the meaningful lifetime RED: an old stored answer wrongly removes the current answer field after p1→p2→p1. Production protection follows in16cb5f5e.Every commit used an actual UTF-8/LF message file with
git commit -F. Before and after each commit,git interpret-trailers --parsevalidated exactly one Plan-ID, two separate exact Test-First entries andCo-Authored-By: GPT-6 Astra <gpt-6-astra@users.noreply.github.com>; no literal escaped newline separators. Final audit of all five actual commit bodies: 0. Exact Test-First names (all insrc/screens/leitstand/needs/scope-lifetime.test.tsx):reads real scopes and labels fleet projects and workers without borrowing active contextkeeps fleet reachable without a project and never calls unread or offline lists emptyisolates late reads and answers across project and scope round tripskeeps current drafts through polls and resets refused drafts on scope and project switchesOriginal implementation evidence (preserved author receipts at reviewed 16cb5f5)
All observations below are from 2026-10-25. Before writes, main CI runs
40158729004(ci) and40158728476(Push on main/CodeQL) were completed/success at the exact base; dev-build40158728984was also completed/success, without treating it as an admission prerequisite. There were no open PRs before this replacement PR.bash scripts/sync.sh startnpm run dev:start-check -- --max-cargo 2 --min-free-gb 3.5npm run typechecknpm run test:unit -- src/screens/leitstand/needs/scope-lifetime.test.tsxnpm run buildbash scripts/ci/red-first.shgit diff --check 6acaaf78 HEADbash scripts/ci/secret-scan.shbash scripts/ci/gates.sh lane prepushgit push -u origin codex/kr-06b-2-scope-r2git ls-remote origin refs/heads/codex/kr-06b-2-scope-r2git status --porcelain=v1New regressions mount public LeitstandRoute/NeedsYou with real useQuestions, IPC normalization and active-project events. Only Tauri and interval-time boundaries are mocked. They assert real filtered/unfiltered calls, lane counts, foreign attribution, no-project/loading/offline states, drafts/history/pending reads and stored/null/rejected answers across project and scope round trips, silent stale outcomes, and current stored-answer confirmation through an ordinary poll. No own-module mocks or private state access were added. Existing tests were not weakened.
Each heavy phase used a fresh foreground resource guard followed by
&&and the phase. One final push admission was correctly refused before starting the hook; after a 30-second wait a fresh guard admitted it. No bypass, installation, extra agent, external review or real-provider action occurred.NICHT ABGEDECKT
#[cfg(windows)]tests (run_in_pty, npm_shim, ConPTY, DPAPI) or the Windows clippy branches. The Windows lane belongs to the merge queue; ordinary PR checks do not establish it.KR-06b-2is absent fromdocs/PLAN.mdand its v2 subplan (rg, exit 1); authorized PLAN housekeeping remains with the separate owner for Root acceptance, with no PLAN edits by this worker.Verbatim common gate boundary, preserved for every correction run (precommit uses
precommitin the lane line, prepush/push useprepush):Review disposition and next owner
Review: ausstehend (Stufe B).
Root’s full round-one disposition at reviewed 16cb5f5e remains authoritative. Reported non-author families: Anthropic
claude-opus-5-5[1m]observed in Root’s harness, conditional approval on C1; Moonshot Kimi CLI 2.1.1, self-reportedkimi-code/k3, conditional approval on K1. Kimi’s actual model was not independently verified; the E1 basis is the dated 2026-10-17 note, not a fresh credit observation. This worker does not cure those limits or count itself as an independent reviewer.Root next commissions one non-author-family bounded delta review of 16cb5f5..292c096, then owns acceptance and Mergify. This is round two, not a worker acceptance claim. No third review, new review agent, QA, service, ready/review-ok/queue/merge or release action was performed. Same OPEN DRAFT PR 1900, same branch and execution owner; no new PR. Parent remains OPEN; not installed/effective, whole-Glass/UAT acceptance remains open. Old branch d7, prior evidence and backups remain untouched.