Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
d67bf5b
C2-5: the counter onto the wire contract, first cut
futurebuildai Oct 10, 2026
ff16dbf
C2-5: the counter's wire and money tests green
futurebuildai Oct 10, 2026
88ba873
WIP C2-5: the pos transaction and contention proofs, first cut
futurebuildai Oct 10, 2026
dd7402b
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
d7fffde
C2-5: the pos transaction proofs green
futurebuildai Oct 10, 2026
b161f38
C2-5: migration 105 proved on legacy rows, down and up
futurebuildai Oct 10, 2026
d1a12fe
C2-5: the counter's contract fragment, goldens and the wire bugs they…
futurebuildai Oct 10, 2026
181fe1b
C2-5: the contract clean through make contract, and the rows
futurebuildai Oct 10, 2026
60cd713
C2-5: the desk's counter on the new shapes
futurebuildai Oct 10, 2026
9877dca
C2-5: the counter's end to end run, and the void and return race it f…
futurebuildai Oct 10, 2026
16f7ffc
C2-5: the counter's e2e picks its product at the register's branch
futurebuildai Oct 10, 2026
ed83b07
C2-5: the offline sync actually completes its sales
futurebuildai Oct 10, 2026
e1c875a
CI: nudge the pull request's workflow
futurebuildai Oct 10, 2026
dde5184
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
d780163
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
e352998
C2-5 fix: a return is bounded by the sale it names
futurebuildai Oct 10, 2026
c79f221
C2-5 fix: a void after any return of the sale is refused has_returns
futurebuildai Oct 10, 2026
183bbd2
C2-5 fix: the guards run before the gateway, and refused gateway mone…
futurebuildai Oct 10, 2026
f1211ff
C2-5 fix: the tender is checked against the live total, never a dead …
futurebuildai Oct 10, 2026
ba18f8e
C2-5 fix: a kit sale completes, its components linked to the kit's ow…
futurebuildai Oct 10, 2026
81b4ecd
C2-5 fix: a return reverses COGS at the cost the sale relieved
futurebuildai Oct 10, 2026
de35529
C2-5 fix: the ACCOUNT credit check runs under the customer's credit lock
futurebuildai Oct 10, 2026
eb76215
C2-5 fix: the session is locked in the completion, the void and the c…
futurebuildai Oct 10, 2026
6c0c642
C2-5 fix: the branch wall covers the register, the session and the ti…
futurebuildai Oct 10, 2026
e5efac9
C2-5 fix: the machine key contract restored, its test back
futurebuildai Oct 10, 2026
9318a5d
C2-5 fix: a return left on the walk-in customer's account is refused …
futurebuildai Oct 10, 2026
12669fa
C2-5 fix: the transaction proofs the recipe owes, and the invariant c…
futurebuildai Oct 10, 2026
952e7fa
C2-5 fix: the concrete P3s of both reviews
futurebuildai Oct 10, 2026
f3af914
C2-5 fix: CONTRACT-CHANGES rows for every behaviour change of the round
futurebuildai Oct 10, 2026
d098406
C2-5 fix: goldens re-recorded where the fixes changed recorded shapes
futurebuildai Oct 10, 2026
4961c9e
C2-5 fix: the invariant check's control legs scoped to the customers …
futurebuildai Oct 10, 2026
bcfce08
CI: nudge the pull request's workflow again
futurebuildai Oct 10, 2026
bdf8b39
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
a57a13e
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
ef2264f
C2-5 merge fix: the envelope sort's opt-in flag, and the goldens back…
futurebuildai Oct 10, 2026
d6b8a93
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
51c0b72
fix(pos): a return line of a named sale must name the sale line
futurebuildai Oct 10, 2026
8372a11
fix(pos): a linked return finds its invoice line by the stored id, ne…
futurebuildai Oct 10, 2026
af9228a
fix(pos): a returned kit line restocks its components, never the kit …
futurebuildai Oct 10, 2026
f6a4d74
fix(pos): the completing partial return takes the remainder, so repea…
futurebuildai Oct 10, 2026
2c9f2fa
fix(pos): a card return refunds the sale's own card tender, never a c…
futurebuildai Oct 10, 2026
c455c8a
fix(pos): a cash return locks its till session and needs one open
futurebuildai Oct 10, 2026
72436e7
fix(pos): one gateway movement per sale, and every movement recorded
futurebuildai Oct 10, 2026
db1b99d
test(pos): the return cap's in-transaction recheck proven under three…
futurebuildai Oct 10, 2026
816bae8
test(pos): the pos tests read their own rows, never table wide totals
futurebuildai Oct 10, 2026
a961a70
fix(pos): the review threes and fours of the small findings
futurebuildai Oct 10, 2026
9976df2
docs(pos): the contract fragment says what the card return and the li…
futurebuildai Oct 10, 2026
20e564e
test(pos): a card sale returned against is voided with zero gateway r…
futurebuildai Oct 10, 2026
1225231
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
e216b29
fix(pos): legacy returns read with their own sign, and bear on one line
futurebuildai Oct 10, 2026
52e2fa5
fix(pos): one request names one sale line once, and each remainder ch…
futurebuildai Oct 10, 2026
8e520b0
test(pos): the cash return's session lock and its session_closed refu…
futurebuildai Oct 10, 2026
0c65997
fix(pos): card refunds claimed by a committed intent, gateway outside…
futurebuildai Oct 10, 2026
dbbd8fd
fix(pos): the small findings of both reviews
futurebuildai Oct 10, 2026
5c58acf
chore(contracts): regenerate the TypeScript client after the line_id …
futurebuildai Oct 10, 2026
c9714bf
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
5021c7a
fix(pos): a claim after a committed void never reaches the terminal
futurebuildai Oct 10, 2026
e6801f4
fix(pos): the drawer refuses a sale whose card claim stands, and the …
futurebuildai Oct 10, 2026
111275b
fix(pos): the close refuses while a card refund claim of the session …
futurebuildai Oct 10, 2026
c9db6ec
fix(pos): only a definite refusal releases a refund claim; no verdict…
futurebuildai Oct 10, 2026
a5fbf5f
style(pos): gofmt the fake gateway's scripted refund statuses
futurebuildai Oct 10, 2026
2c2d3e4
fix(pos): a stranded refund claim is told apart and resolved by a gua…
futurebuildai Oct 10, 2026
8ea2713
test(pos): the card cap and the legacy tax reads fail under their sig…
futurebuildai Oct 10, 2026
9e3cd21
fix(pos): a partly legacy line completes with the linked return that …
futurebuildai Oct 10, 2026
898ee8b
fix(pos): the 105 down refuses over completed contract era lines; the…
futurebuildai Oct 10, 2026
4e4368c
test(pos): the gateway loop proof gaps close, and a stuck contender f…
futurebuildai Oct 10, 2026
f3071b3
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 10, 2026
c2536c8
chore(api-client): regenerate the schema types for the refund claim r…
futurebuildai Oct 10, 2026
66797d7
fix(pos): every refund method but the card's own refuses under a stan…
futurebuildai Oct 11, 2026
8cee19d
fix(pos): a void resolution accounts for each card tender separately
futurebuildai Oct 11, 2026
5e806be
fix(pos): the refund claim resolution runs inside the caller's branch
futurebuildai Oct 11, 2026
3944420
fix(pos): every claim state change counts its rows, and the race is n…
futurebuildai Oct 11, 2026
32d0cb4
fix(pos): a resolution cannot contradict the claim's own record
futurebuildai Oct 11, 2026
27e4832
fix(pos): only the terminal's own no releases a refund claim
futurebuildai Oct 11, 2026
59224c7
test(pos): the round 4 claims the probes left unproved, each biting a…
futurebuildai Oct 11, 2026
f1eb35f
fix(pos): the review P3s close, each proof biting its mutant
futurebuildai Oct 11, 2026
a44a5d9
docs(pos): ADR 0005 and the CONTRACT-CHANGES C2-5r4 rows state the ro…
futurebuildai Oct 11, 2026
1049675
chore(api): regenerate the merged contract and the client types for t…
futurebuildai Oct 11, 2026
4a9c6b1
fix(pos): a lost replay answers the race whatever stage it loses at
futurebuildai Oct 11, 2026
481fe9c
Merge origin/refactor/v1 into refactor/c2-5-pos-till
futurebuildai Oct 11, 2026
699dc4f
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 11, 2026
0a15f31
fix(pos): a split void completes whatever order its claims are resolv…
futurebuildai Oct 11, 2026
ebfefcc
fix(pos): a void race loser is told the race, not a state refusal
futurebuildai Oct 11, 2026
48bee8a
fix(pos): the resolution holds the sale to the caller's grants, heade…
futurebuildai Oct 11, 2026
5d5f1d0
fix(pos): the till report's card figure subtracts booked void refunds
futurebuildai Oct 11, 2026
d03d576
docs(pos): ADR 0005 and the CONTRACT-CHANGES C2-5r4 rows state the ro…
futurebuildai Oct 11, 2026
65e3b94
fix(pos): a cash only session report carries no card figure
futurebuildai Oct 11, 2026
39b0248
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 11, 2026
6e70344
test(pos): the round 4 rechecks bite, each reached by a stand-in in i…
futurebuildai Oct 11, 2026
3dcb742
test(pos): three contenders over a split void's claims settle each once
futurebuildai Oct 11, 2026
dc8b4d1
docs(pos): the ADR and the contract row state the split void's interi…
futurebuildai Oct 11, 2026
a7a612b
docs(pos), test(pos): the declined tender's credit is payable back to…
futurebuildai Oct 11, 2026
d50082b
inventory: the write path acts on the named location's row, never the…
futurebuildai Oct 11, 2026
b28b595
pos: a claim whose terminal call has not answered holds the resolve a…
futurebuildai Oct 11, 2026
3d9a5c5
pos, account: an invoice whose sale's void is unsettled takes no appl…
futurebuildai Oct 11, 2026
1ca06e3
pos: the till CARD figure subtracts the session's card returns
futurebuildai Oct 11, 2026
b0a4fc0
pos: the Z report's payload is an object again, and the golden shows it
futurebuildai Oct 11, 2026
cc09f45
test(pos): the completion gate, the card figure's sale filter and the…
futurebuildai Oct 11, 2026
4bd47f7
docs(pos), style: the round's rules in the ADR and the contract rows
futurebuildai Oct 11, 2026
2f0f67e
contract: regenerate the api client types for the Z report's payload …
futurebuildai Oct 11, 2026
92257c9
account: a held interim invoice refuses an application before its amo…
futurebuildai Oct 11, 2026
9f15097
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 12, 2026
2f6e7c8
migrations: renumber this branch's in flight lease migration to 109
futurebuildai Oct 12, 2026
09c4dc9
pos, account, payments: a declined void tender's credit is held to it…
futurebuildai Oct 12, 2026
989ec85
pos: the declined void tender's credit is paid back through the count…
futurebuildai Oct 12, 2026
dfeb8b7
docs(pos): the walk-in credit's rule in ADR 0005 and the round 9 cont…
futurebuildai Oct 12, 2026
f4f26e2
style: gofmt the round's touched files
futurebuildai Oct 12, 2026
e05775f
test(pos): drop a leftover blank identifier in the payback tests
futurebuildai Oct 12, 2026
ea581d2
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 12, 2026
ce13c6b
test(pos): PR 83's register branch legs on the wire contract's sale a…
futurebuildai Oct 12, 2026
4c8698b
middleware: the refund claim routes are REFUSED for a branch bound key
futurebuildai Oct 12, 2026
7bada5a
test(pos), test(serve): PR 83's wire and migration tests on the wire …
futurebuildai Oct 12, 2026
514b6bc
pos: concurrent paybacks pay the card once (the claim locks the payme…
futurebuildai Oct 12, 2026
f631d33
test(pos): drop a duration word from the payback race probe's comment
futurebuildai Oct 12, 2026
6ed79a8
pos: a void's sequential calls restamp each lease; a recorded refund …
futurebuildai Oct 12, 2026
0a01e91
pos, migrations: the sixteenth review's three P3s
futurebuildai Oct 12, 2026
57aba46
inventory, pos: the fifteenth review's two P3s, each red first
futurebuildai Oct 12, 2026
21e2a59
docs: ADR 0005 and CONTRACT-CHANGES carry round 10's behaviours
futurebuildai Oct 12, 2026
9693e0d
Merge origin/refactor/sec-noheader (PR 119) into the counter
futurebuildai Oct 14, 2026
8ded8ed
Counter tests carry the no header rule: grants for the helper user, s…
futurebuildai Oct 14, 2026
7b09020
Counter customer: the lookup with the account's standing, and the PO …
futurebuildai Oct 14, 2026
7a1b85f
Counter screen: find the customer, read the account's standing, charg…
futurebuildai Oct 14, 2026
c3417a3
Counter gates: key branch census class, the Z report day span, migrat…
futurebuildai Oct 14, 2026
5b818b0
Merge origin/refactor/v1 (PR 119 landed) into the counter
futurebuildai Oct 14, 2026
0dde00b
Key branch pin legs for the counter's customer routes
futurebuildai Oct 14, 2026
01ff3da
Merge remote-tracking branch 'origin/refactor/v1' into refactor/c2-5-…
futurebuildai Oct 14, 2026
4fbbfad
Counter names a customer through one rule; a zero limit holds the acc…
futurebuildai Oct 14, 2026
b4bae7d
Leave the Z list's date parse as it was
futurebuildai Oct 14, 2026
7fe1ac7
Return holds its customer to the counter's one rule and credits the s…
futurebuildai Oct 14, 2026
0b09f2a
middleware: the till open row keeps its own description
futurebuildai Oct 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,7 @@ __pycache__/
# Playwright
web/test-results/
web/playwright-report/

# Golden drift dumps written beside the recorded transcript on a mismatch
# (core/internal/characterization): never commit them, re-record instead.
core/internal/characterization/testdata/goldens/*.actual
4 changes: 4 additions & 0 deletions core/api/ROUTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,10 @@ POST /api/v1/payments/{id}/applications internal/payment h.HandleApply
POST /api/v1/payments/{id}/refunds internal/payment h.HandleRefund
POST /api/v1/payments/{id}/transitions internal/payment h.HandleTransition
GET /api/v1/pos/catalog internal/pos h.GetCatalog
GET /api/v1/pos/customers internal/pos h.FindCustomers
GET /api/v1/pos/products/search internal/pos h.SearchProducts
POST /api/v1/pos/refund-intents/{id}/payback internal/pos h.PaybackRefundIntent
POST /api/v1/pos/refund-intents/{id}/resolve internal/pos h.ResolveRefundIntent
GET /api/v1/pos/returns internal/pos h.ListReturns
POST /api/v1/pos/returns internal/pos h.CreateReturn
GET /api/v1/pos/returns/{id} internal/pos h.GetReturn
Expand All @@ -304,6 +307,7 @@ GET /api/v1/pos/transactions internal/pos h.ListTransactions
POST /api/v1/pos/transactions internal/pos h.StartTransaction
GET /api/v1/pos/transactions/{id} internal/pos h.GetTransaction
POST /api/v1/pos/transactions/{id}/complete internal/pos h.CompleteTransaction
PUT /api/v1/pos/transactions/{id}/customer internal/pos h.AttachCustomer
POST /api/v1/pos/transactions/{id}/items internal/pos h.AddItem
DELETE /api/v1/pos/transactions/{id}/items/{itemId} internal/pos h.RemoveItem
POST /api/v1/pos/transactions/{id}/void internal/pos h.VoidTransaction
Expand Down
8 changes: 6 additions & 2 deletions core/api/fragments/payment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ paths:
allow) in the same transaction, each application its own entry (DR 2200 / CR
1020) and subledger row. Refused with 409 and a blocker: exceeds_unapplied,
exceeds_open_amount, invoice_void, customer_mismatch, currency_mismatch,
discount_not_available, period_closed. Writes payment.recorded, then
discount_not_available, period_closed, and void_claim_pending when the
invoice's sale has a void whose refund claims still stand (the counter's
interim; the refusal names the claims). Writes payment.recorded, then
payment.applied and invoice.partial or invoice.paid per invoice, then
customer.updated (part balance).
parameters:
Expand Down Expand Up @@ -163,7 +165,9 @@ paths:
posts its own DR 2200 / CR 1020 entry and a PAYMENT subledger row. The
precondition is the payment's revision. Refused with 409 exceeds_unapplied,
exceeds_open_amount, invoice_void, payment_voided, customer_mismatch,
currency_mismatch, discount_not_available or period_closed. Writes payment.applied,
currency_mismatch, discount_not_available, period_closed, or
void_claim_pending when the invoice's sale has a void whose refund claims
still stand (the counter's interim; the refusal names the claims). Writes payment.applied,
invoice.partial or invoice.paid per invoice, and customer.updated.
parameters:
- name: id
Expand Down
Loading
Loading