Skip to content

[bot] Merge master/48281984 into rel/dev - #1787

Merged
yenkins-admin merged 2 commits into
rel/devfrom
snapshot-master-48281984-to-rel/dev
Sep 8, 2026
Merged

[bot] Merge master/48281984 into rel/dev#1787
yenkins-admin merged 2 commits into
rel/devfrom
snapshot-master-48281984-to-rel/dev

Conversation

@yenkins-admin

Copy link
Copy Markdown
Contributor

🚀 Automated PR to perform merge from master into rel/dev with changes up to 4828198 (created by https://github.com/gooddata/gooddata-python-sdk/actions/runs/34223841560).

tychtjan and others added 2 commits September 8, 2026 13:46
An alert can be narrowed two ways: a date entry in `filters`, or a date
group-by in `attributes`. Only the first was checked, and the second is
worse -- a group-by makes the alert fire per period value instead of on
the latest one, which is a different alert from the one the fixture
describes. An alert with `filters: []` and `attributes: [order_date.month]`
therefore scored 7/7 clean; a recorded GPT-5.2 run carried exactly that
invented month group-by and passed.

This activates coverage the dataset already carries. Item
e2a1e22a-2020-4a24-b3fe-2350315f7a73 ("...for any individual product
brand...") stores `"Attributes": [{"using": "label/product_brand"}]`, and
that key was dropped on the floor. It is the regression gate for this
change, not just the new unit tests.

The two sides cannot be deep-compared as raw dicts. Fixtures author the AAC
tool-input form, `{"using": "label/x"}`; `create_metric_alert` receives the
resolved AFM form, `{"localIdentifier": "a0", "label": {"identifier":
{"id": "x"}}}`, forwarded verbatim from `prepare_metric_alert_proposal`. So
`_attribute_label_ids` canonicalises both sides to a bare label id and the
comparison is a sorted multiset: order-insensitive, and the converter's
`localIdentifier` stops mattering without a strip step. Identity is all
that is compared -- `showAllValues` is the agent's to choose.

The asymmetry is specific to attributes. `Filters` in the same fixture is
already AFM-shaped, which is why `_check_filters` gets away with a raw
`_deep_subset` and is left alone.

Malformed input is split structurally rather than by side:

- Not a list of groupings at all -> False. The agent answered wrongly, and a
  wrong answer is a FAIL. Raising would record an ERROR, which
  `json_report.py` excludes from the failure count, so a malformed answer
  would rank above a merely wrong one.
- A list holding an unreadable entry -> raises. Entries are typed
  `AttributeItem` at the tool boundary, so the plausible cause is the wire
  format moving, and that has to be unmissable rather than read as every
  agent regressing at once. The same rule covers a `label/x` versus
  `attribute/x` mix-up in a fixture.

The expectation side needs no guard beyond that: `_normalize_expected_output`
rejects a non-list before the run spends an API call, and `from_dict`, the
other way into the field, has no callers.

Deliberately not done: `generate_simulated_alert_response` is unchanged. An
`Attributes: []` expectation needs no support -- the simulated user does not
invent a grouping and the check verifies it did not. A non-empty expectation
does have a gap, but rule 3's "check ALL of these" list would have to grow
too for a symmetric rule to be honest, perturbing all 18 items to serve the
one that already requests its grouping in its own question. So: a non-empty
`Attributes` expectation requires the item's question to ask for that
grouping, and that requirement is documented on the normalizer.

Note for dashboards: `quality_score` for alert items moves from /7 to /8,
since both Langfuse sinks derive it as the fraction of true booleans in the
detail dict. Scores are not comparable across this commit, and
`attributes_correct` is a new score name.

The other half of GDAI-2175 -- whether the agent asked before proposing --
is not observable from final tool arguments and stays with
`verify_alert_asks_for_date` in gdc-nas.

JIRA: GDAI-2175
risk: low
…utes

fix(gooddata-eval): assert alert group-by attributes
@yenkins-admin
yenkins-admin merged commit 2db65a6 into rel/dev Sep 8, 2026
1 check passed
@yenkins-admin
yenkins-admin deleted the snapshot-master-48281984-to-rel/dev branch September 8, 2026 12:03
@codecov

codecov Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.18182% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 81.76%. Comparing base (a6edd0d) to head (4828198).
⚠️ Report is 577 commits behind head on rel/dev.

Files with missing lines Patch % Lines
...eval/src/gooddata_eval/core/agentic/alert_skill.py 98.11% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           rel/dev    #1787      +/-   ##
===========================================
+ Coverage    81.70%   81.76%   +0.05%     
===========================================
  Files          275      275              
  Lines        19848    19903      +55     
===========================================
+ Hits         16217    16273      +56     
+ Misses        3631     3630       -1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants