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,13 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Film revenue'
define view entity {{P}}I_FILM_REVENUE
as select from {{p}}screen as s
left outer join {{p}}ticket as t on t.show_id = s.show_id
{
key s.film as film,
count( * ) as ticket_count,
sum( t.price ) as revenue
}
where s.status = 'A'
group by
s.film

View File

@@ -0,0 +1,13 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Film revenue'
define view entity {{P}}I_FILM_REVENUE
as select from {{p}}screen as s
inner join {{p}}ticket as t on t.show_id <> s.show_id
{
key s.film as film,
count( * ) as ticket_count,
sum( t.price ) as revenue
}
where s.status = 'A'
group by
s.film

View File

@@ -0,0 +1,13 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Film revenue'
define view entity {{P}}I_FILM_REVENUE
as select from {{p}}screen as s
inner join {{p}}ticket as t on t.show_id = s.show_id
{
key s.film as film,
count( * ) as ticket_count,
max( t.price ) as revenue
}
where s.status = 'A'
group by
s.film

View File

@@ -0,0 +1,13 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Film revenue'
define view entity {{P}}I_FILM_REVENUE
as select from {{p}}screen as s
inner join {{p}}ticket as t on t.show_id = s.show_id
{
key s.film as film,
count( * ) as ticket_count,
sum( t.price ) as revenue
}
where s.status <> 'A'
group by
s.film

View File

@@ -0,0 +1,13 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Film revenue'
define view entity {{P}}I_FILM_REVENUE
as select from {{p}}screen as s
inner join {{p}}ticket as t on t.show_id = s.show_id
{
key s.film as film,
count( * ) as ticket_count,
sum( t.price ) as revenue
}
where s.status = 'Z'
group by
s.film

View File

@@ -0,0 +1,19 @@
{
"id": "G1031",
"pool": "train",
"object_type": "DDLS",
"category": "I",
"attempts": [
{
"stage": "validate",
"oracle": 100.0,
"null": 0,
"mutation": {
"valid": 5,
"killed": 5,
"ok": true
}
}
],
"accepted": true
}

View File

@@ -0,0 +1,76 @@
CLASS {{p}}t_cinema_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 one_row_per_film FOR TESTING.
METHODS ticket_count FOR TESTING.
METHODS revenue FOR TESTING.
METHODS cancelled_excluded FOR TESTING.
METHODS different_films FOR TESTING.
METHODS no_tickets FOR TESTING.
ENDCLASS.
CLASS {{p}}t_cinema_hidden IMPLEMENTATION.
METHOD class_setup.
go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_FILM_REVENUE' ).
ENDMETHOD.
METHOD class_teardown.
go_env->destroy( ).
ENDMETHOD.
METHOD setup.
DATA lt_screen TYPE STANDARD TABLE OF {{p}}screen WITH EMPTY KEY.
DATA lt_ticket TYPE STANDARD TABLE OF {{p}}ticket WITH EMPTY KEY.
go_env->clear_doubles( ).
lt_screen = VALUE #(
( show_id = 'S1' film = 'F1' show_date = '20250101' hall = 'H1' status = 'A' )
( show_id = 'S2' film = 'F1' show_date = '20250102' hall = 'H2' status = 'A' )
( show_id = 'S3' film = 'F2' show_date = '20250101' hall = 'H1' status = 'A' )
( show_id = 'S4' film = 'F3' show_date = '20250103' hall = 'H1' status = 'C' )
( show_id = 'S5' film = 'F4' show_date = '20250104' hall = 'H1' status = 'A' )
).
lt_ticket = VALUE #(
( show_id = 'S1' ticket_no = 1 price = '10.00' )
( show_id = 'S1' ticket_no = 2 price = '10.00' )
( show_id = 'S2' ticket_no = 1 price = '12.50' )
( show_id = 'S3' ticket_no = 1 price = '8.00' )
( show_id = 'S4' ticket_no = 1 price = '9.00' )
).
go_env->insert_test_data( lt_screen ).
go_env->insert_test_data( lt_ticket ).
ENDMETHOD.
METHOD one_row_per_film.
SELECT COUNT(*) FROM {{p}}i_film_revenue WHERE film = 'F1' INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rows ).
ENDMETHOD.
METHOD ticket_count.
SELECT SINGLE ticket_count FROM {{p}}i_film_revenue WHERE film = 'F1' INTO @DATA(lv_count).
cl_abap_unit_assert=>assert_equals( exp = 3 act = lv_count ).
ENDMETHOD.
METHOD revenue.
SELECT SINGLE revenue FROM {{p}}i_film_revenue WHERE film = 'F1' INTO @DATA(lv_revenue).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '32.50' ) act = CONV decfloat34( lv_revenue ) ).
ENDMETHOD.
METHOD cancelled_excluded.
SELECT COUNT(*) FROM {{p}}i_film_revenue WHERE film = 'F3' INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ).
ENDMETHOD.
METHOD different_films.
SELECT COUNT(*) FROM {{p}}i_film_revenue INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rows ).
ENDMETHOD.
METHOD no_tickets.
SELECT COUNT(*) FROM {{p}}i_film_revenue WHERE film = 'F4' INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,65 @@
{
"task": "G1031",
"mutants": [
{
"object": "{{P}}I_FILM_REVENUE",
"mutant": "line 5: inner join -> left outer join (join)",
"status": "killed",
"hidden": "4/6",
"failed_tests": [
"DIFFERENT_FILMS",
"NO_TICKETS"
]
},
{
"object": "{{P}}I_FILM_REVENUE",
"mutant": "line 5: = -> <> (eq)",
"status": "killed",
"hidden": "2/6",
"failed_tests": [
"DIFFERENT_FILMS",
"NO_TICKETS",
"REVENUE",
"TICKET_COUNT"
]
},
{
"object": "{{P}}I_FILM_REVENUE",
"mutant": "line 9: sum( -> max( (agg)",
"status": "killed",
"hidden": "5/6",
"failed_tests": [
"REVENUE"
]
},
{
"object": "{{P}}I_FILM_REVENUE",
"mutant": "line 11: = -> <> (eq)",
"status": "killed",
"hidden": "1/6",
"failed_tests": [
"CANCELLED_EXCLUDED",
"DIFFERENT_FILMS",
"ONE_ROW_PER_FILM",
"REVENUE",
"TICKET_COUNT"
]
},
{
"object": "{{P}}I_FILM_REVENUE",
"mutant": "line 11: 'A' -> 'Z' (lit)",
"status": "killed",
"hidden": "2/6",
"failed_tests": [
"DIFFERENT_FILMS",
"ONE_ROW_PER_FILM",
"REVENUE",
"TICKET_COUNT"
]
}
],
"valid": 5,
"killed": 5,
"kill_rate": 1.0,
"ok": true
}

View File

@@ -0,0 +1,13 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Film revenue'
define view entity {{P}}I_FILM_REVENUE
as select from {{p}}screen as s
inner join {{p}}ticket as t on t.show_id = s.show_id
{
key s.film as film,
count( * ) as ticket_count,
sum( t.price ) as revenue
}
where s.status = 'A'
group by
s.film

View File

@@ -0,0 +1,46 @@
CLASS {{p}}t_cinema_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 one_row_per_film FOR TESTING.
METHODS revenue FOR TESTING.
ENDCLASS.
CLASS {{p}}t_cinema_test IMPLEMENTATION.
METHOD class_setup.
go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_FILM_REVENUE' ).
ENDMETHOD.
METHOD class_teardown.
go_env->destroy( ).
ENDMETHOD.
METHOD setup.
DATA lt_screen TYPE STANDARD TABLE OF {{p}}screen WITH EMPTY KEY.
DATA lt_ticket TYPE STANDARD TABLE OF {{p}}ticket WITH EMPTY KEY.
go_env->clear_doubles( ).
lt_screen = VALUE #(
( show_id = 'S1' film = 'F1' show_date = '20250101' hall = 'H1' status = 'A' )
( show_id = 'S2' film = 'F1' show_date = '20250102' hall = 'H2' status = 'A' )
).
lt_ticket = VALUE #(
( show_id = 'S1' ticket_no = 1 price = '10.00' )
( show_id = 'S2' ticket_no = 1 price = '12.50' )
).
go_env->insert_test_data( lt_screen ).
go_env->insert_test_data( lt_ticket ).
ENDMETHOD.
METHOD one_row_per_film.
SELECT COUNT(*) FROM {{p}}i_film_revenue WHERE film = 'F1' INTO @DATA(lv_rows).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rows ).
ENDMETHOD.
METHOD revenue.
SELECT SINGLE revenue FROM {{p}}i_film_revenue WHERE film = 'F1' INTO @DATA(lv_revenue).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '22.50' ) act = CONV decfloat34( lv_revenue ) ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,15 @@
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Film revenue'
define view entity {{P}}I_FILM_REVENUE
as select from {{p}}screen as s
inner join {{p}}ticket as t on t.show_id = s.show_id
{
key s.show_id as show_id,
s.film as film,
count( * ) as ticket_count,
sum( t.price ) as revenue
}
where s.status = 'A'
group by
s.show_id,
s.film

View File

@@ -0,0 +1,13 @@
@EndUserText.label : 'Screening'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table {{p}}screen {
key client : abap.clnt not null;
key show_id : abap.char(10) not null;
film : abap.char(10);
show_date : abap.dats;
hall : abap.char(4);
status : abap.char(1);
}

View File

@@ -0,0 +1,28 @@
CLASS {{p}}seed_cinema DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS {{p}}seed_cinema IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DELETE FROM {{p}}screen.
DELETE FROM {{p}}ticket.
INSERT {{p}}screen FROM TABLE @( VALUE #(
( show_id = 'S1' film = 'F1' show_date = '20250101' hall = 'H1' status = 'A' )
( show_id = 'S2' film = 'F1' show_date = '20250102' hall = 'H2' status = 'A' )
( show_id = 'S3' film = 'F2' show_date = '20250101' hall = 'H1' status = 'A' )
( show_id = 'S4' film = 'F3' show_date = '20250103' hall = 'H1' status = 'C' )
( show_id = 'S5' film = 'F4' show_date = '20250104' hall = 'H1' status = 'A' )
) ).
INSERT {{p}}ticket FROM TABLE @( VALUE #(
( show_id = 'S1' ticket_no = 1 price = '10.00' )
( show_id = 'S1' ticket_no = 2 price = '10.00' )
( show_id = 'S2' ticket_no = 1 price = '12.50' )
( show_id = 'S3' ticket_no = 1 price = '8.00' )
( show_id = 'S4' ticket_no = 1 price = '9.00' )
) ).
out->write( 'Seed data inserted.' ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,11 @@
@EndUserText.label : 'Ticket'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table {{p}}ticket {
key client : abap.clnt not null;
key show_id : abap.char(10) not null;
key ticket_no : abap.int4 not null;
price : abap.dec(15,2);
}

View File

@@ -0,0 +1,38 @@
# 1. Goal
The CDS view entity {{P}}I_FILM_REVENUE shows the revenue of each film in a
cinema chain. Users report that a film appears several times in the view, once
for each screening. Fix the view so that it shows one row for each film.
# 2. Open questions
None.
# 3. Context
- Table {{P}}SCREEN (screening), package $TMP. Key: SHOW_ID (CHAR 10).
Fields: FILM (CHAR 10), SHOW_DATE (DATS), HALL (CHAR 4), STATUS (CHAR 1).
- Table {{P}}TICKET (ticket), package $TMP. Key: SHOW_ID (CHAR 10),
TICKET_NO (INT4). Fields: PRICE (DEC 15,2, price of one ticket).
- The CDS view entity {{P}}I_FILM_REVENUE is in package $TMP. It joins
{{P}}SCREEN and {{P}}TICKET.
# 4. Contract
- The CDS view entity {{P}}I_FILM_REVENUE stays in package $TMP.
- Elements, with these names: FILM (key), TICKET_COUNT, REVENUE.
- No authorization check (#NOT_REQUIRED).
# 5. Business rules
1. Show one row for each film that has at least one ticket. Do not show a film
without tickets.
2. TICKET_COUNT is the number of tickets sold for the film.
3. REVENUE is the sum of the prices of all tickets of the film.
4. All other behavior of the view stays the same.
# 6. Constraints
- Release target: SAP_BASIS 816.
- Out of scope: do not change {{P}}SCREEN, {{P}}TICKET and {{P}}SEED_CINEMA.
- Coding standards: Clean ABAP. No ATC priority 1 or 2 findings.
- Out of scope: do not create other objects.
# 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,78 @@
{
"id": "G1031",
"category": "I",
"object_type": "DDLS",
"difficulty": 2,
"release_target": "v816",
"expected_outcome": "implement",
"budget": {
"max_tool_calls": 60,
"max_activations": 15
},
"seed": [
{
"type": "TABL",
"name": "{{P}}SCREEN",
"file": "seed/screen.tabl.asabap",
"description": "Screening"
},
{
"type": "TABL",
"name": "{{P}}TICKET",
"file": "seed/ticket.tabl.asabap",
"description": "Ticket"
},
{
"type": "CLAS",
"name": "{{P}}SEED_CINEMA",
"file": "seed/seed_cinema.clas.abap",
"description": "Seed data",
"run": true
},
{
"type": "DDLS",
"name": "{{P}}I_FILM_REVENUE",
"file": "seed/i_film_revenue.ddls.asddls",
"description": "Faulty view"
}
],
"contract": [
{
"type": "DDLS",
"name": "{{P}}I_FILM_REVENUE",
"fields": [
"FILM",
"TICKET_COUNT",
"REVENUE"
]
}
],
"out_of_scope": [
"{{P}}SCREEN",
"{{P}}TICKET",
"{{P}}SEED_CINEMA"
],
"hidden_tests": [
{
"type": "CLAS",
"name": "{{P}}T_CINEMA_HIDDEN",
"file": "hidden/t_cinema_hidden.clas.abap",
"description": "Hidden tests"
}
],
"reference": [
{
"type": "DDLS",
"name": "{{P}}I_FILM_REVENUE",
"file": "reference/i_film_revenue.ddls.asddls",
"description": "Fixed view"
},
{
"type": "CLAS",
"name": "{{P}}T_CINEMA_TEST",
"file": "reference/t_cinema_test.clas.abap",
"description": "Own tests"
}
],
"craft_checks": []
}