Skip to content

feat(billing): CreateInvoicePendingLines charges support#4508

Merged
turip merged 2 commits into
mainfrom
feat/createinvoicependinglines-charges-support
Jun 17, 2026
Merged

feat(billing): CreateInvoicePendingLines charges support#4508
turip merged 2 commits into
mainfrom
feat/createinvoicependinglines-charges-support

Conversation

@mark-vass-konghq

@mark-vass-konghq mark-vass-konghq commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Support for creating pending invoice lines backed by charges (usage and flat-fee) and conditional routing to the charge-backed flow based on credits configuration and a feature flag.
    • HTTP handler wired to accept charge, credits and feature-gate inputs to enable this routing.
  • Reliability

    • Transaction-safe charge creation with rollback, stronger validation, deterministic ordering of results, and clearer error wrapping for pending-line creation.
  • Tests

    • End-to-end and handler tests covering success, rollback, validation, feature-flag behavior, and routing decisions.

@mark-vass-konghq mark-vass-konghq self-assigned this Jun 11, 2026
@mark-vass-konghq mark-vass-konghq requested a review from a team as a code owner June 11, 2026 10:19
@mark-vass-konghq mark-vass-konghq added release-note/feature Release note: Exciting New Features area/billing labels Jun 11, 2026
@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds ChargeService.CreatePendingInvoiceLines and a charge-backed pending-invoice-line implementation (validation, intent mapping, transactional charge creation, optional invoice-now, reordering), integrates pending-line results into Create(), wires a ChargeService into the HTTP handler, and conditionally routes pending-line requests based on credits and feature flags.

Changes

Charge-backed pending invoice lines

Layer / File(s) Summary
Service interface and type contracts
openmeter/billing/charges/service.go
Adds CreatePendingInvoiceLines to ChargeService and defines type aliases for the input/result types.
Create() refactoring for pending line integration
openmeter/billing/charges/service/create.go
Refactors Create() to wrap internal s.create, moves invoice-now and nil checks to the wrapper, carries pendingLineResults via chargesWithInvoiceNowActions, introduces createGatheringLinesResult, preallocates outputs, and tightens error/bounds checking when correlating pending-line results.
CreatePendingInvoiceLines service implementation
openmeter/billing/charges/service/pendinglines.go
Implements CreatePendingInvoiceLines with input normalization/validation (rejects charge IDs/engine overrides/subscriptions, requires manual management), maps gathering lines to charge intents (flat-fee or usage) with discount/tax translation, creates charges inside a transaction, optionally triggers invoice-now for bypassed lines, auto-advances charges, orders/validates returned pending-line results, and returns the ordered response.
Service-level tests
openmeter/billing/charges/service/pendinglines_test.go
Adds tests for successful charge-backed gathering-line creation, rollback on creation failure, enforcement of manual-only input policy, and rollback on partial/invalid results.
HTTP handler dependency injection
openmeter/billing/httpdriver/handler.go
Extends the handler struct and New(...) constructor to accept ChargeService, CreditsConfiguration, and FeatureGate, storing them on the handler instance.
HTTP route conditional delegation
openmeter/billing/httpdriver/invoiceline.go
CreatePendingLine now delegates via h.createPendingInvoiceLines, which selects between h.chargeService.CreatePendingInvoiceLines and h.service.CreatePendingInvoiceLines based on chargeService presence, credits flags, and feature-gate evaluation.
HTTP routing delegation tests
openmeter/billing/httpdriver/pendinglines_test.go
Adds table-driven tests covering combinations of credits settings, charge service presence, and feature-flag evaluation including error propagation.
Server wiring and test stubs
openmeter/server/router/router.go, openmeter/server/server_test.go
Wires ChargeService, Credits, and FeatureGate through the server router into the billing handler and adds a no-op CreatePendingInvoiceLines stub to the NoopChargeService test double.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • turip
  • tothandras
  • chrisgacsal
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main feature being added: charge-backed support for creating pending invoice lines, which is the core purpose of this changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/createinvoicependinglines-charges-support

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
openmeter/billing/charges/service/pendinglines_test.go (1)

181-240: ⚡ Quick win

Add assertions for the remaining input policy branches.

Nice coverage overall. One small gap: this test block doesn’t yet assert rejection for line.ChargeID != nil and line.Engine != "" (except the invoice-engine normalization case). Adding those two cases would lock down all validation rules in validateChargePendingInvoiceLinesInput.

As per coding guidelines, “Make sure the tests are comprehensive and cover the changes.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@openmeter/billing/charges/service/pendinglines_test.go` around lines 181 -
240, The test TestCreatePendingInvoiceLinesRejectsNonManualInput currently
checks managed-by and subscription branches but misses the branches where a line
has ChargeID set and where Engine is non-empty; add two sub-cases that build a
billing.GatheringLine (using billing.NewFlatFeeGatheringLine) with (1) ChargeID
non-nil and (2) Engine set to a non-empty string, then call
s.Charges.CreatePendingInvoiceLines with those lines
(CreatePendingInvoiceLinesInput) and assert an error is returned and the error
message contains the expected validation text (matching the messages produced by
validateChargePendingInvoiceLinesInput for "charge id is not allowed" and
"engine is not allowed" or equivalent).

Source: Coding guidelines

openmeter/billing/httpdriver/invoiceline.go (1)

134-169: 💤 Low value

Consider adding doc comments for the decision logic.

The conditional routing logic is solid and handles all the edge cases nicely! The fallback to false when feature evaluation fails is a safe default.

Since the decision involves multiple config flags and feature gating, a brief doc comment on shouldCreatePendingLinesWithCharges explaining the precedence (credits config → feature gate presence → feature flag evaluation) would help future maintainers quickly understand the flow.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@openmeter/billing/httpdriver/invoiceline.go` around lines 134 - 169, Add a
short doc comment above shouldCreatePendingLinesWithCharges describing the
decision precedence: check for presence of h.chargeService first, then
h.credits.Enabled and h.credits.EnableCreditThenInvoice, then presence of
h.featureGate, then empty h.credits.FeatureFlag, and finally the feature flag
evaluation via h.featureGate.EvaluateBool; mention that failures default to
false and that createPendingInvoiceLines delegates to chargeService when this
returns true to clarify overall routing.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@openmeter/billing/charges/service/create.go`:
- Around line 439-446: The current loop uses index-based correlation between
result.Lines and lines which can mis-map when ordering or membership differs;
instead build a lookup map from the input slice (e.g., for each entry in lines
create map[bypassLineID] = true using the input's LineID and
BypassCollectionAlignment flag) and then iterate result.Lines and check the map
by result line.ID before appending to out.collectionAlignmentBypassedLines (use
invoicePendingLinesInput with CustomerID and LineID). This replaces the idx <
len(lines) check and ensures mapping by line ID rather than by index.

---

Nitpick comments:
In `@openmeter/billing/charges/service/pendinglines_test.go`:
- Around line 181-240: The test
TestCreatePendingInvoiceLinesRejectsNonManualInput currently checks managed-by
and subscription branches but misses the branches where a line has ChargeID set
and where Engine is non-empty; add two sub-cases that build a
billing.GatheringLine (using billing.NewFlatFeeGatheringLine) with (1) ChargeID
non-nil and (2) Engine set to a non-empty string, then call
s.Charges.CreatePendingInvoiceLines with those lines
(CreatePendingInvoiceLinesInput) and assert an error is returned and the error
message contains the expected validation text (matching the messages produced by
validateChargePendingInvoiceLinesInput for "charge id is not allowed" and
"engine is not allowed" or equivalent).

In `@openmeter/billing/httpdriver/invoiceline.go`:
- Around line 134-169: Add a short doc comment above
shouldCreatePendingLinesWithCharges describing the decision precedence: check
for presence of h.chargeService first, then h.credits.Enabled and
h.credits.EnableCreditThenInvoice, then presence of h.featureGate, then empty
h.credits.FeatureFlag, and finally the feature flag evaluation via
h.featureGate.EvaluateBool; mention that failures default to false and that
createPendingInvoiceLines delegates to chargeService when this returns true to
clarify overall routing.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 929631ed-517f-4b47-a220-edc85efe5396

📥 Commits

Reviewing files that changed from the base of the PR and between b1a9a4b and d2c8a57.

📒 Files selected for processing (9)
  • openmeter/billing/charges/service.go
  • openmeter/billing/charges/service/create.go
  • openmeter/billing/charges/service/pendinglines.go
  • openmeter/billing/charges/service/pendinglines_test.go
  • openmeter/billing/httpdriver/handler.go
  • openmeter/billing/httpdriver/invoiceline.go
  • openmeter/billing/httpdriver/pendinglines_test.go
  • openmeter/server/router/router.go
  • openmeter/server/server_test.go

Comment thread openmeter/billing/charges/service/create.go Outdated
@tothandras tothandras force-pushed the feat/createinvoicependinglines-charges-support branch from d2c8a57 to fe894f7 Compare June 11, 2026 20:13

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
openmeter/billing/httpdriver/pendinglines_test.go (1)

26-135: ⚡ Quick win

Consider adding a test case for non-nil featureGate with empty FeatureFlag.

Your test suite covers most branches, but there's one path in shouldCreatePendingLinesWithCharges where featureGate is non-nil yet FeatureFlag is an empty string—this should return true without calling the gate. Adding this case would give you complete branch coverage of the routing logic.

🧪 Suggested test case
 		{
+			name: "non-nil feature gate with empty flag uses charges",
+			handler: handler{
+				chargeService: nonNilChargeService{},
+				credits: config.CreditsConfiguration{
+					Enabled:                 true,
+					EnableCreditThenInvoice: true,
+					FeatureFlag:             "",
+				},
+				featureGate: staticFeatureGate{},
+			},
+			expected: true,
+		},
+		{
 			name: "feature gate error is returned",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@openmeter/billing/httpdriver/pendinglines_test.go` around lines 26 - 135, Add
a test case in TestShouldCreatePendingLinesWithCharges that covers the branch
where handler.featureGate is non-nil but credits.FeatureFlag is an empty string:
create a handler with chargeService nonNilChargeService, credits.FeatureFlag set
to "" (and Enabled/EnableCreditThenInvoice true), featureGate set to a non-nil
staticFeatureGate (either enabled or disabled), and assert expected == true and
no error; this verifies shouldCreatePendingLinesWithCharges returns true without
invoking the gate.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@openmeter/billing/httpdriver/pendinglines_test.go`:
- Around line 26-135: Add a test case in TestShouldCreatePendingLinesWithCharges
that covers the branch where handler.featureGate is non-nil but
credits.FeatureFlag is an empty string: create a handler with chargeService
nonNilChargeService, credits.FeatureFlag set to "" (and
Enabled/EnableCreditThenInvoice true), featureGate set to a non-nil
staticFeatureGate (either enabled or disabled), and assert expected == true and
no error; this verifies shouldCreatePendingLinesWithCharges returns true without
invoking the gate.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 60c7987c-9b84-4f6c-9bdf-b5347e84d079

📥 Commits

Reviewing files that changed from the base of the PR and between d2c8a57 and fe894f7.

📒 Files selected for processing (9)
  • openmeter/billing/charges/service.go
  • openmeter/billing/charges/service/create.go
  • openmeter/billing/charges/service/pendinglines.go
  • openmeter/billing/charges/service/pendinglines_test.go
  • openmeter/billing/httpdriver/handler.go
  • openmeter/billing/httpdriver/invoiceline.go
  • openmeter/billing/httpdriver/pendinglines_test.go
  • openmeter/server/router/router.go
  • openmeter/server/server_test.go
🚧 Files skipped from review as they are similar to previous changes (8)
  • openmeter/server/server_test.go
  • openmeter/server/router/router.go
  • openmeter/billing/httpdriver/invoiceline.go
  • openmeter/billing/charges/service.go
  • openmeter/billing/httpdriver/handler.go
  • openmeter/billing/charges/service/pendinglines_test.go
  • openmeter/billing/charges/service/pendinglines.go
  • openmeter/billing/charges/service/create.go

@greptile-apps

greptile-apps Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds a charge-backed path for CreatePendingInvoiceLines, routing through a new ChargeService.CreatePendingInvoiceLines when credits are enabled and the feature gate approves, while falling back to the existing billing service path otherwise.

  • pendinglines.go maps incoming billing.GatheringLine inputs to charge intents (flat-fee or usage-based), runs the charge creation in a single outer transaction (wrapping both create and autoAdvanceCreatedCharges), and uses charge ID-based correlation to deterministically order the returned lines.
  • create.go refactors the public Create to delegate to a private create, fixes the previous index-based BypassCollectionAlignment correlation by using charge IDs, and propagates pendingLineResults back up the call chain.
  • handler.go / invoiceline.go wire the new chargeService, credits, and featureGate dependencies into the HTTP handler and add the routing decision function with unit tests.

Confidence Score: 5/5

Safe to merge. The charge-backed flow is atomic, the previous index-based ordering bug is properly fixed with charge ID correlation, and all new code paths have integration test coverage.

The refactor correctly delegates to a private create that reuses an existing transaction via savepoints, making the CreatePendingInvoiceLines call fully atomic. The charge ID-based line ordering resolves the previous positional correlation concern. Tests cover the happy path, rollback on zero-amount lines, input validation, and partial failure scenarios. The only finding is a default price-type branch that could surface a confusing downstream error for an unrecognised price, which is a minor robustness gap rather than a correctness issue.

openmeter/billing/charges/service/pendinglines.go — the price-type switch default case.

Important Files Changed

Filename Overview
openmeter/billing/charges/service/pendinglines.go New file implementing CreatePendingInvoiceLines; uses charge-ID-based ordering, wraps creation in a single atomic transaction. The default price-type branch silently maps any unrecognised or zero-value Price to a usage-based intent without an early validation error.
openmeter/billing/charges/service/create.go Refactors Create into a public/private pair, fixes previous index-based BypassCollectionAlignment correlation with charge ID-based lookup, and propagates pendingLineResults through createGatheringLinesResult.
openmeter/billing/httpdriver/invoiceline.go Adds routing logic in shouldCreatePendingLinesWithCharges; nil featureGate returns true (enabling charges globally), which is explicitly documented in tests as intentional behavior.
openmeter/billing/httpdriver/pendinglines_test.go Comprehensive unit tests for shouldCreatePendingLinesWithCharges covering nil chargeService, disabled credits, nil/empty feature gates, flag enabled/disabled, and error propagation.
openmeter/billing/charges/service/pendinglines_test.go Integration tests covering the happy path (usage + flat lines), rollback on zero-amount lines, input validation rejections, and partial rollback with mixed valid/zero-amount lines.
openmeter/billing/charges/service.go Adds CreatePendingInvoiceLines to ChargeService interface with type aliases forwarding to billing types.
openmeter/billing/httpdriver/handler.go Adds chargeService, credits, and featureGate fields to the handler struct and New constructor.
openmeter/server/router/router.go Threads ChargeService, Credits, and FeatureGate config fields through to the billing HTTP handler constructor.
openmeter/server/server_test.go Adds a no-op implementation of CreatePendingInvoiceLines to satisfy the updated ChargeService interface in tests.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant Client
    participant Handler as HTTP Handler
    participant CS as ChargeService
    participant BS as BillingService
    participant TX as Transaction

    Client->>Handler: POST /billing/invoices/lines/pending
    Handler->>Handler: shouldCreatePendingLinesWithCharges(ns)
    Note over Handler: chargeService != nil AND credits.Enabled<br/>AND credits.EnableCreditThenInvoice<br/>AND featureGate.Enabled (or nil gate → true)

    alt "useCharges = true"
        Handler->>CS: CreatePendingInvoiceLines(input)
        CS->>CS: validate + mapToChargeIntents
        CS->>TX: transaction.Run (outer)
        TX->>CS: create(intents)
        CS->>TX: transaction.Run (inner / savepoint)
        TX->>CS: createFlatFeeCharges + createUsageBasedCharges
        CS->>BS: CreatePendingInvoiceLines (per customer+currency)
        BS-->>CS: CreatePendingInvoiceLinesResult (lines with ChargeIDs)
        CS->>TX: commit savepoint
        CS->>CS: autoAdvanceCreatedCharges
        CS->>CS: orderPendingLinesByCreatedCharges (charge-ID correlation)
        CS->>TX: commit outer tx
        TX-->>CS: committed
        CS-->>Handler: CreatePendingInvoiceLinesResult
    else "useCharges = false"
        Handler->>BS: CreatePendingInvoiceLines(input)
        BS-->>Handler: CreatePendingInvoiceLinesResult
    end

    Handler-->>Client: response
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant Client
    participant Handler as HTTP Handler
    participant CS as ChargeService
    participant BS as BillingService
    participant TX as Transaction

    Client->>Handler: POST /billing/invoices/lines/pending
    Handler->>Handler: shouldCreatePendingLinesWithCharges(ns)
    Note over Handler: chargeService != nil AND credits.Enabled<br/>AND credits.EnableCreditThenInvoice<br/>AND featureGate.Enabled (or nil gate → true)

    alt "useCharges = true"
        Handler->>CS: CreatePendingInvoiceLines(input)
        CS->>CS: validate + mapToChargeIntents
        CS->>TX: transaction.Run (outer)
        TX->>CS: create(intents)
        CS->>TX: transaction.Run (inner / savepoint)
        TX->>CS: createFlatFeeCharges + createUsageBasedCharges
        CS->>BS: CreatePendingInvoiceLines (per customer+currency)
        BS-->>CS: CreatePendingInvoiceLinesResult (lines with ChargeIDs)
        CS->>TX: commit savepoint
        CS->>CS: autoAdvanceCreatedCharges
        CS->>CS: orderPendingLinesByCreatedCharges (charge-ID correlation)
        CS->>TX: commit outer tx
        TX-->>CS: committed
        CS-->>Handler: CreatePendingInvoiceLinesResult
    else "useCharges = false"
        Handler->>BS: CreatePendingInvoiceLines(input)
        BS-->>Handler: CreatePendingInvoiceLinesResult
    end

    Handler-->>Client: response
Loading

Reviews (7): Last reviewed commit: "fix: comments" | Re-trigger Greptile

Comment thread openmeter/billing/charges/service/create.go Outdated
@mark-vass-konghq mark-vass-konghq force-pushed the feat/createinvoicependinglines-charges-support branch 2 times, most recently from 6f5e588 to 68922ae Compare June 12, 2026 12:40

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@openmeter/billing/httpdriver/invoiceline.go`:
- Around line 160-165: The code currently calls h.featureGate.Enabled(namespace,
flag) without checking h.featureGate for nil, which causes a panic; update the
logic in invoiceline.go so that if h.featureGate is nil it returns true (per the
"nil feature gate uses charges" test) instead of calling Enabled. Specifically,
when computing flag via h.featureGate.Flags.Credits(), keep that guarded, but
add an early nil check for h.featureGate and return true, otherwise call
h.featureGate.Enabled(namespace, flag); reference the h.featureGate field, the
Enabled method, and the Flags.Credits() call to locate the change.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c6b2d375-3ced-4014-ad89-7af4a3fa9120

📥 Commits

Reviewing files that changed from the base of the PR and between 68922ae and aa3a60f.

📒 Files selected for processing (3)
  • openmeter/billing/httpdriver/handler.go
  • openmeter/billing/httpdriver/invoiceline.go
  • openmeter/billing/httpdriver/pendinglines_test.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • openmeter/billing/httpdriver/handler.go
  • openmeter/billing/httpdriver/pendinglines_test.go

Comment thread openmeter/billing/httpdriver/invoiceline.go Outdated
@mark-vass-konghq mark-vass-konghq force-pushed the feat/createinvoicependinglines-charges-support branch 2 times, most recently from 5ba09a7 to 9ea35b0 Compare June 17, 2026 15:05
turip
turip previously approved these changes Jun 17, 2026
Comment thread openmeter/billing/charges/service/create.go
@mark-vass-konghq mark-vass-konghq force-pushed the feat/createinvoicependinglines-charges-support branch from b02334c to acd4b55 Compare June 17, 2026 15:57
@mark-vass-konghq mark-vass-konghq requested a review from turip June 17, 2026 15:58
@turip turip enabled auto-merge (squash) June 17, 2026 16:02
@turip turip merged commit 5b4ce3d into main Jun 17, 2026
24 of 25 checks passed
@turip turip deleted the feat/createinvoicependinglines-charges-support branch June 17, 2026 16:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/billing release-note/feature Release note: Exciting New Features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants