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 @@
{
"id": "G1307",
"pool": "train",
"category": "K",
"base_task": "G1012",
"style": "incomplete",
"tool_schema": null,
"attempts": [
{
"stage": "validate",
"oracle": 100.0,
"null": 0
}
],
"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,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,20 @@
Create the CDS view entity {{P}}I_MILK_TOTAL in package $TMP. Use source tables {{P}}FARM and {{P}}MILK. The report and OData service read this view. The calculation must run in the database.
Use these element names exactly: FARM_ID (key), FARMER, TOTAL_LITRES, DELIVERY_COUNT. Set the authorization check to #NOT_REQUIRED.
Business rules:
1. Show one row for each farm with total litres greater than 500. Do not show a farm with 500 litres or less. Do not show a farm without a delivery. Do not show a delivery whose farm is not in the farm master.
2. TOTAL_LITRES is the sum of LITRES for all deliveries of the farm. Use one decimal.
3. DELIVERY_COUNT is the number of deliveries of the farm.
4. FARMER is the farmer of the farm.
5. Group rows by farm. There is exactly one row for each farm.
Constraints:
- Release target: 8.16 (SAP_BASIS 816).
- Use Clean ABAP. No ATC priority 1 or 2 findings.
- Do not change {{P}}FARM and {{P}}MILK.
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,67 @@
{
"id": "G1307",
"category": "K",
"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": [],
"base_task": "G1012",
"input_style": "incomplete"
}