Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
746 commits
Select commit Hold shift + click to select a range
3676601
Merge notification, export and probe work into integration (#33)
codeGlaze Sep 10, 2026
bcf713d
Keep the save sparkle on the button instead of in the gap beside it
codeGlaze Sep 8, 2026
117d836
Drop a str around a string literal in the callout ring
codeGlaze Sep 10, 2026
76dd949
Heal a reloaded character too, and announce the heal after navigating
codeGlaze Sep 10, 2026
ae6be67
Save a character repaired on refresh back to the builder's draft
codeGlaze Sep 12, 2026
d3880ec
Take entries set aside on load out of the library copy too
codeGlaze Sep 12, 2026
44e9720
Export a source as the library holds it, not as a link remembered it
codeGlaze Sep 12, 2026
9ef8bfe
Mend the shapes damaged homebrew actually takes, and set aside the rest
codeGlaze Sep 12, 2026
a4c69f6
Repair damaged homebrew on import and on load, and say what was repaired
codeGlaze Sep 12, 2026
a89b210
Show a partial import as a warning, with each line marked
codeGlaze Sep 12, 2026
bd664a9
Name a nameless item in the missing-fields dialog
codeGlaze Sep 12, 2026
e30e006
Keep the import-log button off the page until there is a log, and und…
codeGlaze Sep 12, 2026
b48d312
Give the browser probes one way to find Chromium, and skip when there…
codeGlaze Sep 12, 2026
0b5c05b
Load a library stored as text, and set aside one that isn't a library…
codeGlaze Sep 12, 2026
0b71b8b
Save a selection anyway under a key the next load keeps
codeGlaze Sep 12, 2026
01217a1
Store renames chosen for existing items even when nothing incoming is…
codeGlaze Sep 12, 2026
dd2ff2b
Check that every fix path is saved, survives a reload and reaches the…
codeGlaze Sep 12, 2026
1d1d738
Record this branch's hotfixes in the branch changelog
codeGlaze Sep 12, 2026
09c22e1
Skip an entry that isn't a map instead of crashing the import
codeGlaze Sep 12, 2026
1f8fef2
Give an entry with no source the name of the source it sits in
codeGlaze Sep 12, 2026
4ffc212
Record the source-name and non-map import fixes in the branch changelog
codeGlaze Sep 12, 2026
e954826
Keep the app starting when stored homebrew can't be sorted
codeGlaze Sep 12, 2026
9a85617
Record the startup fix in the branch changelog
codeGlaze Sep 12, 2026
c0b757c
Repair broken keys and card lists in homebrew, and stop import and ex…
codeGlaze Sep 12, 2026
fa57ebb
Keep bad homebrew from stopping startup or a page, and set aside what…
codeGlaze Sep 13, 2026
90a87d9
Record the homebrew safety net in the branch changelog
codeGlaze Sep 13, 2026
d8f56ea
Fix homebrew save: a second save, a rename, and a chain of renames
codeGlaze Sep 13, 2026
a660345
Pin the homebrew save lifecycle
codeGlaze Sep 13, 2026
186bf39
Merge fix/homebrew-save-keys into integration
codeGlaze Sep 13, 2026
694b058
Merge origin/integration (homebrew save keys) into integration-local
codeGlaze Sep 13, 2026
2f597e7
Fold the five landed branch changelogs into CHANGELOG.md
codeGlaze Sep 13, 2026
e86bdad
docs: custom items investigation notes for #669
codeGlaze Apr 13, 2026
241dd05
docs: rewrite investigation notes against agents/develop KB
codeGlaze Apr 13, 2026
42bed28
docs: full auth chain audit + revised P2 with logged-in? predicate
codeGlaze Apr 13, 2026
b2ec11f
docs: correct sloppy assessments in auth-chain audit
codeGlaze Apr 13, 2026
d58321b
docs: verify guard claim, measure blast radius, restore logged-in?
codeGlaze Apr 14, 2026
6c4680c
docs: drop logged-in? wrapper — doesn't clear justification bar
codeGlaze Apr 14, 2026
1829558
docs: SSOT answer — get-auth-token + strong docstring, no wrapper
codeGlaze Apr 14, 2026
28fbbce
docs: log reg-api-sub template extraction as follow-up #3
codeGlaze Apr 14, 2026
1986f12
docs: add P4 — comment-and-document the orphaned remote-item chain
codeGlaze Apr 14, 2026
3717e16
docs: test strategy — stop hand-wringing, use what's actually there
codeGlaze Apr 14, 2026
cd2662b
docs: audit existing test coverage, confirm branch + mock constraints
codeGlaze Apr 14, 2026
436284a
test: add equipment-subs tests for custom-items guard + filter reacti…
codeGlaze Apr 14, 2026
27a9245
fix: make filtered-items/filtered-spells reactive (#669 P1)
codeGlaze Apr 14, 2026
dbb71dc
refactor: move get-auth-token to event_utils, consolidate auth path (P2)
codeGlaze Apr 14, 2026
b7bd29d
fix: add console.warn observability to custom-items 401 path (P3)
codeGlaze Apr 14, 2026
7af6253
refactor: comment out orphaned ::mi5e/remote-item chain (P4)
codeGlaze Apr 14, 2026
f195249
refactor: extract reg-api-sub HOF, migrate 5 API-backed subs (P5)
codeGlaze Apr 14, 2026
85253af
test: pin :user sub compound on-401 behavior (P5 refactor guard)
codeGlaze Apr 14, 2026
4476d88
test: stage Playwright spec for #669 custom-items regression
codeGlaze Apr 14, 2026
fe19d27
docs: finalize investigation notes with execution outcome
codeGlaze Apr 14, 2026
3bd7786
Merge fix/filtered-list-staleness into integration
codeGlaze Sep 13, 2026
18c2865
Record fix/filtered-list-staleness in CHANGELOG.md
codeGlaze Sep 13, 2026
185d703
Merge origin/integration (#669 filtered lists, changelog fold) into i…
codeGlaze Sep 13, 2026
476e948
Send the auth token from the character problem report again
codeGlaze Sep 13, 2026
e8d8446
Drop the requires equipment_subs no longer uses
codeGlaze Sep 13, 2026
1863fc4
Keep the #669 comments to what a reader needs
codeGlaze Sep 13, 2026
9b75733
Say what a share link does carry for custom items
codeGlaze Sep 13, 2026
53a5fbf
Remove the #669 investigation log
codeGlaze Sep 13, 2026
c61c8c2
Stop the config report shadowing var, get and integer?
codeGlaze Sep 14, 2026
65b0915
Drop the unused PDDocument import from pdf.clj
codeGlaze Sep 14, 2026
6d880c1
Refer only what two test namespaces use
codeGlaze Sep 14, 2026
6f1e630
Log out when the server rejects the token a loader sent
codeGlaze Sep 14, 2026
c34075f
Leave item ids and owners out of share links
codeGlaze Sep 14, 2026
2cae044
Answer item reads for the owner only, and never show an owner's email
codeGlaze Sep 14, 2026
5c8f054
Pin that saving an item from the builder loses nothing
codeGlaze Sep 14, 2026
d72bcc3
Send API calls and PDF downloads to the server that served the page
codeGlaze Sep 14, 2026
eb8171d
Name the e2e suites, and let run.sh run any of them on any machine
codeGlaze Sep 14, 2026
7f37582
Load a character's custom items from the server with the character
codeGlaze Sep 14, 2026
359095b
Check in a browser that a character shows its owner's items to others
codeGlaze Sep 14, 2026
b4f3f76
Record today's fixes in the branch changelog
codeGlaze Sep 14, 2026
e1fef76
A standing duplicate key no longer traps the item that owns it
codeGlaze Sep 14, 2026
a92b47b
Share the character the share button belongs to
codeGlaze Sep 14, 2026
ac2e45b
Strip pasted media out of shared homebrew
codeGlaze Sep 14, 2026
2017953
Short share links: the homebrew goes to the server encrypted
codeGlaze Sep 14, 2026
4cbe7a6
Record short share links and the share fixes in the branch changelog
codeGlaze Sep 14, 2026
beee495
Check that the character list's Copy link shares the same character
codeGlaze Sep 14, 2026
19d25c5
Store share snapshots as bytes, with caps halved from measurement
codeGlaze Sep 14, 2026
191b612
New link revokes a character's share links; the same homebrew keeps i…
codeGlaze Sep 14, 2026
eab46b9
One share link per character that always shows its current homebrew
codeGlaze Sep 14, 2026
aca6002
Describe short share links as they now work in the branch changelog
codeGlaze Sep 14, 2026
e43b41c
Store nothing for a character until its owner presses Share link
codeGlaze Sep 14, 2026
d748d3b
Note Share link in the branch changelog's short share links entry
codeGlaze Sep 14, 2026
c371937
Share the e2e suites' helpers in scripts/e2e/lib.js
codeGlaze Sep 14, 2026
5940045
Delete share links nobody has used for 180 days
codeGlaze Sep 14, 2026
c69dcf9
Parties take only characters, and keep a shared character's homebrew
codeGlaze Sep 14, 2026
d78bd9e
Record expiring share links and party changes in the branch changelog
codeGlaze Sep 14, 2026
110569d
Only real use keeps a share link, and downtime does not count against it
codeGlaze Sep 14, 2026
d602555
Say in the branch changelog what share link pruning deletes and what …
codeGlaze Sep 14, 2026
3895027
A share with no recorded use expires, and the prune window is at leas…
codeGlaze Sep 14, 2026
a96c59b
Note the 30-day minimum prune window in the branch changelog
codeGlaze Sep 14, 2026
e3aa6d0
Stop sharing, a note when a share link expires, and a project-wide he…
codeGlaze Sep 14, 2026
567f4bd
Neutral wording for share settings in the startup log, and What's New…
codeGlaze Sep 14, 2026
6e68266
Record Stop sharing, the expired-link note, the heartbeat and share w…
codeGlaze Sep 14, 2026
b50783d
Font Awesome 5 names for icons that rendered blank
codeGlaze Sep 15, 2026
3cacef7
Delete the tokens parties saved for a character when its share ends
codeGlaze Sep 15, 2026
04cb322
Call out a mistyped ORCPUB_SHARE_PRUNE_DAYS in the startup banner
codeGlaze Sep 15, 2026
0940636
Document the share link settings in ENVIRONMENT.md
codeGlaze Sep 15, 2026
593cb50
Record the icon, party token, banner and settings fixes in the branch…
codeGlaze Sep 15, 2026
f185220
Phone layout: the expired-link note gets its own line, and list-row b…
codeGlaze Sep 15, 2026
5e41713
A character's sharing is one line under its title
codeGlaze Sep 15, 2026
5734e27
Record the share line in the branch changelog
codeGlaze Sep 15, 2026
3362876
The character list row shares with one Copy link button
codeGlaze Sep 15, 2026
93100ba
Record the character list row's Copy link button in the branch changelog
codeGlaze Sep 15, 2026
0a08934
Keep the phone header from crowding itself
Sep 17, 2026
47bb73f
Take the Garden class definitions off the stalled refactor branch
Sep 17, 2026
2c9c553
Put the registration and login pages on the harvested classes
Sep 17, 2026
67a1e18
Qualify the get-auth-token call that no longer resolves
codeGlaze Sep 14, 2026
ed4f5a4
Mint every key with its source's tag, and let a source choose that tag
codeGlaze Sep 18, 2026
faaca0c
Merge fix/get-auth-token-undeclared into integration
codeGlaze Sep 18, 2026
1bb3eb2
Merge feat/source-tagged-keys into integration
codeGlaze Sep 18, 2026
43a56c6
Judge passwords by length and shape, not by character classes
Sep 18, 2026
b459e6b
Refuse passwords the breach corpus already knows
Sep 18, 2026
de84a01
Tell people the password is common, not that it was breached
Sep 19, 2026
db63d2c
Require clojure.string in the breach test rather than leaning on it b…
Sep 19, 2026
073bd27
Say too common, the way the strength meter would say it
Sep 19, 2026
14f88cd
Cut the explanation to one line, and keep it out of the form
Sep 19, 2026
9632975
Drop the explanation string; it had nowhere to go
Sep 19, 2026
5f4d34b
Consult the per-address throttle that login never asked
Sep 19, 2026
3570624
Stop password reset from answering whether an address is registered
Sep 19, 2026
b2aefc9
Warn an account holder when one account is tried from several places
Sep 19, 2026
4f75360
Put a time and a browser in the sign-in notice
Sep 19, 2026
70c3f49
Close the login oracle, cap the mail endpoints, raise the minimum to 12
Sep 19, 2026
79e7a32
Make the breach check auditable instead of silently fail-open
Sep 19, 2026
cfd39eb
Keep only a digest of the reset key, and expire it in two hours
Sep 19, 2026
91acfcd
Give the server's objections somewhere to appear, and cap registration
Sep 20, 2026
cc5f865
Set the registration cap by the table it must not break
Sep 20, 2026
a744b6d
Count what the limits turn away, so the numbers can be tuned
Sep 20, 2026
ad5ebcb
Close the separator hole, and actually raise the minimum this time
Sep 20, 2026
40d6ea2
Tell one host hammering apart from a pool of them
Sep 20, 2026
389b036
Make the meter ask the validator instead of guessing alongside it
Sep 20, 2026
62c8da4
Write down what this branch raised and did not do
Sep 20, 2026
6b72b90
Serve the password-changed page
Sep 20, 2026
2f3c873
Stop the register form and a dead reset link looking broken
Sep 20, 2026
934f5aa
Record the .lein-env clobbering that breaks a parallel e2e boot
Sep 20, 2026
ca9f084
Open the auth redesign branch with the decisions it implements
Sep 20, 2026
935c996
Give the shared message components a light ground
Sep 20, 2026
c9c6732
Build the notched auth field
Sep 20, 2026
ae0e80f
Correct the shell claim, and write down the order of the rest
Sep 20, 2026
3b1ac94
Move the heading into the shell, as ink with an amber rule
Sep 20, 2026
042ee59
Stop a margin utility from making 194 places bold
Sep 20, 2026
70b6a41
Summarise what is wrong above the form, and fix the tail
Sep 20, 2026
141894f
Confirm the password, until you can read it
Sep 20, 2026
bd43434
Offer a correction when the email domain looks mistyped
Sep 20, 2026
25dd04c
Record progress, the measured blast radius, and where the record lives
Sep 20, 2026
a0d9e1d
Ignore the agent entry point on this branch
claude Sep 20, 2026
807bce1
Merge refactor/garden-harvest: the harvested Garden classes and the p…
codeGlaze Sep 20, 2026
4005a46
Merge integration-local: resolve the auth pages against the harvested…
codeGlaze Sep 20, 2026
cef432a
Refuse a password for the corpus only when it is egregiously common
codeGlaze Sep 20, 2026
ecb1319
Sweep the auth pages: the doubled legal links, the one-word link, the…
codeGlaze Sep 20, 2026
0b6b5c3
Record the sweep, and put the phone gutters back where they belong
codeGlaze Sep 20, 2026
bdc5867
Merge feature/auth-redesign: the password rules, the breach screening…
codeGlaze Sep 20, 2026
d813119
Merge feature/mobile-layout: the share line and the phone-width fixes
codeGlaze Sep 20, 2026
d476dbd
Put the last three auth pages on the shared heading
codeGlaze Sep 20, 2026
0380fc9
Password reset told nobody why it would not go
codeGlaze Sep 20, 2026
0fbfab8
Give the reset page the meter and the reveal it always should have had
codeGlaze Sep 21, 2026
e147938
Carry the server's reason to the page, and cover these flows for the …
codeGlaze Sep 21, 2026
b30876e
The corpus verdict belongs to the meter, and the card's text was set …
codeGlaze Sep 21, 2026
b5b36d2
Put every homebrew save behind one decision function
codeGlaze Sep 21, 2026
09552bc
Cover the limits, document the new variables, and correct a stale note
codeGlaze Sep 21, 2026
9657d6d
Build the rule chips and the rung tips that were designed with the meter
codeGlaze Sep 21, 2026
b78c3e3
Give the outcome pages a layout, and group the login page's other way…
codeGlaze Sep 21, 2026
c0f7d97
Share the body of the auth pages, not just the shell
codeGlaze Sep 21, 2026
c3ddbb6
Share the password-making area between the two places a password is made
codeGlaze Sep 22, 2026
6d0b847
Write down what the reset page's identifier check knows, and why
codeGlaze Sep 22, 2026
bbf3328
Tell people when their credentials change, and take a password to mov…
codeGlaze Sep 23, 2026
48de6da
A password reset takes back the sessions that existed before it
codeGlaze Sep 24, 2026
13e28b8
Sign out everywhere, from the account page
codeGlaze Sep 24, 2026
af92ec7
Route api-subs through http-safe, and stop a stale login from landing
codeGlaze Sep 24, 2026
5ebff88
Bound the image-probe endpoint: concurrency slots and a per-host limit
codeGlaze Sep 24, 2026
f740a6c
Keep the homebrew boot-rescue's storage call inside its own catch
codeGlaze Sep 24, 2026
4b60e85
cljs-harness: find Chrome through the shared lib, not a private copy
codeGlaze Sep 24, 2026
79fb7da
Make the debounce test's second-change case test what it says
codeGlaze Sep 24, 2026
b6550e4
ATTRIBUTION: fix the vendored-icon count to match the table
codeGlaze Sep 24, 2026
b1fa456
What's New close control: a real button, keyboard-reachable
codeGlaze Sep 24, 2026
340656c
Revert the debounce test rewrite: it was timing-flaky
codeGlaze Sep 24, 2026
d3a3392
Drive the debounce test's second change with a fake clock, not real time
codeGlaze Sep 24, 2026
22adde3
system: start token withdrawals before the server takes traffic
codeGlaze Sep 24, 2026
47a1173
cljs-harness: exit nonzero unless a clean summary was seen
codeGlaze Sep 24, 2026
e456955
security: an hourly refresh no longer drops a withdrawal noted since …
codeGlaze Sep 25, 2026
465666d
registration: judge a password as it is stored, trimmed
codeGlaze Sep 25, 2026
054e42c
relocate-content: a renaming move takes its subclasses and subraces a…
codeGlaze Sep 25, 2026
ef2c984
branch-changelog: the three Greptile fixes
codeGlaze Sep 25, 2026
ec4a3c5
relocate-content: move classes and races before what points at them
codeGlaze Sep 25, 2026
d612fc7
branch-changelog: bulk move ordering
codeGlaze Sep 25, 2026
d7640dd
test: probe every homebrew link under a rename, and that each is read
codeGlaze Sep 26, 2026
cd82f24
test: what the player gets when a clash rename strands a link
codeGlaze Sep 26, 2026
28c757b
Merge remote-tracking branch 'origin/fix/duplicate-key-traps-its-owne…
codeGlaze Sep 26, 2026
e2457ff
Merge feat/source-tagged-keys into integration-local
codeGlaze Sep 26, 2026
b9a98f4
The address says something answers; the name says what
codeGlaze Sep 21, 2026
3fb0630
relocate-content: a renaming move takes its subclasses and subraces a…
codeGlaze Sep 25, 2026
ab8b039
relocate-content: move classes and races before what points at them
codeGlaze Sep 25, 2026
2e96c05
test: probe every homebrew link under a rename, and that each is read
codeGlaze Sep 26, 2026
5d8fc3a
test: what the player gets when a clash rename strands a link
codeGlaze Sep 26, 2026
1d80421
Never redirect a key the builder still offers; warn from the same list
codeGlaze Sep 27, 2026
1042c74
One list of every kind of link between homebrew items; share links re…
codeGlaze Sep 27, 2026
b5f2a1b
Every key change carries every link, scoped to the side it came from
codeGlaze Sep 27, 2026
7210fad
lifecycle test: refer testing, and stop shadowing the k helper
codeGlaze Sep 27, 2026
d689a31
Revert the duplicate-key-traps-its-owner merge; its gating is owned e…
codeGlaze Sep 27, 2026
f82f944
branch-changelog: source-tagged keys, and why the gating was reverted
codeGlaze Sep 27, 2026
796e15d
Restore screen: show what is still set aside, fill the source, say wh…
codeGlaze Sep 27, 2026
31329bc
One gate for every library write
codeGlaze Sep 27, 2026
12eb5a2
Ask before deleting what others use; say what a re-import updated
codeGlaze Sep 27, 2026
bf1ca6a
Two tabs no longer lose each other's library changes
codeGlaze Sep 27, 2026
8e76bbf
Reads that don't lie: languages by name, broken-link marks, rename notes
codeGlaze Sep 27, 2026
c0e3845
Repair what past renames left, keep the tidied library, and a way back
codeGlaze Sep 28, 2026
26f01b9
Test that a link to nothing never breaks a page
codeGlaze Sep 28, 2026
23450f7
Name the missing race in a locked feat; match legacy keys as lookup does
codeGlaze Sep 28, 2026
49a5352
Test that a character picking an item with a link to nothing still bu…
codeGlaze Sep 28, 2026
3e65f02
Test the Move note in the real app
codeGlaze Sep 28, 2026
4e88b04
The missing-content warning also reports missing spells and languages
codeGlaze Sep 28, 2026
c50e653
Ask which item a character meant with a banner that waits for an answer
codeGlaze Sep 28, 2026
7c199b2
Ask before moving links in other packs; check links by type
codeGlaze Sep 28, 2026
5209eb9
Stop writes that lose data or claim success they did not have
codeGlaze Sep 28, 2026
a376470
Fix three library-links gaps: language choices, false-key leaks, mult…
codeGlaze Sep 28, 2026
f357859
Stop cross-tab storage bugs from losing homebrew library data
codeGlaze Sep 28, 2026
4968a3b
Refuse, not duplicate, a mint onto a legacy untagged address
codeGlaze Sep 28, 2026
4f7ebf3
Address the outside review: same-revision writes, key-change version,…
codeGlaze Sep 28, 2026
a90fe7c
Keep a feat pick a feat: :feats holds feats only, though feats are pi…
codeGlaze Sep 28, 2026
b1feb5b
Notices: decisions in one framed callout, names instead of keys, no g…
codeGlaze Sep 29, 2026
7ae78fc
Import modals in the app's type and weight; switches for on/off; one …
codeGlaze Sep 29, 2026
43f9377
Heal and check a character's picks by their type, on every page
codeGlaze Sep 29, 2026
48dccbe
Heal path comments: spec and field notes only
codeGlaze Sep 29, 2026
2f5b5a1
Upgrade test checks the footer names the served bundle
codeGlaze Sep 29, 2026
0ad3094
Comments point at the recorded decisions instead of narrating them
codeGlaze Sep 29, 2026
90334b7
Check comments and docstrings against the comment rule
codeGlaze Sep 29, 2026
d34bdb2
Every comment-check hit is fixed or reviewed, and a review covers exa…
codeGlaze Sep 29, 2026
38dbaa9
One heal input, one home for pick types
codeGlaze Sep 29, 2026
76395a1
The comment check keeps FIELD NOTEs as recorded
codeGlaze Sep 29, 2026
05a115c
Name the types a character picks in one place: one-place-types
codeGlaze Sep 29, 2026
6cfccce
Greptile's four open findings on #37
codeGlaze Sep 29, 2026
3d4f369
The upgrade test's footer check works on dev and production builds
codeGlaze Sep 29, 2026
48f945b
Comment check: a note exempts only itself; metadata docstrings are ch…
codeGlaze Sep 29, 2026
502f356
Merge the comment check (#38) into the homebrew-keys fix
codeGlaze Sep 30, 2026
332ae1d
Reconcile the comment check with this branch's code
codeGlaze Sep 30, 2026
95835fd
Branch changelog for the homebrew-keys fix
codeGlaze Sep 30, 2026
bcba3bf
Fold the branch changelog into Summer Patch
codeGlaze Sep 30, 2026
6fdccb6
Changelog: say where the write gate refuses and where it reports
codeGlaze Sep 30, 2026
614c17f
Merge port/save-gate into integration (#37)
codeGlaze Sep 30, 2026
d09964c
Party add/remove answer with the updated party
codeGlaze Sep 30, 2026
ac0dc95
Fix the comment check's recorded debt: 309 hits, baseline now empty
codeGlaze Sep 30, 2026
cbc2e74
Fold the fix/comment-debt changelog into Summer Patch
codeGlaze Sep 30, 2026
1aa80ec
Merge fix/comment-debt into integration (#39)
codeGlaze Sep 30, 2026
afa2ac3
Merge integration into the accounts branch
codeGlaze Oct 1, 2026
8571809
comments: bring the accounts batch to the comment rule
codeGlaze Oct 1, 2026
f1e2671
Set broken homebrew aside through the library gate
codeGlaze Oct 1, 2026
658ac89
Build the template when a character is opened, so its heal lands then
codeGlaze Oct 2, 2026
ea91cc2
Build the template under the spinner on a page that shows a character
codeGlaze Oct 2, 2026
3af1515
run.sh: watch the folders the bundle is built from, read from its config
codeGlaze Oct 2, 2026
a078c78
Loading spinner: a spiral, a d20 or a spell circle, at random
codeGlaze Oct 2, 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
5 changes: 5 additions & 0 deletions .clj-kondo/config.edn
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@
(orcpub.routes-test/with-conn)
(orcpub.routes.folder-test/with-conn)
(orcpub.email-change-test/with-conn)
(orcpub.routes.public-reads-test/with-conn)
(orcpub.routes.item-save-test/with-conn)
(orcpub.routes.share-test/with-conn)
(orcpub.routes.party-test/with-conn)
(orcpub.heartbeat-test/with-conn)
(user/with-db)]}}
;; native/cljs and web/cljs are separate source roots; kondo doesn't know
;; about them so ns names appear to mismatch their file paths.
Expand Down
56 changes: 56 additions & 0 deletions .githooks/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env bash
# pre-push guard (reminder, not an auto-fold): refuse to push a commit that still
# carries docs/branch-changelog.md onto integration / develop / main. Mirrors
# .github/workflows/changelog-guard.yml so a forgotten fold is caught locally
# instead of on CI. The fold itself stays a deliberate manual step:
# scripts/fold-branch-changelog.sh "<release>" (then commit, then push)
#
# Activate once per clone: scripts/setup-hooks.sh (or: git config core.hooksPath .githooks)

status=0
zero="0000000000000000000000000000000000000000"

# Current in-progress release = the first "## [Name]" in CHANGELOG.md, so the
# suggested fold command is copy-pasteable. Falls back to a placeholder.
release="$(grep -m1 -oE '^## \[[^]]+\]' CHANGELOG.md 2>/dev/null | sed -E 's/^## \[(.+)\]$/\1/')"
release="${release:-<release>}"

while read -r _local_ref local_sha remote_ref _remote_sha; do
[ "$local_sha" = "$zero" ] && continue # branch deletion — skip
case "$remote_ref" in
refs/heads/integration|refs/heads/develop|refs/heads/main)
guarded=1
if git cat-file -e "${local_sha}:docs/branch-changelog.md" 2>/dev/null; then
target="${remote_ref#refs/heads/}"
echo "" >&2
echo " pre-push blocked: docs/branch-changelog.md is still un-folded on the commit" >&2
echo " bound for '${target}'. Fold it into CHANGELOG.md, then commit and re-push:" >&2
echo "" >&2
echo " scripts/fold-branch-changelog.sh \"${release}\"" >&2
echo "" >&2
echo " (Decide whether this branch earned a '## Highlights' before folding —" >&2
echo " see docs/branch-changelog.template.md. To bypass once: git push --no-verify.)" >&2
echo "" >&2
status=1
fi
;;
esac
done

# Same rules CI applies, run here so a style problem is a local message rather than
# a red build after the merge. Skipped when python3 is absent; CI still catches it.
if [ "${guarded:-0}" = "1" ] && [ -x scripts/lint-changelog.py ] && command -v python3 >/dev/null 2>&1; then
if ! scripts/lint-changelog.py >/dev/null 2>&1; then
echo "" >&2
echo " pre-push blocked: CHANGELOG.md does not follow the house style." >&2
echo "" >&2
scripts/lint-changelog.py 2>&1 | sed -E 's/^::error [^:]*::/ /; s/^/ /' >&2
echo "" >&2
echo " House style: docs/branch-changelog.template.md" >&2
echo " (To bypass once: git push --no-verify.)" >&2
echo "" >&2
status=1
fi
fi

exit $status
3 changes: 2 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation if necessary
- [ ] There is no commented out code in this PR.
- [ ] My changes generate no new warnings (check the console)
- [ ] My changes generate no new warnings (check the console)
- [ ] `docs/branch-changelog.md` is updated in the house style (`docs/branch-changelog.template.md`), and I decided whether this branch earns a `## Highlights`.
48 changes: 48 additions & 0 deletions .github/workflows/changelog-guard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Guard: a branch changelog must be FOLDED into CHANGELOG.md (and removed) before
# landing on integration or develop. See docs/CONTRIBUTING.md.
#
# Runs on push (the post-merge backstop): if a merge landed on integration/develop
# without folding its docs/branch-changelog.md, this goes red — run
# scripts/fold-branch-changelog.sh, commit, and push again. Not run on
# pull_request, since the branch changelog legitimately lives on the feature branch
# until it is folded at merge time.

name: Changelog guard

# The fold guard is a post-merge backstop and only makes sense on push. The style
# lint is the opposite: it is feedback, so it also runs on pull_request, where the
# author can still act on it. Both are in one workflow because they are one topic.
on:
push:
branches: [integration, develop, main]
pull_request:
paths: ["CHANGELOG.md", "scripts/lint-changelog.py", ".github/workflows/changelog-guard.yml"]
workflow_dispatch:

permissions:
contents: read

jobs:
branch-changelog-folded:
name: Branch changelog folded
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: A branch changelog must be folded before landing here
run: |
if [ -f docs/branch-changelog.md ]; then
echo "::error file=docs/branch-changelog.md::An un-folded branch changelog is present on $GITHUB_REF_NAME. Fold it into CHANGELOG.md and remove it before landing — run: scripts/fold-branch-changelog.sh \"<release>\""
exit 1
fi
echo "OK — no un-folded branch changelog on $GITHUB_REF_NAME."

changelog-style:
name: Changelog house style
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# No setup step: ubuntu-latest ships python3, and the linter imports nothing
# outside the standard library on purpose, so this stays a checkout and a run.
- name: CHANGELOG.md follows docs/branch-changelog.template.md
run: scripts/lint-changelog.py --stats
50 changes: 43 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ pom.xml
/classes/
/out/
/target/
/node_modules/
.clj-kondo
# no trailing slash: the e2e tooling is run by symlinking this to a sibling checkout's copy,
# and a trailing slash matches only a real directory
/node_modules
# the linter's cache, not its config: config.edn is tracked and must stay addable
.clj-kondo/*
!.clj-kondo/config.edn
.calva
.lein-deps-sum
.lein-repl-history
Expand All @@ -50,7 +54,10 @@ deploy/homebrew/*
branch-sync-plan.md
dev/test-accounts.edn

# E2E test artifacts
# E2E test artifacts. Unanchored, because a leading slash pins the pattern to the
# repo root: /node_modules/ and /e2e/node_modules/ both missed the real one at
# scripts/e2e/node_modules, and 179 files of it went into a commit.
node_modules/
/e2e/node_modules/
/e2e/playwright-report/
/e2e/test-results/
Expand All @@ -71,12 +78,19 @@ cljs-test-runner-out
# Cursor IDE local config (contains user-specific paths)
.cursor/

# Claude Code local data (conversation history, credentials)
# Local assistant tool state (conversation history, credentials) — belongs in dotfiles,
# not in a code branch
.claude-data/

# Agentic/AI tool files — belong in dotfiles or agents/ branch, not code branches
.claude/

# The agent entry point. Versioned on agents/develop, the agentic silo, and copied into a
# working tree per environment by scripts/agent-setup.sh. Ignored here because this branch
# ships to the public repo: an untracked copy is one `git add -A` away from being committed,
# which is how it drifted onto code branches before, and why the restructure deleted it.
# Note `.claude/` above does NOT cover this — that is a directory, and CLAUDE.md is a file
# at the repo root.
/CLAUDE.md

# NewRelic (DMV-specific, contains license key)
newrelic*

Expand All @@ -101,8 +115,30 @@ cljsjs/
# Local devcontainer setup (superseded by dotfiles)
.devcontainer/local-setup.sh

# Design handoff reference material (preserved on agents/develop, not committed to code branches)
# Design handoff reference material (kept out of the code branches)
design_handoff_character_menus

# Generated clojure-CLI cljs build artifact (regenerated from project.clj; lein/figwheel-main is canonical)
/deps.edn

# Deploy-injected static vendor assets (font-awesome, etc.). index.clj references
# /assets/... at runtime, but these binaries are provided at deploy time and are
# not part of the source tree. A local copy may exist to render the screenshot
# harness faithfully; never commit the vendored fonts/CSS.
/resources/public/assets/
/package-lock.json

# Perf-investigation scratch: throwaway probe scripts and the multi-megabyte .orcbrew
# packs generated by dev/scale_orcbrew_pack.clj. The harnesses worth keeping live in
# test/browser/; the packs are regenerable and must not be committed.
/dev-scratch/
dev-scratch/shots/

# Throwaway probe scripts at repo root (_pop.js, _mob.js …). Real probes live in
# test/browser/ — see docs/kb/fast-browser-probes.md. This stops `git add -A` sweeping
# a hardcoded-path scratch file into a commit, which happened twice in one session.
_*.js

# Python bytecode from scripts/ (scripts/lint-changelog.py is run, not imported)
__pycache__/
*.pyc
Loading