Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 13:35:54 +02:00
parent 1c4667a0fc
commit 13360292dd
781 changed files with 50211 additions and 22 deletions

View File

@@ -0,0 +1,16 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Milk totals per farm'
define view entity {{P}}I_MILK_TOTAL
as select from {{p}}milk as milk
left outer join {{p}}farm as farm on farm.farm_id = milk.farm_id
{
key milk.farm_id as farm_id,
farm.farmer as farmer,
sum( milk.litres ) as total_litres,
count( * ) as delivery_count
}
group by
milk.farm_id,
farm.farmer
having
sum( milk.litres ) > 500

View File

@@ -0,0 +1,16 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Milk totals per farm'
define view entity {{P}}I_MILK_TOTAL
as select from {{p}}milk as milk
inner join {{p}}farm as farm on farm.farm_id = milk.farm_id
{
key milk.farm_id as farm_id,
farm.farmer as farmer,
max( milk.litres ) as total_litres,
count( * ) as delivery_count
}
group by
milk.farm_id,
farm.farmer
having
sum( milk.litres ) > 500

View File

@@ -0,0 +1,16 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Milk totals per farm'
define view entity {{P}}I_MILK_TOTAL
as select from {{p}}milk as milk
inner join {{p}}farm as farm on farm.farm_id = milk.farm_id
{
key milk.farm_id as farm_id,
farm.farmer as farmer,
sum( milk.litres ) as total_litres,
count( * ) as delivery_count
}
group by
milk.farm_id,
farm.farmer
having
max( milk.litres ) > 500

View File

@@ -0,0 +1,16 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Milk totals per farm'
define view entity {{P}}I_MILK_TOTAL
as select from {{p}}milk as milk
inner join {{p}}farm as farm on farm.farm_id = milk.farm_id
{
key milk.farm_id as farm_id,
farm.farmer as farmer,
sum( milk.litres ) as total_litres,
count( * ) as delivery_count
}
group by
milk.farm_id,
farm.farmer
having
sum( milk.litres ) <= 500

View File

@@ -0,0 +1,16 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Milk totals per farm'
define view entity {{P}}I_MILK_TOTAL
as select from {{p}}milk as milk
inner join {{p}}farm as farm on farm.farm_id = milk.farm_id
{
key milk.farm_id as farm_id,
farm.farmer as farmer,
sum( milk.litres ) as total_litres,
count( * ) as delivery_count
}
group by
milk.farm_id,
farm.farmer
having
sum( milk.litres ) > 501

View File

@@ -0,0 +1,29 @@
{
"id": "G1012",
"pool": "train",
"object_type": "DDLS",
"category": "B",
"attempts": [
{
"stage": "validate",
"oracle": 100.0,
"null": 0,
"mutation": {
"valid": 5,
"killed": 3,
"ok": false
}
},
{
"stage": "validate",
"oracle": 100.0,
"null": 0,
"mutation": {
"valid": 5,
"killed": 5,
"ok": true
}
}
],
"accepted": true
}

View File

@@ -0,0 +1,99 @@
CLASS {{p}}t16_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
CLASS-DATA go_env TYPE REF TO if_cds_test_environment.
CLASS-METHODS class_setup.
CLASS-METHODS class_teardown.
METHODS setup.
METHODS only_farms_above_limit FOR TESTING.
METHODS total_litres FOR TESTING.
METHODS delivery_count FOR TESTING.
METHODS farm_below_limit_hidden FOR TESTING.
METHODS farm_at_limit_hidden FOR TESTING.
METHODS farm_just_above_limit FOR TESTING.
METHODS no_deliv_farm_hidden FOR TESTING.
METHODS unknown_farm_hidden FOR TESTING.
METHODS farmer_shown FOR TESTING.
ENDCLASS.
CLASS {{p}}t16_hidden IMPLEMENTATION.
METHOD class_setup.
go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_MILK_TOTAL' ).
ENDMETHOD.
METHOD class_teardown.
go_env->destroy( ).
ENDMETHOD.
METHOD setup.
DATA lt_farm TYPE STANDARD TABLE OF {{p}}farm WITH EMPTY KEY.
DATA lt_milk TYPE STANDARD TABLE OF {{p}}milk WITH EMPTY KEY.
go_env->clear_doubles( ).
lt_farm = VALUE #( ( farm_id = 'F1' farmer = 'ALPHA' region = 'NORTH' )
( farm_id = 'F2' farmer = 'BETA' region = 'NORTH' )
( farm_id = 'F3' farmer = 'GAMMA' region = 'SOUTH' )
( farm_id = 'F4' farmer = 'DELTA' region = 'SOUTH' )
( farm_id = 'F5' farmer = 'EPSILON' region = 'EAST' ) ).
lt_milk = VALUE #( ( farm_id = 'F1' deliv_date = '20240101' litres = '300.0' )
( farm_id = 'F1' deliv_date = '20240102' litres = '250.5' )
( farm_id = 'F2' deliv_date = '20240101' litres = '200.0' )
( farm_id = 'F2' deliv_date = '20240102' litres = '100.0' )
( farm_id = 'F3' deliv_date = '20240101' litres = '500.0' )
( farm_id = 'F5' deliv_date = '20240101' litres = '250.0' )
( farm_id = 'F5' deliv_date = '20240102' litres = '250.5' )
( farm_id = 'X9' deliv_date = '20240101' litres = '600.0' ) ).
go_env->insert_test_data( lt_farm ).
go_env->insert_test_data( lt_milk ).
ENDMETHOD.
METHOD only_farms_above_limit.
SELECT COUNT(*) FROM {{p}}i_milk_total INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rows ).
ENDMETHOD.
METHOD total_litres.
SELECT SINGLE total_litres FROM {{p}}i_milk_total WHERE farm_id = 'F1'
INTO @DATA(lv_total).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '550.5' )
act = CONV decfloat34( lv_total ) ).
ENDMETHOD.
METHOD delivery_count.
SELECT SINGLE delivery_count FROM {{p}}i_milk_total WHERE farm_id = 'F1'
INTO @DATA(lv_count).
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_count ).
ENDMETHOD.
METHOD farm_below_limit_hidden.
SELECT COUNT(*) FROM {{p}}i_milk_total WHERE farm_id = 'F2' INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ).
ENDMETHOD.
METHOD farm_at_limit_hidden.
SELECT COUNT(*) FROM {{p}}i_milk_total WHERE farm_id = 'F3' INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ).
ENDMETHOD.
METHOD farm_just_above_limit.
SELECT SINGLE total_litres FROM {{p}}i_milk_total WHERE farm_id = 'F5'
INTO @DATA(lv_total).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '500.5' )
act = CONV decfloat34( lv_total ) ).
ENDMETHOD.
METHOD no_deliv_farm_hidden.
SELECT COUNT(*) FROM {{p}}i_milk_total WHERE farm_id = 'F4' INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ).
ENDMETHOD.
METHOD unknown_farm_hidden.
SELECT COUNT(*) FROM {{p}}i_milk_total WHERE farm_id = 'X9' INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ).
ENDMETHOD.
METHOD farmer_shown.
SELECT SINGLE farmer FROM {{p}}i_milk_total WHERE farm_id = 'F1' INTO @DATA(lv_farmer).
cl_abap_unit_assert=>assert_equals( exp = 'ALPHA' act = lv_farmer ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,66 @@
{
"task": "G1012",
"mutants": [
{
"object": "{{P}}I_MILK_TOTAL",
"mutant": "line 5: inner join -> left outer join (join)",
"status": "killed",
"hidden": "7/9",
"failed_tests": [
"ONLY_FARMS_ABOVE_LIMIT",
"UNKNOWN_FARM_HIDDEN"
]
},
{
"object": "{{P}}I_MILK_TOTAL",
"mutant": "line 9: sum( -> max( (agg)",
"status": "killed",
"hidden": "7/9",
"failed_tests": [
"FARM_JUST_ABOVE_LIMIT",
"TOTAL_LITRES"
]
},
{
"object": "{{P}}I_MILK_TOTAL",
"mutant": "line 16: sum( -> max( (agg)",
"status": "killed",
"hidden": "4/9",
"failed_tests": [
"DELIVERY_COUNT",
"FARMER_SHOWN",
"FARM_JUST_ABOVE_LIMIT",
"ONLY_FARMS_ABOVE_LIMIT",
"TOTAL_LITRES"
]
},
{
"object": "{{P}}I_MILK_TOTAL",
"mutant": "line 16: > -> <= (rel)",
"status": "killed",
"hidden": "3/9",
"failed_tests": [
"DELIVERY_COUNT",
"FARMER_SHOWN",
"FARM_AT_LIMIT_HIDDEN",
"FARM_BELOW_LIMIT_HIDDEN",
"FARM_JUST_ABOVE_LIMIT",
"TOTAL_LITRES"
]
},
{
"object": "{{P}}I_MILK_TOTAL",
"mutant": "line 16: 500 -> 501 (const)",
"status": "killed",
"hidden": "7/9",
"failed_tests": [
"FARM_JUST_ABOVE_LIMIT",
"ONLY_FARMS_ABOVE_LIMIT"
]
}
],
"valid": 5,
"killed": 5,
"kill_rate": 1.0,
"ok": true
}

View File

@@ -0,0 +1,16 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Milk totals per farm'
define view entity {{P}}I_MILK_TOTAL
as select from {{p}}milk as milk
inner join {{p}}farm as farm on farm.farm_id = milk.farm_id
{
key milk.farm_id as farm_id,
farm.farmer as farmer,
sum( milk.litres ) as total_litres,
count( * ) as delivery_count
}
group by
milk.farm_id,
farm.farmer
having
sum( milk.litres ) > 500

View File

@@ -0,0 +1,66 @@
CLASS {{p}}t16_test DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
CLASS-DATA go_env TYPE REF TO if_cds_test_environment.
CLASS-METHODS class_setup.
CLASS-METHODS class_teardown.
METHODS setup.
METHODS total_of_one_farm FOR TESTING.
METHODS farm_below_limit FOR TESTING.
METHODS farm_just_above_limit FOR TESTING.
ENDCLASS.
CLASS {{p}}t16_test IMPLEMENTATION.
METHOD class_setup.
go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_MILK_TOTAL' ).
ENDMETHOD.
METHOD class_teardown.
go_env->destroy( ).
ENDMETHOD.
METHOD setup.
go_env->clear_doubles( ).
ENDMETHOD.
METHOD total_of_one_farm.
DATA lt_farm TYPE STANDARD TABLE OF {{p}}farm WITH EMPTY KEY.
DATA lt_milk TYPE STANDARD TABLE OF {{p}}milk WITH EMPTY KEY.
lt_farm = VALUE #( ( farm_id = 'A' farmer = 'ANN' region = 'EAST' ) ).
lt_milk = VALUE #( ( farm_id = 'A' deliv_date = '20240101' litres = '400.0' )
( farm_id = 'A' deliv_date = '20240102' litres = '150.5' ) ).
go_env->insert_test_data( lt_farm ).
go_env->insert_test_data( lt_milk ).
SELECT SINGLE total_litres, delivery_count FROM {{p}}i_milk_total WHERE farm_id = 'A'
INTO @DATA(ls_total).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '550.5' )
act = CONV decfloat34( ls_total-total_litres ) ).
cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_total-delivery_count ).
ENDMETHOD.
METHOD farm_below_limit.
DATA lt_farm TYPE STANDARD TABLE OF {{p}}farm WITH EMPTY KEY.
DATA lt_milk TYPE STANDARD TABLE OF {{p}}milk WITH EMPTY KEY.
lt_farm = VALUE #( ( farm_id = 'B' farmer = 'BOB' region = 'WEST' ) ).
lt_milk = VALUE #( ( farm_id = 'B' deliv_date = '20240101' litres = '100.0' ) ).
go_env->insert_test_data( lt_farm ).
go_env->insert_test_data( lt_milk ).
SELECT COUNT(*) FROM {{p}}i_milk_total INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ).
ENDMETHOD.
METHOD farm_just_above_limit.
DATA lt_farm TYPE STANDARD TABLE OF {{p}}farm WITH EMPTY KEY.
DATA lt_milk TYPE STANDARD TABLE OF {{p}}milk WITH EMPTY KEY.
lt_farm = VALUE #( ( farm_id = 'C' farmer = 'CARL' region = 'WEST' ) ).
lt_milk = VALUE #( ( farm_id = 'C' deliv_date = '20240101' litres = '250.0' )
( farm_id = 'C' deliv_date = '20240102' litres = '250.5' ) ).
go_env->insert_test_data( lt_farm ).
go_env->insert_test_data( lt_milk ).
SELECT SINGLE total_litres FROM {{p}}i_milk_total WHERE farm_id = 'C'
INTO @DATA(lv_total).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '500.5' )
act = CONV decfloat34( lv_total ) ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,11 @@
@EndUserText.label : 'Farm master'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table {{p}}farm {
key client : abap.clnt not null;
key farm_id : abap.char(10) not null;
farmer : abap.char(20);
region : abap.char(10);
}

View File

@@ -0,0 +1,11 @@
@EndUserText.label : 'Milk delivery'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table {{p}}milk {
key client : abap.clnt not null;
key farm_id : abap.char(10) not null;
key deliv_date : abap.dats not null;
litres : abap.dec(10,1);
}

View File

@@ -0,0 +1,40 @@
# 1. Goal
Show the milk that each farm delivered. The cooperative wants only the farms
that delivered more than 500 litres in total. A report and an OData service
will read the result, so the calculation must be in the database, in a CDS view.
# 2. Open questions
None.
# 3. Context
- Table {{P}}FARM (farm master), package $TMP. Key: FARM_ID (CHAR 10).
Fields: FARMER (CHAR 20), REGION (CHAR 10).
- Table {{P}}MILK (milk delivery), package $TMP. Key: FARM_ID (CHAR 10),
DELIV_DATE (DATS). Fields: LITRES (DEC 10,1).
# 4. Contract
- Create the CDS view entity {{P}}I_MILK_TOTAL in package $TMP.
- Elements, with these names: FARM_ID (key), FARMER, TOTAL_LITRES,
DELIVERY_COUNT.
- No authorization check (#NOT_REQUIRED).
# 5. Business rules
1. Show one row for each farm whose total litres are more than 500. A farm
with a total of 500 litres or less must not be shown. A farm without a
delivery must not be shown. A delivery whose farm is not in the farm
master must not be shown.
2. TOTAL_LITRES is the sum of LITRES of all deliveries of the farm, with one
decimal.
3. DELIVERY_COUNT is the number of deliveries of the farm.
4. FARMER is the farmer of the farm.
5. The rows are grouped by farm. There is exactly one row for each farm.
# 6. Constraints
- Release target: 8.16 (SAP_BASIS 816).
- Coding standards: Clean ABAP. No ATC priority 1 or 2 findings.
- Out of scope: do not change {{P}}FARM and {{P}}MILK.
# 7. Acceptance
- The view is active and has no syntax error.
- The hidden tests pass.
- Write ABAP Unit tests with CL_CDS_TEST_ENVIRONMENT in a global test class.

View File

@@ -0,0 +1,65 @@
{
"id": "G1012",
"category": "B",
"object_type": "DDLS",
"difficulty": 2,
"release_target": "v816",
"expected_outcome": "implement",
"budget": {
"max_tool_calls": 60,
"max_activations": 15
},
"seed": [
{
"type": "TABL",
"name": "{{P}}FARM",
"file": "seed/farm.tabl.asabap",
"description": "Farm master"
},
{
"type": "TABL",
"name": "{{P}}MILK",
"file": "seed/milk.tabl.asabap",
"description": "Milk delivery"
}
],
"contract": [
{
"type": "DDLS",
"name": "{{P}}I_MILK_TOTAL",
"fields": [
"FARM_ID",
"FARMER",
"TOTAL_LITRES",
"DELIVERY_COUNT"
]
}
],
"out_of_scope": [
"{{P}}FARM",
"{{P}}MILK"
],
"hidden_tests": [
{
"type": "CLAS",
"name": "{{P}}T16_HIDDEN",
"file": "hidden/t16_hidden.clas.abap",
"description": "T16 hidden tests"
}
],
"reference": [
{
"type": "DDLS",
"name": "{{P}}I_MILK_TOTAL",
"file": "reference/i_milk_total.ddls.asddls",
"description": "Milk totals per farm"
},
{
"type": "CLAS",
"name": "{{P}}T16_TEST",
"file": "reference/t16_test.clas.abap",
"description": "T16 own tests"
}
],
"craft_checks": []
}