Skip to content

Merge dev into test - #560

Merged
pedrocarvalhodcsa merged 41 commits into
testfrom
dev
Sep 22, 2026
Merged

pedrocarvalhodcsa merged 41 commits into
testfrom
dev

Conversation

@pedrocarvalhodcsa

Copy link
Copy Markdown
Collaborator

No description provided.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Align AN, endorsement chain, and eBL conformance suites

✨ Enhancement 🐞 Bug fix 🧪 Tests 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Aligns AN, endorsement-chain, and eBL scenarios with authoritative specifications.
• Adds direct TD amendments and notification-suppressed conformance execution.
• Automates Confluence specification synchronization and expands regression coverage.
Diagram

graph TD
  CF["Confluence"] --> SYNC["Sync Tool"] --> SPECS["Synced Specs"] --> BUILDERS["Scenario Builders"] --> ACTIONS["Conformance Actions"] --> PARTIES["Synthetic Parties"] --> ORCH["Orchestrator"]
  SPECS --> CHECKS["Payload Checks"] --> ACTIONS
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Split by standard and infrastructure concern
  • ➕ Allows focused ownership and review
  • ➕ Reduces regression bisecting scope
  • ➕ Separates generated documentation from runtime behavior
  • ➖ Requires coordinated sequencing for shared orchestration changes
  • ➖ Delays integration testing of the complete dev branch
2. Feature-flag new suites and orchestration
  • ➕ Enables incremental rollout and rollback
  • ➕ Keeps legacy suites available during validation
  • ➖ Adds temporary configuration and maintenance complexity
  • ➖ Could preserve behavior intentionally removed by the specifications

Recommendation: For future integrations, split changes into shared orchestration, AN, endorsement-chain, eBL, and Confluence-sync PRs, then use a final integration PR. For this already-integrated branch, retain the current specification-driven implementation but review and validate each concern independently, with special attention to notification suppression and direct-amendment state transitions.

Files changed (158) +10934 / -2725

Enhancement (47) +3354 / -809
ANComponentFactory.javaAdopt AN producer and consumer roles +35/-33

Adopt AN producer and consumer roles

• Renames role wiring and passes tested roles into role-specific scenario generation.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/ANComponentFactory.java

ANScenarioListBuilder.javaRebuild AN scenarios by role and capability +159/-58

Rebuild AN scenarios by role and capability

• Separates producer and consumer modules and adds required filters, optional filters, pagination, and report-only POST scenarios.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/ANScenarioListBuilder.java

AnStandard.javaExpose updated AN role endpoint metadata +23/-17

Expose updated AN role endpoint metadata

• Replaces publisher/subscriber terminology with producer/consumer across standard metadata.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/AnStandard.java

ANAction.javaTrack AN pagination state +36/-34

Track AN pagination state

• Stores cursors and page hashes so pagination checks can compare consecutive responses.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/ANAction.java

PublisherPostANAction.javaMake AN POST validation scenario-aware +50/-42

Make AN POST validation scenario-aware

• Supports explicit action titles and conditionally applies producer payload checks.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/PublisherPostANAction.java

PublisherPostANNotificationAction.javaAlign AN notification action with producer roles +25/-31

Align AN notification action with producer roles

• Accepts specification-defined titles and updates request, response, and schema checks to the renamed roles.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/PublisherPostANNotificationAction.java

SubscriberGetANAction.javaValidate AN filtering and pagination responses +91/-46

Validate AN filtering and pagination responses

• Adds cursor, response-limit, page uniqueness, and role-aware payload validation to GET scenarios.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/SubscriberGetANAction.java

SupplyScenarioParametersAction.javaAccept the complete AN filter set +111/-38

Accept the complete AN filter set

• Validates required and optional query parameters, scalar and array values, and pagination limits.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/SupplyScenarioParametersAction.java

ANQueryParameterChecks.javaValidate AN responses against query filters +133/-0

Validate AN responses against query filters

• Adds matching rules for references, equipment, ports, voyages, services, dates, and limits.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/checks/ANQueryParameterChecks.java

ANFilterParameter.javaDefine supported AN query filters +35/-0

Define supported AN query filters

• Introduces a canonical enum and lookup map for all tested query parameters.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/party/ANFilterParameter.java

ANPublisher.javaSupport AN filters and paginated responses +45/-33

Support AN filters and paginated responses

• Uses prompt-provided filters and emits deterministic second-page content with a next-page cursor.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/party/ANPublisher.java

ANRole.javaRename AN roles to producer and consumer +6/-6

Rename AN roles to producer and consumer

• Replaces publisher/subscriber role names and predicates with specification terminology.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/party/ANRole.java

ANSubscriber.javaSend all supplied AN query parameters +21/-22

Send all supplied AN query parameters

• Builds GET requests from dynamic filter values and includes pagination cursors when present.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/party/ANSubscriber.java

DynamicScenarioParameters.javaExpand AN dynamic scenario state +11/-5

Expand AN dynamic scenario state

• Stores supplied query parameters, cursor, scenario type, and page hashes.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/party/DynamicScenarioParameters.java

EblEndorsementChainStandard.javaAdopt provider and consumer terminology +16/-15

Adopt provider and consumer terminology

• Updates role metadata and endpoint ownership for the endorsement-chain standard.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/EblEndorsementChainStandard.java

EndorsementChainComponentFactory.javaBuild role-specific endorsement-chain components +69/-64

Build role-specific endorsement-chain components

• Creates provider and consumer parties, filters scenarios by tested role, and resolves major-version schemas.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/EndorsementChainComponentFactory.java

EndorsementChainScenarioListBuilder.javaSeparate provider and consumer END scenarios +98/-50

Separate provider and consumer END scenarios

• Builds interchangeable TDR and TDR-plus-sub-reference scenarios for each tested role.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/EndorsementChainScenarioListBuilder.java

ConsumerGetEndorsementChainAction.javaAdd consumer GET endorsement-chain action +102/-0

Add consumer GET endorsement-chain action

• Checks path, successful response, schema, headers, datasets, and standalone scenario parameters.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/action/ConsumerGetEndorsementChainAction.java

EndorsementChainAction.javaSupport standalone endorsement parameters +37/-24

Support standalone endorsement parameters

• Allows actions to use explicit scenario parameters without a preceding supply action.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/action/EndorsementChainAction.java

EndorsementChainConsumer.javaRename and update the END consumer party +40/-38

Rename and update the END consumer party

• Replaces the carrier party and sends path and query parameters for consumer GET actions.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/party/EndorsementChainConsumer.java

EndorsementChainRole.javaRename END carrier role to consumer +3/-3

Rename END carrier role to consumer

• Updates role names and predicates to provider/consumer terminology.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/party/EndorsementChainRole.java

EblComponentFactory.javaPass tested roles into eBL scenarios +1/-0

Pass tested roles into eBL scenarios

• Supplies report-role selection to the role-specific scenario builder.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblComponentFactory.java

EblScenarioListBuilder.javaRebuild SI and TD conformance suites +532/-116

Rebuild SI and TD conformance suites

• Creates role-specific required and optional modules, adds direct-amendment paths, and disables legacy combined suites.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilder.java

CarrierNotificationEblAction.javaAdd carrier notification action base +31/-0

Add carrier notification action base

• Centralizes carrier-originated notification expectations and completion behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierNotificationEblAction.java

CarrierSupplyPayloadAction.javaSupply SI, TD, and amendment payloads +188/-15

Supply SI, TD, and amendment payloads

• Generates transport documents, validates amendment pairs, and supports any-SI and any-TD amendment prompts.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java

EblAction.javaSupport amendment endpoints and notification roles +21/-3

Support amendment endpoints and notification roles

• Adds shared direct-amendment endpoint helpers and completion semantics.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/EblAction.java

ShipperGetShippingInstructionsSkippableAction.javaAdd optional SI retrieval action +48/-0

Add optional SI retrieval action

• Provides a skippable GET variant for optional report-only scenario paths.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/ShipperGetShippingInstructionsSkippableAction.java

ShipperNotificationEblAction.javaAdd shipper notification action base +30/-0

Add shipper notification action base

• Centralizes shipper-originated notification expectations and optional suppression behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/ShipperNotificationEblAction.java

Shipper_GetTransportDocumentAmendmentAction.javaAdd amended TD retrieval action +112/-0

Add amended TD retrieval action

• Validates the amendment endpoint, wrapper status, schema, primary TD status, and amended content.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/Shipper_GetTransportDocumentAmendmentAction.java

UC15_Shipper_CancelShippingInstructionsAction.javaAdd SI cancellation conformance action +102/-0

Add SI cancellation conformance action

• Checks the PATCH request, cancellation payload, response, and optional SI notification.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC15_Shipper_CancelShippingInstructionsAction.java

UC16_Carrier_DeclineShippingInstructionsAction.javaAdd SI decline conformance action +54/-0

Add SI decline conformance action

• Validates carrier notifications that move Shipping Instructions to declined.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC16_Carrier_DeclineShippingInstructionsAction.java

UC17_Shipper_SubmitTransportDocumentAmendmentAction.javaAdd direct TD amendment submission +172/-0

Add direct TD amendment submission

• Checks PUT amendment traffic, payload content, response, notification, and standalone reference initialization.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC17_Shipper_SubmitTransportDocumentAmendmentAction.java

UC18_Shipper_CancelTransportDocumentAmendmentAction.javaAdd direct TD amendment cancellation +88/-0

Add direct TD amendment cancellation

• Checks DELETE amendment traffic and the resulting cancellation notification.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC18_Shipper_CancelTransportDocumentAmendmentAction.java

UC19_Carrier_ProcessTransportDocumentAmendmentAction.javaAdd amendment confirmation and decline +64/-0

Add amendment confirmation and decline

• Validates carrier notifications for confirmed and declined direct amendments.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC19_Carrier_ProcessTransportDocumentAmendmentAction.java

UC1_Shipper_SubmitShippingInstructionsAction.javaSupport standalone role-specific UC1 +108/-11

Support standalone role-specific UC1

• Adds scenario type and title inputs while adopting shared shipper notification behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC1_Shipper_SubmitShippingInstructionsAction.java

UC6_Carrier_PublishDraftTransportDocumentAction.javaAlign UC6 draft publication titles +22/-2

Align UC6 draft publication titles

• Uses shared carrier notifications and optionally includes document scope in standalone titles.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC6_Carrier_PublishDraftTransportDocumentAction.java

CarrierTdNotificationPayloadRequestConformanceCheck.javaValidate amended TD notifications +32/-28

Validate amended TD notifications

• Extends carrier notification checks to amended document content and status fields.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/CarrierTdNotificationPayloadRequestConformanceCheck.java

EblDatasets.javaAdd current eBL validation datasets +28/-0

Add current eBL validation datasets

• Introduces requested certificate and updated workbook code sets.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblDatasets.java

ScenarioType.javaExpose specification-facing eBL scope names +9/-0

Expose specification-facing eBL scope names

• Adds standardized Sea Waybill, Straight B/L, and Negotiable B/L labels.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/ScenarioType.java

TransportDocumentStatusScenario.javaModel TD amendment status expectations +14/-0

Model TD amendment status expectations

• Defines reusable primary and amended status checks for UC17 through UC19.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/TransportDocumentStatusScenario.java

CarrierShippingInstructions.javaModel direct amendment lifecycle +115/-0

Model direct amendment lifecycle

• Adds amendment receive, cancel, confirm, decline, retrieval, persistence, and TD initialization transitions.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/models/CarrierShippingInstructions.java

EblCarrier.javaImplement carrier amendment endpoints +205/-13

Implement carrier amendment endpoints

• Handles amendment GET, PUT, and DELETE traffic, SI cancellation and decline, and amended notifications.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/party/EblCarrier.java

EblShipper.javaImplement shipper amendment actions +65/-0

Implement shipper amendment actions

• Submits and cancels direct amendments while preserving references and notification completion data.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/party/EblShipper.java

run-conformance-suite.tsRun suites with and without notifications +126/-49

Run suites with and without notifications

• Adds automatic notification-mode selection, atomic suppression on reset, dual reports, and mode-aware results.

scripts/src/scripts/run-conformance-suite.ts

EblDynamicScenarioParameters.javaTrack TD amendment status +2/-0

Track TD amendment status

• Extends shared eBL dynamic state with amended Transport Document information.

standards-commons/src/main/java/org/dcsa/conformance/standardscommons/party/EblDynamicScenarioParameters.java

sandbox.component.htmlRemove manual activity refresh button +0/-8

Remove manual activity refresh button

• Removes the button now superseded by internal sandbox polling.

webui/src/app/pages/sandbox/sandbox.component.html

sandbox.component.tsAuto-refresh internal sandbox activity +39/-5

Auto-refresh internal sandbox activity

• Polls every two seconds without clearing state, prevents overlapping requests, and refreshes after mutations.

webui/src/app/pages/sandbox/sandbox.component.ts

Bug fix (20) +1097 / -1693
ANChecks.javaSimplify and align AN payload validations +224/-985

Simplify and align AN payload validations

• Replaces bespoke validators with composable path rules covering common, free-time, and freighted requirements.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/checks/ANChecks.java

ANDatasets.javaCorrect AN validation datasets +4/-4

Correct AN validation datasets

• Adjusts enumerated values used by Arrival Notice content checks.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/checks/ANDatasets.java

ScenarioType.javaAlign AN scenario payload mappings +10/-10

Align AN scenario payload mappings

• Updates scenario labels and fixture mappings for basic, freighted, and free-time cases.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/checks/ScenarioType.java

ConformanceParty.javaComplete suppressed notifications safely +66/-12

Complete suppressed notifications safely

• Persists session IDs, adds DELETE support, and notifies the orchestrator when optional traffic is suppressed.

core/src/main/java/org/dcsa/conformance/core/party/ConformanceParty.java

ConformanceAction.javaHandle root action title complements +10/-6

Handle root action title complements

• Prevents invalid path slicing when prefixing an action path without a separator.

core/src/main/java/org/dcsa/conformance/core/scenario/ConformanceAction.java

SupplyScenarioParametersAction.javaAlign END parameter prompts and titles +41/-41

Align END parameter prompts and titles

• Uses exact required attributes and specification-defined action labels.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/action/SupplyScenarioParametersAction.java

EndChainDataSets.javaExpand endorsement-chain code datasets +23/-11

Expand endorsement-chain code datasets

• Adds current eBL platform and code-list-provider values.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/checks/EndChainDataSets.java

EndorsementChainChecks.javaCorrect END response and dataset checks +107/-113

Correct END response and dataset checks

• Requires non-empty arrays and improves action, platform, and represented-party provider validation.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/checks/EndorsementChainChecks.java

EndorsementChainFilterParameter.javaAlign endorsement filter parameter names +6/-5

Align endorsement filter parameter names

• Updates filter metadata and lookups to match the standard.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/party/EndorsementChainFilterParameter.java

EndorsementChainProvider.javaReturn request-matching endorsement chains +69/-53

Return request-matching endorsement chains

• Derives TDR and sub-reference values from incoming requests and selects version-compatible fixtures.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/party/EndorsementChainProvider.java

Shipper_GetShippingInstructionsAction.javaAlign SI GET action checks +7/-11

Align SI GET action checks

• Updates action construction and conformance expectations for the revised scenario paths.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/Shipper_GetShippingInstructionsAction.java

Shipper_GetTransportDocumentAction.javaSimplify TD retrieval checks +5/-25

Simplify TD retrieval checks

• Aligns TD GET titles and status validation with the revised required suites.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/Shipper_GetTransportDocumentAction.java

UC14_Carrier_ConfirmShippingInstructionsCompleteAction.javaAlign UC14 notification behavior +1/-4

Align UC14 notification behavior

• Migrates completion notifications to the carrier action base and revised expectations.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC14_Carrier_ConfirmShippingInstructionsCompleteAction.java

UC5_Shipper_CancelUpdateToShippingInstructionsAction.javaAlign UC5 cancellation checks +11/-4

Align UC5 cancellation checks

• Uses shared shipper notifications and accepts specification-defined successful responses.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC5_Shipper_CancelUpdateToShippingInstructionsAction.java

UC7_Shipper_ApproveDraftTransportDocumentAction.javaAlign UC7 approval notifications +9/-14

Align UC7 approval notifications

• Moves approval to shared shipper notification handling and revised completion checks.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC7_Shipper_ApproveDraftTransportDocumentAction.java

EblChecks.javaAlign SI and TD workbook validations +388/-379

Align SI and TD workbook validations

• Adds amendment, party, certificate, HBL, status, and dataset rules while removing obsolete validations.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblChecks.java

EblInputPayloadValidations.javaAlign supplied payload validation +8/-9

Align supplied payload validation

• Updates SI and TD input applicability for revised scenarios and amendment payloads.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblInputPayloadValidations.java

ConformanceOrchestrator.javaAdvance scenarios without optional traffic +70/-0

Advance scenarios without optional traffic

• Uses session-qualified completion messages to safely skip suppressed standalone and follow-up notifications.

sandbox/src/main/java/org/dcsa/conformance/sandbox/ConformanceOrchestrator.java

ConformanceSandbox.javaApply notification mode atomically on reset +37/-6

Apply notification mode atomically on reset

• Configures party session IDs and suppression before execution and disables legacy combined standards.

sandbox/src/main/java/org/dcsa/conformance/sandbox/ConformanceSandbox.java

BookingAndEblAction.javaAlign shared eBL action behavior +1/-1

Align shared eBL action behavior

• Adjusts shared action handling for revised dynamic scenario state.

standards-commons/src/main/java/org/dcsa/conformance/standardscommons/action/BookingAndEblAction.java

Refactor (14) +36 / -43
arrivalnotice-api-100-post-freetime-request.jsonClean the free-time AN fixture +0/-1

Clean the free-time AN fixture

• Removes an extraneous blank line from the JSON fixture.

arrival-notice/src/main/resources/standards/an/messages/arrivalnotice-api-100-post-freetime-request.json

arrivalnotice-api-100-post-freighted-request.jsonClean the freighted AN fixture +0/-1

Clean the freighted AN fixture

• Removes an extraneous blank line from the JSON fixture.

arrival-notice/src/main/resources/standards/an/messages/arrivalnotice-api-100-post-freighted-request.json

DynamicScenarioParameters.javaNormalize END dynamic parameter state +3/-3

Normalize END dynamic parameter state

• Aligns the dynamic reference record with the refactored actions.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/party/DynamicScenarioParameters.java

SuppliedScenarioParameters.javaNormalize END parameter serialization +17/-16

Normalize END parameter serialization

• Retains immutable enum-keyed conversion between JSON and scenario parameters.

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/party/SuppliedScenarioParameters.java

UC10_Carrier_ProcessSurrenderRequestForAmendmentAction.javaUse carrier notification base for UC10 +1/-2

Use carrier notification base for UC10

• Migrates UC10 to shared notification completion behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC10_Carrier_ProcessSurrenderRequestForAmendmentAction.java

UC11_Carrier_voidTDAndIssueAmendedTransportDocumentAction.javaAlign UC11 notification inheritance +1/-2

Align UC11 notification inheritance

• Updates UC11 to the common carrier notification model.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC11_Carrier_voidTDAndIssueAmendedTransportDocumentAction.java

UC12_Carrier_AwaitSurrenderRequestForDeliveryAction.javaUse carrier notification base for UC12 +1/-2

Use carrier notification base for UC12

• Migrates UC12 to shared notification completion behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC12_Carrier_AwaitSurrenderRequestForDeliveryAction.java

UC13_Carrier_ProcessSurrenderRequestForDeliveryAction.javaUse carrier notification base for UC13 +1/-2

Use carrier notification base for UC13

• Migrates UC13 to shared notification completion behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC13_Carrier_ProcessSurrenderRequestForDeliveryAction.java

UC2_Carrier_RequestUpdateToShippingInstructionsAction.javaUse carrier notification base for UC2 +1/-1

Use carrier notification base for UC2

• Migrates the update request action to shared notification behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC2_Carrier_RequestUpdateToShippingInstructionsAction.java

UC3ShipperSubmitUpdatedShippingInstructionsAction.javaUse shipper notification base for UC3 +3/-3

Use shipper notification base for UC3

• Migrates updated SI submission to shared notification behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC3ShipperSubmitUpdatedShippingInstructionsAction.java

UC4_Carrier_ProcessUpdateToShippingInstructionsAction.javaUse carrier notification base for UC4 +2/-2

Use carrier notification base for UC4

• Migrates update processing to shared notification behavior.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC4_Carrier_ProcessUpdateToShippingInstructionsAction.java

UC8_Carrier_IssueTransportDocumentAction.javaAlign UC8 issuance notifications +4/-5

Align UC8 issuance notifications

• Moves issuance to shared carrier notification handling.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC8_Carrier_IssueTransportDocumentAction.java

UC9_Carrier_AwaitSurrenderRequestForAmendmentAction.javaUse carrier notification base for UC9 +1/-2

Use carrier notification base for UC9

• Migrates surrender notification behavior to the common action base.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC9_Carrier_AwaitSurrenderRequestForAmendmentAction.java

UCX_Carrier_TDOnlyProcessOutOfBandUpdateOrAmendmentRequestDraftTransportDocumentAction.javaAlign legacy out-of-band action +1/-1

Align legacy out-of-band action

• Updates the dormant action for the shared notification hierarchy.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UCX_Carrier_TDOnlyProcessOutOfBandUpdateOrAmendmentRequestDraftTransportDocumentAction.java

Tests (29) +2575 / -105
ANScenarioListBuilderTest.javaTest role-specific AN scenario modules +87/-0

Test role-specific AN scenario modules

• Verifies required, optional, pagination, and all-in-one scenario construction.

arrival-notice/src/test/java/org/dcsa/conformance/standards/an/ANScenarioListBuilderTest.java

PublisherPostANActionTest.javaTest conditional AN POST validation +54/-0

Test conditional AN POST validation

• Covers producer payload checks and report-only consumer behavior.

arrival-notice/src/test/java/org/dcsa/conformance/standards/an/action/PublisherPostANActionTest.java

SubscriberGetANActionTest.javaTest AN GET pagination checks +114/-0

Test AN GET pagination checks

• Covers cursors, limits, page hashes, and scenario-dependent response checks.

arrival-notice/src/test/java/org/dcsa/conformance/standards/an/action/SubscriberGetANActionTest.java

SupplyScenarioParametersActionTest.javaTest AN filter input validation +89/-0

Test AN filter input validation

• Covers required parameters, optional values, arrays, invalid names, whitespace, and limits.

arrival-notice/src/test/java/org/dcsa/conformance/standards/an/action/SupplyScenarioParametersActionTest.java

ANChecksTest.javaReplace AN payload validation coverage +252/-0

Replace AN payload validation coverage

• Adds focused tests for composable common, freighted, and free-time validation rules.

arrival-notice/src/test/java/org/dcsa/conformance/standards/an/checks/ANChecksTest.java

ANQueryParameterChecksTest.javaTest AN response filter matching +73/-0

Test AN response filter matching

• Validates reference, voyage, equipment, location, and date-boundary matching behavior.

arrival-notice/src/test/java/org/dcsa/conformance/standards/an/checks/ANQueryParameterChecksTest.java

ConformancePartyTest.javaTest suppressed notification completion +146/-0

Test suppressed notification completion

• Covers action-bound and follow-up notification completion without counterpart traffic.

core/src/test/java/org/dcsa/conformance/core/party/ConformancePartyTest.java

EndorsementChainScenarioListBuilderTest.javaTest END role-specific scenario construction +170/-0

Test END role-specific scenario construction

• Verifies individual and all-in-one module names, titles, roles, and interchangeability.

ebl-endorsement-chain/src/test/java/org/dcsa/conformance/end/EndorsementChainScenarioListBuilderTest.java

ConsumerGetEndorsementChainActionTest.javaTest consumer endorsement GET checks +121/-0

Test consumer endorsement GET checks

• Covers standalone parameters, prompts, paths, successful statuses, and schema validation.

ebl-endorsement-chain/src/test/java/org/dcsa/conformance/end/action/ConsumerGetEndorsementChainActionTest.java

EndChainDataSetsTest.javaTest END dataset contents +46/-0

Test END dataset contents

• Locks down supported action, platform, and code-list-provider values.

ebl-endorsement-chain/src/test/java/org/dcsa/conformance/end/checks/EndChainDataSetsTest.java

EndorsementChainChecksTest.javaTest endorsement-chain payload checks +186/-0

Test endorsement-chain payload checks

• Covers response shape and nested action, platform, and identifying-code validation.

ebl-endorsement-chain/src/test/java/org/dcsa/conformance/end/checks/EndorsementChainChecksTest.java

EndorsementChainProviderTest.javaTest request-derived END responses +87/-0

Test request-derived END responses

• Verifies URL decoding and propagation of path and query references into response fixtures.

ebl-endorsement-chain/src/test/java/org/dcsa/conformance/end/party/EndorsementChainProviderTest.java

EblIssuanceContractTest.javaUpdate issuance contract expectation +1/-1

Update issuance contract expectation

• Adjusts the contract test for the synchronized standard configuration.

ebl-issuance/src/test/java/org/dcsa/conformance/standards/eblissuance/EblIssuanceContractTest.java

EblScenarioListBuilderTest.javaTest revised SI and TD suites +296/-0

Test revised SI and TD suites

• Locks down advertised suites, exact role modules, optional paths, labels, and standalone state initialization.

ebl/src/test/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilderTest.java

CarrierNotificationEblActionTest.javaTest carrier notification completion +43/-0

Test carrier notification completion

• Covers optional notification expectations and suppressed-traffic eligibility.

ebl/src/test/java/org/dcsa/conformance/standards/ebl/action/CarrierNotificationEblActionTest.java

CarrierSupplyPayloadActionTest.javaTest carrier payload supply modes +238/-0

Test carrier payload supply modes

• Covers SI, TD, amendment generation, schema validation, pair consistency, and scenario inference.

ebl/src/test/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadActionTest.java

ShipperNotificationEblActionTest.javaTest shipper notification completion +36/-0

Test shipper notification completion

• Covers optional shipper notification expectations and role eligibility.

ebl/src/test/java/org/dcsa/conformance/standards/ebl/action/ShipperNotificationEblActionTest.java

EblChecksTest.javaExpand eBL workbook validation tests +150/-58

Expand eBL workbook validation tests

• Adds coverage for revised SI, TD, party, dataset, and amendment rules.

ebl/src/test/java/org/dcsa/conformance/standards/ebl/checks/EblChecksTest.java

CarrierShippingInstructionsTest.javaTest direct amendment state transitions +88/-0

Test direct amendment state transitions

• Covers amendment receipt, cancellation, confirmation, decline, and invalid lifecycle transitions.

ebl/src/test/java/org/dcsa/conformance/standards/ebl/models/CarrierShippingInstructionsTest.java

ConformanceOrchestratorTest.javaTest session-aware traffic suppression +119/-0

Test session-aware traffic suppression

• Covers role authorization, stale sessions, standalone notifications, and follow-up notification omission.

sandbox/src/test/java/org/dcsa/conformance/sandbox/ConformanceOrchestratorTest.java

run-conformance-suite.test.tsTest dual notification-mode suite execution +90/-5

Test dual notification-mode suite execution

• Covers automatic mode selection, distinct reports, suppressed reset requests, and shared timeout handling.

scripts/src/scripts/run-conformance-suite.test.ts

AWSEnvironmentTest.javaUse renamed eBL TD suite in AWS tests +1/-1

Use renamed eBL TD suite in AWS tests

• Replaces the TD-only suite identifier with Conformance TD.

spring-boot/src/test/java/org/dcsa/conformance/frontend/AWSEnvironmentTest.java

SeleniumTestBase.javaAlign Selenium fixtures with active suites +21/-21

Align Selenium fixtures with active suites

• Updates standard and suite selection helpers after disabling legacy entries.

spring-boot/src/test/java/org/dcsa/conformance/frontend/SeleniumTestBase.java

SeleniumWithNotificationTest.javaUpdate notification-enabled UI scenarios +3/-4

Update notification-enabled UI scenarios

• Uses the renamed role-specific conformance suites and removes disabled cases.

spring-boot/src/test/java/org/dcsa/conformance/frontend/SeleniumWithNotificationTest.java

SeleniumWithoutNotificationsTest.javaUpdate notification-suppressed UI scenarios +1/-1

Update notification-suppressed UI scenarios

• Uses active suite identifiers for no-notification execution.

spring-boot/src/test/java/org/dcsa/conformance/frontend/SeleniumWithoutNotificationsTest.java

ManualScenarioWithNotificationsTest.javaAlign manual notification scenarios +2/-3

Align manual notification scenarios

• Updates manual test selections for the active suites.

spring-boot/src/test/java/org/dcsa/conformance/manual/ManualScenarioWithNotificationsTest.java

ManualScenarioWithoutNotificationsTest.javaAlign manual suppressed scenarios +5/-1

Align manual suppressed scenarios

• Expands and updates manual execution without optional notifications.

spring-boot/src/test/java/org/dcsa/conformance/manual/ManualScenarioWithoutNotificationsTest.java

ConformanceApplicationTest.javaVerify only active sandboxes are exposed +5/-6

Verify only active sandboxes are exposed

• Updates homepage expectations for renamed eBL suites and disabled standards.

spring-boot/src/test/java/org/dcsa/conformance/springboot/ConformanceApplicationTest.java

sandbox.component.spec.tsTest internal sandbox auto-refresh +51/-4

Test internal sandbox auto-refresh

• Covers periodic in-place refresh, timer cleanup, and immediate refresh after reset.

webui/src/app/pages/sandbox/sandbox.component.spec.ts

Documentation (39) +2982 / -63
AGENTS.mdDocument specification-driven development conventions +39/-6

Document specification-driven development conventions

• Makes synced specifications and workbooks authoritative and records conventions for scenario labels, disabled suites, notification suppression, and UI polling.

AGENTS.md

README.mdLink synchronized specifications and rename eBL suite +10/-2

Link synchronized specifications and rename eBL suite

• Adds documentation entry points and replaces the legacy TD-only suite terminology.

README.md

prompt-consumer-get-with-queryparams.mdClarify filtered END retrieval instructions +2/-1

Clarify filtered END retrieval instructions

• Updates the consumer prompt for path and query parameter usage.

ebl-endorsement-chain/src/main/resources/standards/end/instructions/prompt-consumer-get-with-queryparams.md

prompt-consumer-get.mdClarify END retrieval instructions +2/-1

Clarify END retrieval instructions

• Updates the basic consumer GET prompt to match the renamed role.

ebl-endorsement-chain/src/main/resources/standards/end/instructions/prompt-consumer-get.md

prompt-provider-ssp.mdClarify END parameter supply instructions +2/-2

Clarify END parameter supply instructions

• Aligns the provider prompt with required scenario parameters.

ebl-endorsement-chain/src/main/resources/standards/end/instructions/prompt-provider-ssp.md

prompt-carrier-supply-csp-any-td-amendment.mdAdd carrier TD amendment supply prompt +4/-0

Add carrier TD amendment supply prompt

• Documents the original and amended Transport Document payload expected from carriers.

[Comment truncated to fit github's 65,536-char limit.]

@qodo-code-review

qodo-code-review Bot commented Sep 7, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (7) 📘 Rule violations (1) 📜 Skill insights (0)

Grey Divider


Action required

1. Filtered results can be unrelated 🐞 Bug ≡ Correctness
Description
SubscriberGetANAction.createCheck() reads the supplied query parameters but never attaches the
newly added ANQueryParameterChecks.matchingResponse() validator. Any non-empty, schema-valid
response can therefore pass GET scenarios even when every returned arrival notice ignores the
requested transport document, equipment, vessel, port, or date filters.
Code

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/SubscriberGetANAction.java[R111-114]

+        if (getDspSupplier().get().scenarioType() != null) {
+          checks.add(ANChecks.getANGetResponseChecks(getMatchedExchangeUuid(), expectedApiVersion, getDspSupplier()));
+        } else {
+          checks.add(
Evidence
The new matching validator consumes all non-limit supplied parameters and fails when no response
notice matches, but the GET action adds only limit, pagination, and generic payload checks.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/checks/ANQueryParameterChecks.java[38-67]
arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/SubscriberGetANAction.java[101-120]
arrival-notice/src/main/java/org/dcsa/conformance/standards/an/ANScenarioListBuilder.java[50-80]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Arrival Notice GET checks do not verify that returned notices match the supplied filtering parameters.

## Issue Context
`ANQueryParameterChecks.matchingResponse()` already implements the required matching behavior but has no production caller.

## Fix Focus Areas
- arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/SubscriberGetANAction.java[101-120]
- arrival-notice/src/main/java/org/dcsa/conformance/standards/an/checks/ANQueryParameterChecks.java[38-61]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Consumers pass with the wrong filter 📘 Rule violation ≡ Correctness
Description
ConsumerGetEndorsementChainAction.createCheck builds checks for the path, response, schema,
headers, and payload but creates no QueryParamCheck for supplied query parameters such as
transportDocumentSubReference or carrier code. In consumer scenarios including the new `TDR +
TDSR` case, omitting or changing those request parameters reaches no assertion, so the consumer can
still receive a conformant result.
Code

ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/action/ConsumerGetEndorsementChainAction.java[R67-70]

+          Stream.of(
+            new UrlPathCheck(
+              EndorsementChainRole::isConsumer,
+              getMatchedExchangeUuid(),
Evidence
The authoritative scenarios include a consumer case that supplies both transportDocumentReference
and a fixed transportDocumentSubReference, and other consumer scenarios can supply a carrier code.
However, the action's complete check stream validates only /endorsement-chains/{reference},
headers, response, schema, and payload; no subcheck compares the request query string with the
supplied scenario parameters, despite compliance rule 5 requiring the implementation and tests to
match the authoritative scenarios.

AGENTS.md: Implement Standard Behavior Exactly as Defined by Authoritative Specifications
specifications/confluence-sync/ebl-endorsement-chain/3.0.3/conformance-scenarios.md[86-93]
ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/action/ConsumerGetEndorsementChainAction.java[61-90]
ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/EndorsementChainScenarioListBuilder.java[92-106]
ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/EndorsementChainScenarioListBuilder.java[67-78]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The consumer endorsement-chain check does not validate supplied query parameters, allowing scenarios such as `TDR + TDSR` to pass when `transportDocumentSubReference` is missing or incorrect and leaving other supplied parameters such as carrier code unchecked.

## Issue Context
The authoritative consumer scenario retrieves an endorsement chain using both the transport document reference and sub-reference. The action has access to all supplied parameters but currently uses only the transport document reference for URL-path validation; build query-parameter conformance checks from the supplied scenario parameters, excluding the path parameter, include them in the consumer GET checks, and add regression coverage for missing and incorrect values.

## Fix Focus Areas
- ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/action/ConsumerGetEndorsementChainAction.java[61-90]
- ebl-endorsement-chain/src/main/java/org/dcsa/conformance/end/EndorsementChainScenarioListBuilder.java[92-106]
- ebl-endorsement-chain/src/test/java/org/dcsa/conformance/end/action/ConsumerGetEndorsementChainActionTest.java[64-119]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Unknown documents accept amendments 🐞 Bug ≡ Correctness
Description
handlePutTransportDocumentAmendment() initializes and persists a new transport-document model when
the URL reference has no existing mapping. A PUT amendment for an unknown document is therefore
accepted with status 202 and uses the amendment payload itself to establish the primary document
state instead of returning not found.
Code

ebl/src/main/java/org/dcsa/conformance/standards/ebl/party/EblCarrier.java[R662-665]

+    if (si == null) {
+      si = CarrierShippingInstructions.initializeFromTransportDocument(amendment.deepCopy(), apiVersion);
+      tdrToSir.put(documentReference, si.getShippingInstructionsReference());
+    }
Evidence
The loader returns null for an unknown reference, after which the handler initializes state from the
amendment, adds the mapping, and returns 202; initialization stores the submitted payload as the
primary transport document.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/party/EblCarrier.java[642-671]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/models/CarrierShippingInstructions.java[525-543]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/models/CarrierShippingInstructions.java[820-837]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The amendment endpoint creates document state when the referenced transport document does not exist.

## Issue Context
Only an existing transport document should receive an amendment; preserve standalone setup through explicit scenario initialization rather than the endpoint.

## Fix Focus Areas
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/party/EblCarrier.java[642-671]
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/models/CarrierShippingInstructions.java[525-543]
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/models/CarrierShippingInstructions.java[820-837]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View high (6)
4. Empty notifications pass conformance 🐞 Bug ≡ Correctness
Description
PublisherPostANNotificationAction.createCheck() now performs only URL, status, header, and schema
checks after removing the functional notification checks. Because the notification schema does not
require the outer arrivalNoticeNotifications property or a non-empty array, an empty object or
empty notification list can pass these scenarios.
Code

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/PublisherPostANNotificationAction.java[R51-55]

+          new JsonSchemaCheck(
+            ANRole::isProducer,
+            getMatchedExchangeUuid(),
+            HttpMessageType.REQUEST,
+            requestSchemaValidator));
Evidence
The action ends its check stream after JSON schema validation, while the request schema declares the
array only as an optional property and provides no minimum item count.

arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/PublisherPostANNotificationAction.java[38-55]
arrival-notice/src/main/resources/standards/an/schemas/an-v1.0.0-openapi.yaml[2032-2040]
arrival-notice/src/main/resources/standards/an/schemas/an-v1.0.0-openapi.yaml[696-700]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Arrival Notice notification scenarios accept payloads containing no notifications.

## Issue Context
Schema validation alone does not require the notification array or enforce that it is non-empty; the removed functional checks previously covered this behavior.

## Fix Focus Areas
- arrival-notice/src/main/java/org/dcsa/conformance/standards/an/action/PublisherPostANNotificationAction.java[38-55]
- arrival-notice/src/main/java/org/dcsa/conformance/standards/an/checks/ANChecks.java[120-148]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. A compromised source can overwrite repository files 🐞 Bug ⛨ Security
Description
_download_excels joins the Confluence attachment title directly onto out_dir and writes the
downloaded bytes without normalizing or containing the resulting path. An attachment title
containing traversal segments or an absolute path can escape the documentation output directory when
the scheduled job processes it.
Code

scripts/src/confluence/sync-confluence.py[R368-369]

+            file_path = out_dir / name
+            file_path.write_bytes(data)
Evidence
Attachment titles originate from the remote attachment metadata and are filtered only by filename
extension. The selected title is then used as the final path component for a write operation with no
sanitization or resolved-path containment check.

scripts/src/confluence/sync-confluence.py[329-344]
scripts/src/confluence/sync-confluence.py[360-371]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Confluence attachment titles are used as filesystem paths without ensuring that they remain inside the configured Excel output directory.

## Issue Context
Reject path separators and traversal in attachment names, or resolve the candidate path and verify it is contained by the resolved output directory before writing.

## Fix Focus Areas
- scripts/src/confluence/sync-confluence.py[329-369]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


6. Sync updates bypass the pull request 🐞 Bug ☼ Reliability
Description
The workflow commits and runs git push on the checked-out main branch before invoking
create-pull-request, leaving no generated working-tree changes for its configured sync branch.
When direct pushes are allowed, scheduled runs update main directly and the review step has
nothing to publish; when branch protection blocks the push, the workflow fails before reaching
pull-request creation.
Code

.github/workflows/confluence-sync.yml[R77-79]

+          - Timestamp: $(date -u +'%Y-%m-%dT%H:%M:%SZ')
+          - Workflow: Confluence Sync"
+          git push
Evidence
The change-detection step identifies an uncommitted diff, but the subsequent step at lines 70–79
commits and pushes that diff from the triggering branch before create-pull-request is invoked
under the same change condition. Because the pull-request action runs only after those changes have
already been committed and pushed, it receives a clean working tree rather than the uncommitted
generated files it is configured to commit to a separate sync branch.

.github/workflows/confluence-sync.yml[27-37]
.github/workflows/confluence-sync.yml[70-86]
.github/workflows/confluence-sync.yml[61-79]
.github/workflows/confluence-sync.yml[81-107]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The synchronization workflow commits and pushes generated documentation directly from the checked-out `main` branch before invoking `create-pull-request`, leaving the action no working-tree changes to commit to its configured sync branch and preventing the intended reviewable pull request flow.

## Issue Context
Choose one delivery mechanism. Prefer leaving the generated changes in the working tree and allowing `create-pull-request` to create, commit, and push its dedicated branch; alternatively, explicitly create and push the configured feature branch before opening the pull request rather than pushing directly to `main`.

## Fix Focus Areas
- .github/workflows/confluence-sync.yml[61-107]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


7. Duplicate document parties pass checks 🐞 Bug ≡ Correctness
Description
validateEblContent() no longer adds DOCUMENT_PARTY_FUNCTIONS_MUST_BE_UNIQUE when validating
Shipping Instructions. Carrier-supplied instructions can consequently contain repeated entries for
the same party function without producing a content-validation error.
Code

ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblInputPayloadValidations.java[R26-28]

+      contentChecks = new ArrayList<>(EblChecks.STATIC_SI_CHECKS);
+      contentChecks.addAll(
+          EblChecks.generateScenarioRelatedChecks(scenarioType, false, dsp.isCladInSI()));
Evidence
The uniqueness validator explicitly checks documentParties.other.partyFunction, but the new SI
branch uses only STATIC_SI_CHECKS and scenario checks; that static list does not contain the
validator.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblInputPayloadValidations.java[20-29]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblChecks.java[947-951]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblChecks.java[1559-1614]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java[235-242]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Shipping Instructions content validation no longer rejects duplicate document-party functions.

## Issue Context
The uniqueness check exists but is absent from `STATIC_SI_CHECKS` and is no longer added by `validateEblContent()`.

## Fix Focus Areas
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblInputPayloadValidations.java[20-29]
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblChecks.java[947-951]
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/checks/EblChecks.java[1559-1614]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


8. Valid amendment submissions fail validation ⊘ Outdated 🐞 Bug ≡ Correctness
Description
uc17ShipperSubmitTransportDocumentAmendment passes the ordinary transport-document schema as
requestSchemaValidator to the amendment submission action. That action applies this validator to
the amendment PUT request, even though the builder defines and uses a separate amendment schema for
amendment retrieval.
Code

ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilder.java[1109]

+                resolveMessageSchemaValidator(EBL_API, GET_TD_SCHEMA_NAME),
Evidence
The UC17 constructor receives GET_TD_SCHEMA_NAME, and the action uses that constructor argument
for the amendment endpoint request schema check. The same builder declares a distinct
TransportDocumentAmend schema and uses it elsewhere for amendment operations.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilder.java[47-57]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilder.java[858-870]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilder.java[1097-1113]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC17_Shipper_SubmitTransportDocumentAmendmentAction.java[130-159]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
UC17 validates a transport-document amendment submission against the ordinary TransportDocument schema instead of TransportDocumentAmend.

## Issue Context
The action applies its first schema-validator argument to the shipper's amendment PUT request. A dedicated amendment schema constant already exists and is used by the amendment GET flow.

## Fix Focus Areas
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilder.java[1097-1113]
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/UC17_Shipper_SubmitTransportDocumentAmendmentAction.java[130-159]
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilder.java[47-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


9. Failed syncs delete saved spreadsheet files ✓ Resolved 🐞 Bug ☼ Reliability
Description
SyncManager.sync calls _cleanup_excel_outputs after _sync_page returns False, while
list_attachments() converts attachment API failures into empty or partial results and the
expected-file set records only successfully downloaded files. A transient page-fetch,
attachment-listing, or attachment-download failure therefore leaves the affected standard/version
bucket with an incomplete expected inventory, and cleanup unlinks prior synchronized spreadsheets
missing from that run-local set.
Code

scripts/src/confluence/sync-confluence.py[R245-248]

+            expected = self.expected_excel_by_bucket.get((standard, version), set())
+            for existing in out_dir.glob("*.xls*"):
+                if existing.name not in expected:
+                    existing.unlink(missing_ok=True)
Evidence
The cited code shows that request failures can become empty or partial attachment lists,
_download_excels() records expected files only after successful downloads and writes, and
_sync_page reports page-fetch failure by returning False. sync does not use that aggregate
failure state to gate cleanup, so _cleanup_excel_outputs treats the incomplete or empty run-local
expected set as authoritative and unlinks every existing spreadsheet absent from it.

scripts/src/confluence/sync-confluence.py[218-267]
scripts/src/confluence/sync-confluence.py[234-251]
scripts/src/confluence/sync-confluence.py[360-371]
scripts/src/confluence/sync-confluence.py[138-154]
scripts/src/confluence/sync-confluence.py[218-251]
scripts/src/confluence/sync-confluence.py[324-347]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A partial Confluence sync can remove previously synchronized spreadsheets when a page fetch, attachment listing, or attachment download fails.

## Issue Context
Distinguish attachment-listing failure from a valid empty result, propagate page and attachment processing failures per standard/version bucket, and run destructive cleanup only for buckets whose complete expected spreadsheet inventory was fetched and written successfully.

## Fix Focus Areas
- scripts/src/confluence/sync-confluence.py[138-154]
- scripts/src/confluence/sync-confluence.py[218-267]
- scripts/src/confluence/sync-confluence.py[324-371]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

10. Valid shipping instructions are rejected 🐞 Bug ≡ Correctness
Description
CarrierSupplyPayloadAction tells operators that any Shipping Instructions type is accepted when
allowAnySiType is enabled, but inputScenarioType() still returns the action's fixed scenario
type. The optional carrier suite enables this mode with the straight-bill scenario, so valid
sea-waybill or negotiable-bill input is validated against the wrong scope and rejected.
Code

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java[R162-165]

+    var scenarioTypeRule =
+        allowAnySiType && !isTd
+            ? "You may provide any SI type (Sea Waybill, Straight B/L, or Negotiable B/L)."
+            : "Make sure the ebl type remains %s.".formatted(scenarioType.tdScopeName());
Evidence
The prompt advertises any SI type, but validation passes inputScenarioType to the content checks
and that method returns the fixed scenario whenever amendment mode is disabled; the optional suite
enables this flag with REGULAR_STRAIGHT_BL.

ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java[155-165]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java[235-241]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java[305-318]
ebl/src/main/java/org/dcsa/conformance/standards/ebl/EblScenarioListBuilder.java[143-146]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The any-type Shipping Instructions option changes only the prompt, not validation behavior.

## Issue Context
When `allowAnySiType` is true, infer the scenario type from the supplied SI before running scenario-specific content validation.

## Fix Focus Areas
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java[155-165]
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java[220-241]
- ebl/src/main/java/org/dcsa/conformance/standards/ebl/action/CarrierSupplyPayloadAction.java[305-318]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
Review mode: 🧠 Deep: This is a highly dense cross-cutting merge with 168 files and 425 independent hunks spanning core behavior, multiple standards, validation logic, orchestration, workflows, and tooling, making multiple subtle independent defects plausible.

Grey Divider

Tip of the day
💡 Did you know, you can route each action level your way: inline, summary, both, or drop

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread .github/workflows/confluence-sync.yml
Comment thread scripts/src/confluence/sync-confluence.py
Comment thread scripts/src/confluence/sync-confluence.py Outdated
@gj0dcsa
gj0dcsa deployed to conformance-dev September 15, 2026 03:52 — with GitHub Actions Active
@gj0dcsa
gj0dcsa deployed to conformance-dev September 15, 2026 04:38 — with GitHub Actions Active
@gj0dcsa
gj0dcsa deployed to conformance-dev September 15, 2026 05:25 — with GitHub Actions Active
@pedrocarvalhodcsa
pedrocarvalhodcsa requested review from palatsangeetha and removed request for palatsangeetha September 22, 2026 12:47
@pedrocarvalhodcsa
pedrocarvalhodcsa merged commit 0bf337a into test Sep 22, 2026
4 checks passed
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.

3 participants