Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
243 commits
Select commit Hold shift + click to select a range
059c005
Add the M4 behavior contract for review (PR4_PLAN.md)
claude Aug 9, 2026
3e2114d
Amend the M4 contract for the Codex review round
claude Aug 9, 2026
6fad064
Correct the bulk refund budget to per-reference accounting
claude Aug 9, 2026
6aad456
Amend the M4 contract for the second Codex round
claude Aug 9, 2026
6669685
Record the owner's four decisions and finish the CodeRabbit round
claude Aug 9, 2026
76b0153
Amend the M4 contract for the third Codex round
claude Aug 10, 2026
49f18b7
Amend the M4 contract for the fourth Codex round
claude Aug 10, 2026
119f0cd
Record decision 5 and fold in the fifth Codex round
claude Aug 10, 2026
6efc9e7
Align the contract's SumUp, alert, and boundary wording for the CodeR…
claude Aug 10, 2026
d20f421
Fix the evaluation order and finish the conditional one-payout wording
claude Aug 10, 2026
2a014c8
Bound bulk refund batches and defer the two unreachable refund conflicts
claude Aug 10, 2026
782616e
Fix SumUp refund authority, lock the rejection arm, and close four co…
claude Aug 10, 2026
ece3a90
Re-key the rejection reservation, move its cutover to PR B, and close…
claude Aug 10, 2026
b778e1c
Coalesce Square's named payment with its tender and make post-termina…
claude Aug 10, 2026
7eec99d
Ground the replay dedupe in an evidence fingerprint and close four mo…
claude Aug 10, 2026
b7c4eaa
Close six evidence and consistency gaps from the twelfth review round
claude Aug 10, 2026
239ba02
Retain the buyer on every owner-review park and close five more contr…
claude Aug 10, 2026
56621f6
Stop prescribing refunds for valid split payments and gate every lega…
claude Aug 10, 2026
52b6295
Unwedge SumUp multi-child checkouts and close five replay-lifecycle gaps
claude Aug 10, 2026
c32283e
Route SumUp splits through the common remedy and make the owner-revie…
claude Aug 10, 2026
3ef1581
Admit single-attendee refunds, complete PR A's Stripe pick, total-ord…
claude Aug 10, 2026
b44e0e0
Complete the staged lifecycle: every persist-then-refund path, balanc…
claude Aug 10, 2026
8ac63af
Park part-refunded bookings, claim refunds by CAS, seal the last prun…
claude Aug 10, 2026
1701c16
Kind-aware markers, park-first ordering, evidence-aware CAS losers, a…
claude Aug 10, 2026
fa7d0c9
Judge whole reference sets first, resource-derived gates, non-regress…
claude Aug 10, 2026
eab48ef
Scope refund claims by owner, persist comparable evidence summaries, …
claude Aug 10, 2026
202858b
Declare the reference-row state machine: five laws every consumer der…
claude Aug 10, 2026
f25ddf6
Sync PLAN.md with the M4 contract: claims, state-machine laws, F13/F5…
claude Aug 10, 2026
381039d
Grow the reference-row laws to six: frozen facts, total evidence, wri…
claude Aug 10, 2026
a26b277
Align the PR slice header estimates with the slicing intro
claude Aug 10, 2026
d744bf8
Mirror live row states in plaintext, code the stored evidence, sweep …
claude Aug 10, 2026
90e9c95
One coded fingerprint, stable leg identity, fenced verdicts, marker l…
claude Aug 10, 2026
1b6e1ba
Name the seven data laws every milestone instantiates
claude Aug 10, 2026
bf445fa
Data law 8: atomicity before compensation
claude Aug 10, 2026
76e732a
Sibling refund evidence for both providers, capped; balance finalize …
claude Aug 10, 2026
8d94d45
Claims are writer-exclusive; caps and evidence shapes total on every …
claude Aug 10, 2026
d64b764
Round 29 plus the first self-audit: fourteen fixes in one pass
claude Aug 10, 2026
ac7000b
Round 30: complete the machinery rounds 28-29 introduced
claude Aug 10, 2026
bc6a323
Round 31: close the windows the fences cannot see
claude Aug 10, 2026
4185e79
Law self-audit of round 31: fix the backstop that did not exist
claude Aug 10, 2026
6f77286
Round 32: honest residuals and one gate for page and preflight
claude Aug 10, 2026
5dd8b1b
Round 33: the constraints the code will be built on
claude Aug 10, 2026
5ba8f3b
M4 PR A: port the pure resource layer from great-fermi
claude Aug 10, 2026
f8112d1
Fix CI: Biome formatting on the ported files, direct kindObject test
claude Aug 10, 2026
abcef6d
Cover sameProviderResource: a match and each differing field
claude Aug 10, 2026
163cd97
M4 PR A: port the judge — conflict, observation, refund, outcomeOf
claude Aug 10, 2026
3a8779f
Anchor-claim winner: deterministic primary key, not a unique column
claude Aug 10, 2026
112ad81
M4 PR A: the one schema migration — three payment-state columns
claude Aug 10, 2026
3018fe3
The contract points at the code once the code exists
claude Aug 10, 2026
eae57fd
The judge follows the contract's binding order
claude Aug 10, 2026
caaebd7
Absorb CodeRabbit's review of the judge port
claude Aug 10, 2026
c81245b
A checkout that owed nothing takes the free arm whatever it is called
claude Aug 10, 2026
83aba50
Merge what the two judge arms share instead of repeating it
claude Aug 10, 2026
ac36f12
Stamp the schema label and hash the new columns changed
claude Aug 10, 2026
52570d8
Judge a refund on the money taken, when no total was ever agreed
claude Aug 10, 2026
77118f3
Ask what the money did before sending a refund
claude Aug 10, 2026
4a85ee6
Refuse a Square refund total that cannot be read
claude Aug 10, 2026
7735197
Keep an absent Square refund total absent
claude Aug 10, 2026
ca82c45
Say what is built, and name the two gaps it leaves
claude Aug 10, 2026
c2bbaf8
Give a payment row one record and one claim
claude Aug 10, 2026
7d30a1f
Hold the row before asking the provider for anything
claude Aug 10, 2026
1e68dc8
Make the hold real: take it, fence it, and stop the prune eating it
claude Aug 10, 2026
6a59e37
Say what the claim actually covers, and what it still leaves open
claude Aug 10, 2026
d43e8bd
Record the two-pending-refunds question rather than guess at it
claude Aug 10, 2026
c9e586e
Record that the bulk wave needs one claim, not one per attendee
claude Aug 10, 2026
d664bae
Hold a whole refund run with one claim, not one per attendee
claude Aug 10, 2026
ec257cb
Let go of a claim in two batches, not a transaction
claude Aug 10, 2026
b3fe9fd
Write down two holes the claim does not yet cover
claude Aug 10, 2026
8e6fb82
Stop the claim losing money, a row, or the reason a refund failed
claude Aug 10, 2026
5346826
Record that a run still judges references it loaded before claiming
claude Aug 10, 2026
94a34f0
Treat an unconfirmed answer as doubt, not as a refusal
claude Aug 10, 2026
8aeb92c
Judge a refund on what the hold saw, not on a list loaded before it
claude Aug 10, 2026
a710f92
Drop the note for the stale-snapshot hole, now that it is closed
claude Aug 10, 2026
46488e4
A reading the provider could not give is not money in doubt
claude Aug 10, 2026
8c2171b
Stand a run down when the money grew while it waited
claude Aug 10, 2026
07426ff
Ask about one charge once, and don't mistake an anchor for new money
claude Aug 10, 2026
f7486da
Keep the row that says money may already be going back
claude Aug 10, 2026
a12111d
Give every stored charge the index a claim finds it by
claude Aug 10, 2026
ee6c872
Give a charge with no row of its own something to be held by
claude Aug 10, 2026
d3369db
Write the charge's index everywhere the charge is written
claude Aug 10, 2026
757eb99
Tell somebody when a refund is withheld over a disagreement
claude Aug 10, 2026
ed3b792
Rebuild the test's dropped table from the real schema
claude Aug 10, 2026
4f62d26
Record the stranded-sibling refund fault
claude Aug 10, 2026
09a9157
Refuse to move or destroy a payment somebody is still working on
claude Aug 10, 2026
f9b36e6
Keep an orphan whose payment still has work on it
claude Aug 10, 2026
a5d718e
Point the contract at the admissions that now exist
claude Aug 10, 2026
28a65ea
Keep a row's protection showing for as long as it needs it
claude Aug 10, 2026
cef1bd6
Read the mirror word from one place in the orphan tests too
claude Aug 10, 2026
a04975c
Post the ledger while the refund still holds the row
claude Aug 10, 2026
d7e8d34
Drop the test hook that could not compile
claude Aug 10, 2026
f622bf5
Record the swallowed provider protocol error
claude Aug 10, 2026
072385e
Re-stamp the schema hash after dropping the unused column
claude Aug 10, 2026
362ed12
Say what the bounded orphan query does, not what went wrong before
claude Aug 10, 2026
8a7a62f
Never tell an operator money moved when nobody knows
claude Aug 10, 2026
9d3057c
Record the shared-charge double reversal
claude Aug 10, 2026
d004d7a
Name the split outcome in the sibling refund tests
claude Aug 10, 2026
51b4fca
Delete the reading nothing reads, rather than export it uncalled
claude Aug 10, 2026
d4bbaa3
Name a conflict the union still has
claude Aug 10, 2026
e818a6e
Stop the as-built table pointing at exports that are gone
claude Aug 10, 2026
ca6c2a7
Cover the claim's own answers, and write a row's record in one place
claude Aug 10, 2026
5e1a857
Stop guarding a claim write against a race it cannot lose
claude Aug 11, 2026
bb74f6e
Name the booking guard once, instead of three times three ways
claude Aug 11, 2026
e3cfe12
Keep money Square only half-stated out of the answer
claude Aug 11, 2026
b26f195
Let a dead run's hold go instead of swallowing why it died
claude Aug 11, 2026
192915f
Tell the operator why a delete stopped, instead of only refusing it
claude Aug 11, 2026
e9c7c08
Say that PR A is built, and name its table like the rest
claude Aug 11, 2026
207939b
Write down the stale-claim touch test's flakiness
claude Aug 11, 2026
7ca6b16
Stop alerting on refunds that were simply not sent yet
claude Aug 11, 2026
ef96576
Never mint a payment row for somebody who has gone
claude Aug 11, 2026
30df09b
Give a charge nobody can read a way back to the buyer
claude Aug 11, 2026
339f509
Write down the refund fan-out's budget ceiling
claude Aug 11, 2026
a8be048
Name the state a refunded-but-unrecorded payment has nowhere to live in
claude Aug 11, 2026
024e334
Record the third way a claim outlives its usefulness
claude Aug 11, 2026
c4baf89
Say plainly that SumUp's malformed charge is still stuck
claude Aug 11, 2026
9fe322e
Stop a withheld refund being reported twice
claude Aug 11, 2026
7750658
Record a throw that becomes a 500, and an index repaired too late
claude Aug 11, 2026
cc27397
Shrink the refund diff: one reference builder, one provider double
claude Aug 11, 2026
f3a1be1
Turn three money test suites into named tables
claude Aug 11, 2026
9e3b129
Curry the claim test's column readers, and name the returned reference
claude Aug 11, 2026
c3620ea
Alias the payment table in the claim test's column reader
claude Aug 11, 2026
319cd3f
Record the money that came back, even when a sibling charge did not
claude Aug 11, 2026
b17bd74
Give money the books have not caught up with its own state
claude Aug 11, 2026
dafefe4
Let a refund the provider could not finish be tried again
claude Aug 11, 2026
6388910
Keep a partly-refunded attendee refundable for the rest
claude Aug 11, 2026
e488c9b
Close the faults these three slices fixed, and record what they built
claude Aug 11, 2026
f004ea5
Keep refunding after a partial reversal, on both sides of the guard
claude Aug 11, 2026
a25918a
Ask whether THIS booking came back, not whether any of them did
claude Aug 11, 2026
6e3c55e
Type the refunded test helper by the row's own field
claude Aug 11, 2026
5a381de
Unify the refunded predicate, and drop the claim scope nothing writes
claude Aug 11, 2026
a1e7439
Trim two comments, and record the correlation gap pruning shares
claude Aug 11, 2026
a51e1fb
Record the refund-all duplicate-candidate finding
claude Aug 11, 2026
f75c0ec
Keep the hold a dead run left, and stand down while one is live
claude Aug 11, 2026
72f8f73
Prove the unreadable provider is never sent money
claude Aug 11, 2026
066a93b
Record that a returned deposit reverses the whole sale
claude Aug 11, 2026
cb38ae6
Stop a free ticket reading as refunded, and keep the doubt on an unma…
claude Aug 11, 2026
1015734
Narrow the index claim, and say what the free-booking test protects
claude Aug 11, 2026
7d00abe
Do not call a partial refund complete when a legacy return has no home
claude Aug 11, 2026
3e823f5
Judge a resumed hold under the capability its own call was made under
claude Aug 11, 2026
a31b3d3
Mark only the rows whose money came back, and free a stranded hold
claude Aug 11, 2026
c42b7a4
Point the plan's as-built rows at what the claim now does
claude Aug 11, 2026
fdea609
Read a payment row's columns through one helper
claude Aug 11, 2026
0c92e22
Keep the returned-money marker apart from the doubt
claude Aug 11, 2026
dcf0e70
Ask one question about what a refund run has left to do
claude Aug 11, 2026
737ec3c
Claim in one batch, and drop the capability nothing writes
claude Aug 11, 2026
cf2ab51
Record the free package member, and why its obvious fix is a trap
claude Aug 11, 2026
50c3d23
Give a claim its own lease, not the reservation sweep's
claude Aug 11, 2026
e8009fc
Pin the marker's idempotency, which nothing covered
claude Aug 11, 2026
60631cf
Let the books-behind marker retire on the path that writes it
claude Aug 11, 2026
d8dfeb0
Record the run-length budget and the malformed-answer question
claude Aug 11, 2026
4486c2f
Say the books-behind word in one place
claude Aug 11, 2026
d276964
Make admin refunds safe to retry and record (#2074)
stefan-burke Aug 12, 2026
920af7c
docs: add m4 part A source change infographic
stefan-burke Aug 12, 2026
e4a8033
Make refund safety states explicit and visitor-tested
stefan-burke Aug 12, 2026
86e0171
Schema attendee actions by required scope
stefan-burke Aug 12, 2026
8db2154
Make refund confirmation replay indexed and atomic
stefan-burke Aug 12, 2026
ab038bb
Materialize legacy refund references on attendee save
stefan-burke Aug 12, 2026
ea00778
Harden refund command dispatch state
stefan-burke Aug 12, 2026
f3d919f
WIP: make payment review acknowledgement exact — NOT GREEN, bulk jour…
stefan-burke Aug 12, 2026
f7c3270
WIP: harden refund lifecycle retirement — NOT GREEN, provider budget …
stefan-burke Aug 12, 2026
9454296
WIP: harden refund lifecycle and budget — NOT GREEN, readiness eviden…
stefan-burke Aug 12, 2026
977e55d
WIP: make refund recovery evidence durable — NOT GREEN, ledger batchi…
stefan-burke Aug 12, 2026
d166212
WIP: bound refund recording and price its tail — NOT GREEN, main sync…
stefan-burke Aug 12, 2026
c036846
WIP: normalize branch formatting — NOT GREEN, final gates remain
stefan-burke Aug 12, 2026
d083269
WIP: satisfy structural quality gates — NOT GREEN, two-charge budget …
stefan-burke Aug 12, 2026
fdb00f4
WIP: fit refund commands to the edge budget — NOT GREEN, invariant co…
stefan-burke Aug 12, 2026
2ce496c
Harden refund safety invariants
stefan-burke Aug 12, 2026
1716c1a
Close refund evidence and budget races
stefan-burke Aug 12, 2026
6500b9c
Document Part A refund safety architecture
stefan-burke Aug 12, 2026
b31cb42
Make refund mutation checks exhaustive
stefan-burke Aug 12, 2026
bfa5d22
Refresh Part A source infographic
stefan-burke Aug 12, 2026
b24d75f
docs: add distilled source diff report
stefan-burke Aug 13, 2026
a16e277
WIP: harden PR4-A merge boundaries — full precommit pending
stefan-burke Aug 13, 2026
1801a0f
WIP: finish PR4-A hardening — final gates pending
stefan-burke Aug 13, 2026
139fa69
Complete PR4-A reports and migration race proof
stefan-burke Aug 13, 2026
7b8e47e
Record Square session fallback equivalence
stefan-burke Aug 13, 2026
05a867b
Close final PR4-A lifecycle gaps
stefan-burke Aug 13, 2026
936135a
Align refund tests with mutation ownership
stefan-burke Aug 13, 2026
fb77fd1
Preserve PR4-A implementation constraints
stefan-burke Aug 13, 2026
8cf53fd
Fail closed on incomplete legacy payment history
stefan-burke Aug 13, 2026
92e7c28
WIP: keep automatic refund recovery reachable — focused tests green
stefan-burke Aug 13, 2026
0c9d4ae
WIP: protect rejected refund rereads — focused tests green
stefan-burke Aug 13, 2026
1894055
WIP: preserve final PR4-A hardening — full precommit pending
stefan-burke Aug 13, 2026
8bea679
Finish PR4-A refund recovery hardening
stefan-burke Aug 13, 2026
b950fba
Classify foreign Square payment metadata
stefan-burke Aug 13, 2026
2f559e7
WIP: pin callback refund replay bugs — NOT GREEN, authority pending
stefan-burke Aug 13, 2026
28eddfe
WIP: unify durable refund authority — NOT GREEN, budget gate pending
stefan-burke Aug 13, 2026
de6faec
WIP: finish one refund authority — NOT GREEN, tagged admission in pro…
stefan-burke Aug 13, 2026
0eaa3ce
WIP: delete legacy refund paths — NOT GREEN, final gates pending
stefan-burke Aug 14, 2026
611f70c
WIP: apply repository formatting — NOT GREEN, release gate pending
stefan-burke Aug 14, 2026
e855e38
WIP: unify refund diagnostics and journeys — NOT GREEN, full gate pen…
stefan-burke Aug 14, 2026
452b483
WIP: preserve exhaustive refund refusal narrowing — NOT GREEN, full g…
stefan-burke Aug 14, 2026
c9fac92
WIP: converge on one refund authority — NOT GREEN, full precommit pen…
stefan-burke Aug 14, 2026
6b6b0f1
Use canonical payment rows in Refund All fixtures
stefan-burke Aug 14, 2026
e29443d
Format Refund All fixture imports
stefan-burke Aug 14, 2026
4ffa1d0
WIP: make refund ordering fixtures feasible — NOT GREEN, full precomm…
stefan-burke Aug 14, 2026
c9ce7aa
WIP: complete real refund safety journeys — NOT GREEN, coverage harne…
stefan-burke Aug 14, 2026
dbf3d32
Remove superseded refund journey steps
stefan-burke Aug 14, 2026
f516a4e
WIP: close refund recovery exits — NOT GREEN, full precommit pending
stefan-burke Aug 14, 2026
031657b
WIP: make payment anchors one-shot — NOT GREEN, full precommit pending
stefan-burke Aug 14, 2026
f4d0e3f
WIP: harden refund authority exits — NOT GREEN, full coverage and rep…
stefan-burke Aug 14, 2026
0ece35c
WIP: close exact refund decisions — NOT GREEN, full coverage and repo…
stefan-burke Aug 14, 2026
5bffbdd
Remove parallel refund readiness paths
stefan-burke Aug 14, 2026
4a405c5
WIP: finalize PR4-A record — NOT GREEN, fresh review fixes pending
stefan-burke Aug 14, 2026
c769634
WIP: fix final PR findings — NOT GREEN, full coverage pending
stefan-burke Aug 14, 2026
191f730
WIP: remove parallel refund test authority — NOT GREEN, full coverage…
stefan-burke Aug 14, 2026
d4b8ef9
WIP: close final refund recovery races — NOT GREEN, state split pending
stefan-burke Aug 14, 2026
fc98c33
WIP: finalize refund authority hardening — NOT GREEN, full gates pending
stefan-burke Aug 14, 2026
58b9c5c
WIP: prove refund state invariants — NOT GREEN, claim mutations pending
stefan-burke Aug 14, 2026
98ab28a
WIP: consolidate refund lifecycle policy — NOT GREEN, review follow-u…
stefan-burke Aug 14, 2026
728521c
WIP: close refund retirement races — NOT GREEN, final gates pending
stefan-burke Aug 14, 2026
9ab1c5f
Split refund placeholder tests by responsibility
stefan-burke Aug 14, 2026
4beb470
WIP: align refund tests and plans — NOT GREEN, mutation gaps remain
stefan-burke Aug 14, 2026
517bb74
Exhaust refund evidence policy tests
stefan-burke Aug 14, 2026
9a2e6ff
Format refund evidence policy table
stefan-burke Aug 14, 2026
f287c99
WIP: make refund provider authority canonical — NOT GREEN, final gate…
stefan-burke Aug 14, 2026
fb63f25
WIP: finalize PR4-A authority and records — reports need final finger…
stefan-burke Aug 14, 2026
a4aa049
Finalize PR4-A plans and source reports
stefan-burke Aug 14, 2026
b0f38d2
Condense PR4-A infographic around the data model
stefan-burke Aug 14, 2026
f8601a1
Polish infographic accuracy and reading modes
stefan-burke Aug 14, 2026
81c0c62
Block Refund All on PII-only paid bookings
stefan-burke Aug 14, 2026
5e062f4
Refresh PR4-A briefing after Refund All hardening
stefan-burke Aug 14, 2026
4bff46d
Harden refund provenance and payment-work exits
stefan-burke Aug 14, 2026
5a53cc0
docs: specify live payment cucumber harness
stefan-burke Aug 14, 2026
2c74cd6
Convert the live payment harness to Cucumber cases
stefan-burke Aug 14, 2026
c282d0e
Rewrite e2e-payments README and remove the CUCUMBER.md plan
stefan-burke Aug 14, 2026
9777ad7
Fix paid-provider step binding and Stripe test-connection click
stefan-burke Aug 15, 2026
399a6af
Merge the unreleased refund migrations into one
claude Aug 15, 2026
9eabfcb
Fix four live-run failures: held-return race, checkout wait, classifi…
stefan-burke Aug 15, 2026
d0be64e
Fix complex-order provider setup, held-return miss, and SumUp units
stefan-burke Aug 15, 2026
126ad36
Fix SumUp observing classification and Stripe return capture
stefan-burke Aug 15, 2026
8670693
Add the missing return-replay step and drop Delete from recorded claims
stefan-burke Aug 15, 2026
16cd385
Add a static step-coverage test for the live payment Feature
stefan-burke Aug 15, 2026
1d1a0f2
Validate SumUp refund-event status; propagate provider read errors
stefan-burke Aug 15, 2026
11a5f5b
Keep NTFY_URL away from the app server under test
stefan-burke Aug 15, 2026
4e74051
Route a settled partial refund to an owner decision, not a recheck
stefan-burke Aug 15, 2026
bb1521b
Show the returned money before an owner confirms a partial refund
stefan-burke Aug 16, 2026
74061e6
Give every provider HTTP call a shared 20s timeout
stefan-burke Aug 16, 2026
6e65279
Record the verified Codex findings that stay open on PR #2065
stefan-burke Aug 16, 2026
4825918
Map the site's money state machines on /admin/schema
stefan-burke Aug 16, 2026
0d94a4c
Fix local dev
stefan-burke Aug 16, 2026
a25aae5
Format AGENTS.md dev-database paragraph with deno fmt
stefan-burke Aug 16, 2026
0c4b128
Shrink the refunded-predicate comment under the new limit
claude Aug 17, 2026
0dcb0a6
Remove three ghost TODO headings the stack rebase resurrected
claude Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ tickets.db
*.sqlite-wal
.db-key
.env
.db-key

# Generated build output
dist/
Expand Down
23 changes: 20 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,21 @@ GitHub.
races, and owner choices. Schemas describe facts, state transitions describe
changes, and transactions or revision checks protect concurrent changes. Do
not start coding while any part is implicit or awaiting human approval.
- **Once it is built, the code is the authority**: A behavior contract governs
work that does not exist yet. The moment a slice lands, its code and tests
become the truth, and the contract's job changes from _specifying_ that slice
to _pointing at_ it: as each slice merges, update the plan's module map to
name the real files and exported names, and say where the built thing
knowingly differs from what was planned. From then on, check every finding,
question, or proposed amendment against the actual `src/` and `test/` before
touching the document — when the built behavior is wrong, fix the code and pin
it with a regression test instead of rewriting prose to describe the bug.
Amend the contract only when the _contract_ is what is wrong (it promised the
wrong behavior, or it contradicts a constraint the implementation just
proved), and then change the document and the code in the same commit. A plan
that keeps describing an implementation that already exists has quietly become
a second, drifting source of truth — and the drift is always discovered by
someone trusting the wrong one.
- **Format Markdown with Deno**: Let `deno fmt` apply its standard 80-column
wrapping to Markdown files. Do not hand-wrap prose to a different width or
unwrap paragraphs onto single long lines. Formatter exceptions such as tables,
Expand Down Expand Up @@ -1070,9 +1085,11 @@ query logging and table-scoped cache invalidation stay automatic.
- `deno task start` - Run the server
- `deno task dev` - Run the server with `--watch`, restarting it whenever a
source file changes. `build:static` runs once at the start, so an edit to a
static asset still needs the task restarted. With `DB_URL=:memory:` each
restart begins with an empty database, so pass `DB_URL=file:./local.db` to
keep one across edits
static asset still needs the task restarted. The dev database is the
gitignored `local.db` at the repo root (its key lives beside it in `.db-key`),
so data survives restarts; delete both files to start fresh. `:memory:` is not
a valid dev URL — interactive transactions open a second connection, and each
in-memory connection is its own empty database
- `deno task serve` - The bare server command that `start` and `dev` both call,
so the permissions and entry point live in one place. `dev` sets
`SERVE_WATCH=--watch` to add the watcher. Prefer `start` or `dev`, which build
Expand Down
2,110 changes: 1,482 additions & 628 deletions PLAN.md

Large diffs are not rendered by default.

469 changes: 341 additions & 128 deletions PR3_PLAN.md

Large diffs are not rendered by default.

1,969 changes: 0 additions & 1,969 deletions PR4_PLAN.md

This file was deleted.

844 changes: 658 additions & 186 deletions TODO.md

Large diffs are not rendered by default.

Loading