Add support for a new curve data format in the Curves package converter system
日本語の概要は準備中です。原文の説明を表示しています。
Translate hand-written Playwright specs (or any existing UI tests) into Gherkin features on @datagrok-libraries/bdd, then prove the features test what they claim by backward-matching them against the originals with independent reviewers, and fix the gaps in the core, the library and the features
インストールする前に、エージェントに与えられる指示の中身を確認できます。
A feature file is only as honest as the bindings behind its phrases. Translating a spec is three passes: the first produces green tests, the second finds which of them would stay green with the behaviour broken, the third turns those into real checks — usually by adding a name or a signal to the core rather than a wait to the test.
Rules that hold throughout: a wait, sleep, pixel scan or retry in a test means a missing signal
or name in the core — fix the core; nothing is reimplemented that the platform already has;
nothing is committed without the lead's order. The vocabulary and the invariants are in
public/libraries/bdd/README.md and CLAUDE.md (npx grok-bdd list-steps prints every phrase);
a viewer's areas and readings are in core/client/d4/lib/src/viewers/<viewer>/CLAUDE.md.
Before anything else, drop what never becomes a feature (hard rule, public/libraries/bdd/CLAUDE.md
"What never becomes a feature"): a TestTrack case marked target_layer: manual-only or apitest;
any scenario that runs a server-side Python/R/Julia script, a Jupyter kernel or a Docker container,
or reaches an outside web service (check the code path behind the command or pane, not its name); any scenario an
API test can check (CLAUDE.md "Anything an API test can check"): a function's result, a server
outcome, a permission or sharing matrix, the cases of a parser or a search syntax, a query's rows, an
analysis's numbers, a file's content, what a layout or project stores. For those, find the API test
(ApiTests/src, the package's src/tests, core/server/datlas/test); where there is none, write it
there, and translate only the gesture that triggers the behaviour, claimed once. An old spec's matrix
of credentials, search strings or permission combinations becomes an API test with one UI scenario
beside it, never an Outline. Name what was dropped and why in one line of the feature description. A
gap hunt applies the same filter: these are not gaps, and a "missing step" whose only use is such a
claim is not missing.
Then plan for speed (CLAUDE.md "A feature is fast"): fixtures through the API, a @journey for
scenarios sharing a setup, the smallest table that shows the behaviour, a reload or a project round
trip only when it is the subject, no fixed waits. After the run, read the JSON report and explain any
scenario over 10 s.
Then list what each scenario leaves on the server — entities, files, database rows, the layout,
project, chat or share the UI makes on the side, a configuration or setting of something the feature
does not own — and give every item a cleanup that runs at feature end and again at its start, and
reads the server back (hard rule, CLAUDE.md "Everything a feature puts on the server goes"). A
scenario whose change cannot be undone is not translated.
Look at the viewer's getWidgetStatus() first. A viewer that has none is the whole job; the
features are the easy half. Write the status, get it into the served bundle, and only then write a
feature — a feature run against a stale bundle reports "the viewer has no readings", which reads
exactly like a wrong phrase.
With agents, three at a time:
direct / needs-core / manual / vacuous; the fixture numbers verified against the data
files; the core signals to add as "old hack → the reading or area that replaces it → where in
the code it comes from"; the step phrases marked exists / new.part list); finish with the viewer's
CLAUDE.md "Automation surface": every area and value, what it reads from, and when it is
absent.Tell agents to push back: a brief is a hypothesis, and the best returns came from an implementer refusing one (a shortcut the viewer does not bind, a reading that would report 0 for every group).
@journey — Background once, scenarios in order, each putting back what it changed.npx grok-bdd compile, run, iterate until green twice, then on four workers, then headed
once (a GPU-rasterized canvas repaints differently after enough pixel readbacks).Green is not done. One read-only reviewer agent per old-spec/feature pair, in parallel:
You are a read-only reviewer. Do not edit, create or run anything.
Pair: NEW feature <path>, its generated spec <path> (which binding each phrase calls), OLD spec
<path> with its helpers and md. Read in full every binding the spec imports, the library's
runtime (src/runtime/viewer-runtime.ts, viewers.ts, viewer-pixels.ts, harness.ts, locate.ts) and
the core file behind any hit area or reading you need to understand.
1. Table every assertion of the OLD spec: covered / weakened (how) / dropped (what is lost) /
replaced (only if at least as strong), with the new feature line.
2. For every Then of the NEW feature trace phrase → binding → in-page code and decide whether it
can pass with the behaviour broken. Think in mutations: the property ignored, the render never
happened, the baseline taken after the change, a stale hit area or tooltip, a table with the
right shape and blank cells, a one-pixel change. Flag tautologies, checks of values the step
itself wrote, "exists" where "shown" is claimed, wording that promises more than is verified.
3. For every When/Given: does it do what it names on the element it names, and would the Then
after it notice if it silently did nothing?
4. Flag any sleep, fixed wait, cap used as a wait, or retry loop in the bindings used.
5. List what in the OLD spec was itself vacuous or a hack, so nobody restores it.
Report: verdict in two sentences; the coverage table; findings most serious first with feature
line, binding file:line, claimed vs checked, a concrete false-pass scenario, a one-sentence fix.
Consolidate the reports into systemic findings (one library or core fix serves every feature) and per-feature restorations. A reviewer's finding is a hypothesis until the suite runs it.
CLAUDE.md).npm run build, npm run test:unit.grok-bdd compile, the run; a failure is evidence first and a phrase second.Each line is a way a passing test was found to prove nothing.
<canvas> still exists") is not an assertion; the viewer's own
error reading is.if (input)).present, or make the activity first. The context panel
renders grok.shell.o: name the object (the context panel should show "X") before reading
a pane; a click that does not change the current object leaves the panel as it was.md goes stale (three "open bugs" were all
fixed) — verify before writing a @known-failure; a test.fail(true, …) spec proves nothing.\\.A step written for one viewer is usually not about that viewer. It belongs in
bindings/tiers/viewers/widgets.ts and takes {widget} when another viewer could want it: the
same body under two names, a gesture rather than a fact (a lasso, a drag between widgets, the
viewer's own menu), a property every viewer has, a convention several viewers publish (fields
and <COL> of row <r>, columns/rows). It stays in the package when it reads a status key
shape only that viewer publishes (bar <category>, share of "<slice>", record of card <n>),
performs a gesture only that viewer's DOM has (a sketch designer, an axis-label reorder), or
checks an arithmetic only it can (an aggregation against groupBy, a correlation against
DG.Stats). When promoting, keep what the specific one did (hitArea(…, beforeChange: true)
both polls for the area and takes the baseline) and check the phrase the library already
resolves.
A JS/TS viewer needs the same three signals as a Dart one (getWidgetStatus, isRenderPending,
onRendered), and its surface reaches a running stand only when the package is rebuilt and
published — for a viewer that lives in a library, the package's node_modules/@datagrok-libraries/<lib>
must point at the checkout. Establish this before writing features.
Worked examples: public/packages/UsageAnalysis/bdd/features/viewers/ (the box plot was the
first; viewer-chrome.feature is the outline over what every viewer shares). Run with
npx grok-bdd run --reporter=list generated/<folder> from the package.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Add support for a new curve data format in the Curves package converter system
日本語の概要は準備中です。原文の説明を表示しています。
Create info panels that appear in the context panel based on semantic types
日本語の概要は準備中です。原文の説明を表示しています。
Add a new single-objective optimization algorithm to the sci-comp library. Use when the user asks to implement a new optimizer (e.g. gradient descent, BFGS, simulated annealing, differential evolution).
日本語の概要は準備中です。原文の説明を表示しています。
Add unit tests to a Datagrok package
日本語の概要は準備中です。原文の説明を表示しています。
Answer a "how do I …" question about the platform with a Gherkin scenario on @datagrok-libraries/bdd that is filmed into a how-to video (grok-bdd guide), so the answer is demonstrated, sent as a video plus numbered steps, and kept as a regression test
日本語の概要は準備中です。原文の説明を表示しています。
Create a Datagrok application with routing, views, and data access
日本語の概要は準備中です。原文の説明を表示しています。