Repository navigation
feat(design): DS-X-33 sparkline, bar list, chart frame - #1717
Conversation
Test-First: src/design/data/charts.test.tsx::the table twin shows the same values as the chart Test-First: src/design/data/charts.test.tsx::each bar has a text label and value beyond colour Test-First: src/design/data/charts.test.tsx::sparkline preserves gaps and renders single and constant samples Test-First: src/design/data/charts.test.tsx::empty and unknown data are words in graphics and table twins Co-Authored-By: GPT-6 <noreply@openai.com>
Test-First: src/design/data/charts.test.tsx::the table twin shows the same values as the chart Test-First: src/design/data/charts.test.tsx::each bar has a text label and value beyond colour Test-First: src/design/data/charts.test.tsx::sparkline preserves gaps and renders single and constant samples Test-First: src/design/data/charts.test.tsx::empty and unknown data are words in graphics and table twins Co-Authored-By: gpt-6.1-sol <noreply@openai.com>
No-Test: plan text only Co-Authored-By: gpt-6.1-sol <noreply@openai.com>
Test-First: src/design/data/charts.test.tsx::bars and table twins format fractions and thousands in German Test-First: src/design/data/charts.test.tsx::the table disclosure opens only after clicking its summary Test-First: src/design/data/charts.test.tsx::empty and unknown data are words in graphics and table twins Co-Authored-By: gpt-6.1-sol <noreply@openai.com>
Address R1717-A1, B1, C1, D1, D2 and the accepted empty-legend part of E1. Test-First: src/design/data/charts.test.tsx::bars and table twins format fractions and thousands in German Test-First: src/design/data/charts.test.tsx::the table disclosure opens only after clicking its summary Test-First: src/design/data/charts.test.tsx::empty and unknown data are words in graphics and table twins Co-Authored-By: gpt-6.1-sol <noreply@openai.com>
|
@Cuarroc Dieser PR hat einen Konflikt mit main und kann nicht in die Merge-Queue. Bitte main hineinmergen (kein Rebase, kein Force-Push) und den Konflikt loesen; das Label |
No-Test: merge commit, docs/PLAN.md conflict only Co-Authored-By: gpt-6.1-sol <noreply@openai.com>
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: e2199bba57
ℹ️ 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".
|
|
||
| export interface ChartDatum { label: string; value: number | null } | ||
| export interface ChartProps { data: readonly ChartDatum[] | null; label: string } | ||
| const numberFormat = new Intl.NumberFormat("de-DE", { maximumFractionDigits: 3 }); |
There was a problem hiding this comment.
Preserve small values in the table twin
When a dataset contains legitimate values below the fixed three-decimal precision, such as 0.0004, this formatter displays 0 (or -0) while the bar or sparkline still renders a nonzero magnitude. That makes the mandatory textual table alternative contradict the graphic; preserve sufficient precision or let callers provide a value formatter.
Useful? React with 👍 / 👎.
| | DS-X-12 | Bewegungstoken angewendet: ein Druck-Token (`--g-press-scale`) für Knöpfe, Filterchips, Segmente und Tabs; der Füllbalken wächst per `transform: scaleX()` statt über die Breite, die Erlaubnisliste für Layout-Animation in `motion.test.ts` ist leer; der Lauf-Ring atmet nur unter `--g-ambient-play` (Lebendig), in Ruhig steht er still und ein Zustandswechsel gibt einen einmaligen Ping (`usePulseOnChange`); eine dokumentierte Regel für reduzierte Bewegung am Kopf von `motion.css`; das doppelte `g-enter` entfällt | Implementierer · Claude; Root nimmt ab | DS-X-03 (#1606), DS-X-07 (#1683); DS-Blueprint-Schnitt 16.10. (Zeile DS-X-12) | Server | B | Erledigt: #1693 (merged 2026-10-18) | red-first Vitest-Tests; `vitest run src/design`, typecheck, contrast-check, `plan-check --offline` und prepush Exit 0; ein unabhängiger Stufe-B-Review (Root beauftragt) | – | | ||
| | DS-X-21 | Ein Symbolsatz auf 20-px-Raster: `Icon` in `src/design/icons/` (ohne Beschriftung für Hilfstechnik verborgen, mit `label` als `role="img"`, Farbe über `currentColor`) und 24 Lucide-Pfade als Daten (`glyphs.ts`), dazu Entsprechungen für die 14 klassischen Symbole, die Seitenleisten-Symbole und den Auswahl-Pfeil; Lizenztext `LUCIDE-LIZENZ.txt` neben den Symbolen und Eintrag in `docs/THIRD_PARTY_NOTICES.md` | Implementierer · Claude; Root nimmt ab | DS-Blueprint-Schnitt 16.10. (DS-X-21), Root-Entscheidung 17.10.: Pfade kopieren, kein Paket | Server | B + Lizenzprüfung | Entwurfs-PR offen (17.10.): kein Aufrufer umgestellt, `src/components/Icon.tsx` bleibt bis KR-15; Galerie zeigt den Satz unter „Symbole“ | Tests rot→grün; `vitest run src/design`, typecheck, `contrast-check`, `plan-check --offline` und prepush Exit 0; Bilder der Galerie hell und dunkel; ein Stufe-B-Review einer Nicht-Anthropic-Familie, Root prüft den Lizenzhinweis | – | | ||
| | DS-X-32 | Datenfarben `--g-viz-1` bis `--g-viz-6` in `src/design/tokens.css` (hell und dunkel), eigene Farbtöne abseits der Zustandsfarben; `scripts/contrast-check.mjs` prüft jede Datenfarbe als Nicht-Text mit mindestens 3:1 auf Grund, Chrome und Glas (auch in allen Glas-Varianten), hält sie voneinander und von den Zustandsfarben auseinander und meldet „Token fehlt“; die Galerie-Seite Farben zeigt die sechs Farbfelder; keine Diagramm-Bausteine (das ist DS-X-33) | Implementierer · Claude; Root nimmt ab | DS-X-02; DS-Blueprint-Schnitt 16.10. (Zeile DS-X-32) | Server | B | Erledigt: #1702 (merged 2026-10-18), Branch `claude/ds-x-32`; die sechs Datenfarben stehen in `tokens.css`, `contrast-check` prüft sie und die Galerie-Seite Farben zeigt sie, Diagramm-Bausteine folgen mit DS-X-33 | red-first Gate-Tests in `scripts/lib/contrast-gate.test.mjs`; `contrast-check`, typecheck, `plan-check --offline` und prepush Exit 0; Bilder der Farben-Seite hell und dunkel; ein unabhängiger Stufe-B-Review (Root beauftragt) | – | | ||
| | DS-X-33 | Diagramm-Bausteine in `src/design/data/`: `Sparkline`, beschriftete `BarList` und `ChartFrame` mit Titel, Beschreibung, Legende und verpflichtender Tabellenansicht aus denselben Daten; ausschließlich Datenfarben, leere und unbekannte Werte als Wörter, statisch; Register und deutsche Texte ergänzt; keine bestehenden Ansichten umgestellt | Implementierer · Codex; Root nimmt ab | DS-X-32 (#1702, `4a9c8a5b`); DS-Blueprint-Schnitt 16.10. | Server | B | In Prüfung: Entwurfs-PR `codex/ds-x-33`; nach Merge stehen die drei Bausteine samt Tabellenansicht bereit | vier benannte Tests rot→grün; Registerabdeckung, typecheck, contrast-check, `plan-check --offline` und eigene prepush Exit 0; betrachtete Bilder hell/dunkel mit offener Tabelle; unabhängiger Nicht-OpenAI-Review durch Root ausstehend | – | |
There was a problem hiding this comment.
Update the PLAN row to the post-merge state
This candidate's report records completed independent reviews and review-ok, but the added row will still say that the draft is under review and the non-OpenAI review is outstanding after merge. Update the row to the delivered/reviewed state so the canonical plan is not immediately stale.
AGENTS.md reference: AGENTS.md:L121-L121
Useful? React with 👍 / 👎.
Merge Queue Status
This pull request spent 8 minutes 54 seconds in the queue, including 8 minutes 12 seconds running CI. Required conditions to merge
|
Dieses Paket ergänzt drei Bausteine für kleine Diagramme.
Die aufklappbare Tabelle zeigt dieselben Zahlen und lässt sich mit der Tastatur bedienen.
Leere und unbekannte Daten werden ausdrücklich benannt.
Report
Plan-ID: DS-X-33
Base:
main@4ad7c83e4fc4082195075fb6b3c37aab872cc038.Reviewed candidate pending:
61606e27b96c80266383a397118ceb0e9d8b16b1.Model observed on 2026-10-18 from the harness process arguments:
gpt-6.1-sol.Added static SVG
Sparkline, labelled signedBarList, andChartFrameundersrc/design/data/. ChartFrame accepts a title, caption, kind and one dataset; it renders the legend, graphic and mandatory named table from that dataset. Native details/summary provides keyboard access, with a focusable table scroll region and semantic row/column headers. Sparkline gaps remain gaps; finite extremes, constant values, single points, zero, negatives, empty and unknown data are handled. Chart marks use only--g-viz-1..6; labels and values carry the information alongside colour. Static rendering also respects reduced motion.Added registry entries, six German translation keys and exactly one DS-X-33 PLAN row. The diff is 175 added lines. Existing screens and dependencies are unchanged. Standalone graphics document ChartFrame as their table-twin host. Existing PLAN status synchronization remains separate in #1714.
Red test: commit
c0177e11contains four compiling, failing behavioral tests against empty component placeholders;53235f4bimplements them. Test boundaries are the rendered public components, accessible roles, displayed numbers and SVG geometry. The four exact test names are recorded in the commit trailers.red-first.shconfirms red/missing at the merge base and green at the candidate.node_modules/.bin/vitest run src/design/data/charts.test.tsx src/design/registry.coverage.test.tsnpm run typechecknode scripts/contrast-check.mjsnode scripts/plan-check.mjs --offlinebash scripts/ci/red-first.shbash scripts/ci/gates.sh lane prepushnode .pa/ds-x-33-shot.mjsgit push -u origin codex/ds-x-33git ls-remote origin codex/ds-x-33Screenshots:
ds-x-33-light.pngandds-x-33-dark.png, both 1440×900, saved outside Git and visually inspected. Both show Sparkline and BarList inside ChartFrame with opened tables, plus empty and unknown datasets. Absolute artifact locations are in the private handover reportds-x-33-20261018.md. The screenshot driver is an untracked local fixture, not a shipped screen.NICHT ABGEDECKT:
#[cfg(windows)]tests (PTY, npm shim, ConPTY, DPAPI) or Windows clippy branches. The Windows lane remains for the merge queue.Review: ausstehend (Stufe B); pending, Root commissions one independent non-OpenAI reviewer per the package brief. No self-approval, ready transition, labels or merge requested.
🤖 Generated with Claude Code on the ProjectA server worker
Review round 1 (18.10.)
Source: delivered Claude (Anthropic) review of
61606e27b96c80266383a397118ceb0e9d8b16b1, dated 2026-10-18, APPROVE WITH CONDITIONS; Root accepted the scoped fixes below. This appendix records the new candidate; the original report above is retained unchanged as historical evidence.New head:
2ef20e6f4243c9bdb752f2fd687bee465798535d. Test commit:ef66e3b7d17876877e41afa56459ac0ea7ab5962; fix commit:2ef20e6f4243c9bdb752f2fd687bee465798535d.Size versus main: 193 / 300 changed lines (192 additions, 1 deletion), confirmed by
git diff --stat origin/main...HEAD(exit 0) andgh pr view 1717 --json additions,deletionsfields (192/1). Gate merge base:4ad7c83e4fc4082195075fb6b3c37aab872cc038.2ef20e6f; one sharedIntl.NumberFormat("de-DE", { maximumFractionDigits: 3 })serves bars and table cells. Tests cover1234.5→1.234,5and0.1 + 0.2→0,3.2ef20e6f; transparent background, hair border, normal whitespace and matching 13px text; the last row has no bottom border. Inspected screenshots and browser computed styles support the fix.ef66e3b7; a dedicated test assertsdetails.openis false before and true after clicking, retaining the focus assertion.2ef20e6f; all chart unknown words usede["state.unknown"], andchart.unknownis removed.2ef20e6f; its data-block line now lists Sparkline, BarList and ChartFrame.2ef20e6fsuppresses legends for empty/null datasets, with regression coverage. Follow-up per Root: distinct region/table names and a heading-level prop; repeated label announcements remain for that accessibility follow-up.HonestStateis a padded full placeholder; the compact 120px chart slot uses the shared unknown-state word directly so the state remains explicit within that small space.Red-first:
node_modules/.bin/vitest run src/design/data/charts.test.tsxexited 1 before the fix (A1 number formatting and E1 empty legend failed; 4 passed, 2 failed). The tests were committed first inef66e3b7; the fix followed in2ef20e6f. C1 adds missing coverage for already-working native disclosure behavior and was green before the fix. Exact per-test trailers for A1 and C1 are in both new commits; the full red-first gate passed at the candidate. No assertions were weakened and no skips, retries or timeouts were added.node_modules/.bin/vitest run src/design/data/charts.test.tsx src/design/registry.coverage.test.ts src/i18nnpm run typechecknode scripts/contrast-check.mjsnode scripts/plan-check.mjs --offlinebash scripts/ci/secret-scan.shbash scripts/ci/red-first.shbash scripts/ci/gates.sh lane prepushnode .pa/ds-x-33-r2-shot.mjsgit push -u origin codex/ds-x-33git ls-remote origin codex/ds-x-332ef20e6f4243c9bdb752f2fd687bee465798535dVisual evidence: local untracked fixture, 1440×900, light/dark, OS reduced motion enabled and static chart rendering. Both
ds-x-33-r2-light.pngandds-x-33-r2-dark.pngare retained under.pa/review-round-2/; both were visually inspected. The browser script is also untracked and is not a shipped app screen.Architecture drift: the existing gate reports no new occurrences; no allowlist entry was added.
Native goal inspection returned
goal: nullat start and handover. The bounded task is this authorized PR review delta, ending at verified push and report handover; Root owns the subsequent review and integration. The locallage-jetztmirror was unavailable; git/GitHub supplied the live branch and PR evidence. Start checks exited 0; provider quota was not measured because no usage file was supplied. Author model observed from running harness process arguments on 2026-10-18:gpt-6.1-sol(OpenAI). The required footer is template text, not model provenance.NICHT ABGEDECKT:
#[cfg(windows)]tests (PTY, npm shim, ConPTY, DPAPI) or Windows clippy branches. The Windows lane remains for the merge queue.--offline, and the remaining E1 follow-ups are not covered.Review: ausstehend (Stufe B); pending, Root commissions one independent non-OpenAI delta review. No OpenRouter review was run. The PR remains a draft with no labels; readiness and integration stay with Root.
🤖 Generated with Claude Code on the ProjectA server worker
Conflict fix (Codex, 2026-10-20)
Authorized NACHBESSERN by Root: restore mergeability by merging main; no product behavior or review fixes. Observed at 2026-10-20 12:20:39 UTC: GitHub reports MERGEABLE at the new head; the PR remains a draft. The pre-existing conflict label was still present and was left untouched.
2ef20e6f4243c9bdb752f2fd687bee465798535d.e2b05503ba4be898ea742caae4f01feb64bc486c.git ls-remote:e2199bba57febe76010517fcc1472d54ff0e5d3a.gpt-6.1-sol, extracted from this shell's ancestorcodex.exeprocess arguments usingGet-CimInstance Win32_Process(exit 0, 2026-10-20). The initial generic GPT-6 co-author text was corrected before pushing; the two local commit trees are identical.Only
docs/PLAN.mdconflicted. Its resolution preserves the entire main file verbatim and inserts the original branch-only DS-X-33 row exactly once. An inline Node assertion usinggit showandgit diff --unified=0verified both that invariant and exact preservation of the original added/removed lines in all nine non-PLAN PR files (exit 0). No other branch-only PLAN row existed. The final diff remains the original 10 files: 192 insertions, 1 deletion, including one added PLAN row.bash scripts/sync.sh startgit fetch origingit merge origin/mainnpm cinpm run dev:start-checknode scripts/plan-check.mjs --offlinebash scripts/ci/secret-scan.shgit -c user.name=Cuarroc -c user.email=47299143+Cuarroc@users.noreply.github.com commit(then metadata-only--amend)bash scripts/ci/gates.sh lane prepushgit diff --exit-code f45039931a28bcf1d5268c3613cf99bb64e0c7cf HEADgit push origin HEAD:codex/ds-x-33git ls-remote origin refs/heads/codex/ds-x-33git diff origin/main...HEAD --statAll gate runs used
CARGO_TARGET_DIR=C:/Users/Cuarr/cargo-targets/projecta-bandCARGO_BUILD_JOBS=1. No failed-run retry was used; the second full prepush was the mandatory automatic push hook. Logs are outside the worktree in the local Temp directory.NICHT ABGEDECKT:
Native goal inspection returned
goal: nullat start and the verification milestone. The bounded ticket is this authorized #1717 conflict fix, owned by Codex and ending at verified push and report handover; Root retains review and integration ownership. The main-checkout lage-jetzt mirror was available and read.Review disposition: no product/review fixes and no new independent review in this conflict-only task; the existing dispositions and remaining review duties above are preserved. No draft/ready transition, label mutation, merge or Mergify comment was performed. Open: Root review/integration and the coverage limitations above.
Review round 2 / delta (Root, 2026-10-20)
61606e27..2ef20e6f: APPROVE, no findings (chart.unknownfully replaced bystate.unknown(de.ts:115), legend hidden without data, de-DE number format tested, disclosure test split).e2199bba: product diff identical to2ef20e6f(only a hunk offset inregistry.ts);docs/PLAN.mdadds only the DS-X-33 row.e2199bba: APPROVE WITH CONDITIONS, all low.data!in Sparkline is safe but misleading--g-viz-1, undocumentedchartColourspellingNo open high finding.
review-okbound to heade2199bba57febe76010517fcc1472d54ff0e5d3a.