Changelog
All notable changes to Generous.nz are recorded here, grouped by version. Every deployed build has a version number, a git tag, and an entry below.
Versioning scheme
Versions follow MAJOR.MINOR.PATCH:
- 0.x โ pre-launch. Minor bumps mark a completed build phase or major feature set; patches are bug fixes on the current build.
- 1.0.0 โ first public launch.
- 1.x+ โ post-launch: minor = new features, patch = fixes, major = breaking changes or significant re-architecture.
Each version is tagged in git (v0.2.0) and the current version is kept in
package.json. See docs/version-control.md for how to cut a release.
[0.9.363] โ 2026-09-16
Fixed
- The draw-date check now also runs when a campaign is first created โ it only covered edits, so a donation campaign that set a draw date on the way in still went straight through. Caught by the live verification run, not by reading the code.
[0.9.362] โ 2026-09-16
Fixed
- The AI can no longer approve content our own screening has flagged. The word scan raises a flag the moment it sees a restricted term, and the AI review then ran anyway and could approve the item โ so a flagged campaign went live with an ignored flag sitting in the queue. Any unresolved flag now stops auto-approval: the item waits for a person, exactly as it should. Flags are also written before the review is scheduled, closing the window where a flag landed a moment too late to matter. This applied to the wholesale review as well, which had its own copy of the same hole.
- A draw is a draw, whatever the campaign type says. A prize draw is a game of chance and needs a licence under the Gambling Act 2003, but the raffle guard only covered campaigns typed as raffles โ a donation campaign describing a draw sailed through. Now: prize draw / lucky draw / sweepstake wording is scanned for, a draw date set on a campaign that isn't a raffle is flagged automatically, and the AI is told to treat any game of chance as high risk. All three hold the campaign for a person.
- Repeated saves no longer stack duplicate flags. Saving the same flagged copy twice put two identical flags in the queue; flags are now deduplicated per concern, so the queue shows what actually needs a person.
- A suspended business's items no longer stay on sale in other people's stores. Copying a catalogue item into a fundraiser's store (and the Community Campaign's direct-buy listing) created a separate row that the suspension cascade didn't touch, so a suspended supplier's products stayed visible in someone else's storefront. Checkout already refused them; now they come down too, and go back if the business is reinstated.
[0.9.361] โ 2026-09-16
Docs
- The test runbook has a new step (4G) that exercises the suspension cascade: seed a live account, suspend it, confirm everything goes offline and cannot be bought, confirm the moderation queue can't quietly reverse it, then reinstate and confirm only what came down comes back โ and clean the test data up afterwards.
[0.9.360] โ 2026-09-16
Fixed
- Suspending an account now takes its content offline. Suspension used to only flip a status flag, so a suspended โ or AI-suspended โ account kept its campaigns approved and live, its listings active and its wholesale catalogue on sale. Everything an account owns now goes offline with it: campaigns go back to draft, listings and shop items are hidden, wholesale catalogue items are paused and the business drops out of the catalogue, supporter pages are suspended, and donations and orders for that account are refused at checkout even through a direct link. Existing paid orders are untouched. Reinstating an account puts back exactly what came down โ never something the account owner, or Stripe's account guard, changed in the meantime โ and a rejection can no longer be quietly undone by approving content on the moderation queue while the account is still suspended.
- While a suspension is in force the owner sees a banner explaining what has gone offline and how to get in touch, and admins see what the suspension took down when they apply it.
[0.9.359] โ 2026-09-11
Fixed
- Editing a live campaign now goes back through moderation. An approved campaign previously saved and applied immediately, so it could be approved clean and then edited into anything โ a banned item described in fresh words, an off-platform payment ask, or a charity claim that was never verified โ with no review at all. A save that changes the public page (title, story, cover image, category, reasons, thank-you message, charity claim, prizes, event and draw details, raffle licence number) now puts the campaign back into review: the AI checks it straight away and it's usually live again within a minute, with anything uncertain going to the human queue. The owner sees a note on the form explaining the short pause instead of being sent to a page that is briefly offline.
- Non-content changes stay instant: the goal, end date, peer-to-peer toggle, the "donors cover fees" default, team names and the currency don't trigger a review. Values are compared rather than "a field was sent", so saving a form without changing the page doesn't re-queue it.
[0.9.358] โ 2026-09-11
Fixed
- Raffles can no longer be approved by the AI. Campaigns are licence-gated at creation, and the human approval action verifies the licence number against an active registration on file โ but the AI's auto-approve path set the status directly and skipped that check, so a low-risk raffle could go live with an unverified or expired licence. Raffle campaigns (and raffle ticket products) now always wait for a person: the AI logs its verdict, holds the item, and raises a high-severity flag naming the licence number to check. This closes a real compliance hole rather than just tightening a preference.
[0.9.357] โ 2026-09-11
Changed
- One definition of "live" instead of four. New shared filter
(
lib/fundraiser-live.ts) used by the browse page, the sitemap, the public fundraisers API and organisation storefronts. Live = approved, not hidden, not past its end date, and the owner has a connected Stripe payout account โ the platform fee card is deliberately excluded, since fees accrue until a card is added.
Fixed
- The sitemap no longer advertises a campaign that can't take money yet (it previously listed anything approved), while still listing every live fundraiser.
[0.9.356] โ 2026-09-11
Fixed
- Live fundraisers missing from the browse page. /explore still required the owner to have a platform fee card on file, left over from when the card was a go-live requirement. A fundraiser whose owner hadn't added one was approved and publicly reachable but silently absent from the only place people browse. The list now shows every approved fundraiser whose owner has a connected payout account, which matches the current live definition used everywhere else (the page, the sitemap and the go-live checklist).