2026-10-02 - 2026-11-02
Overview
49 Issues closed from 1 user
Closed
#22 A preview of what a change will do is dressed as a warning
Closed
#167 Alerts are written by hand in about twenty variants, and the design system has no part for a notice
Closed
#186 Locks are written out at each call site, with four key conventions and no written order
Closed
#312 A Stripe create that Stripe answered with a server error is retried for a day under a key Stripe will only answer with that error
Closed
#196 Recording a failed drain locks the obligation before the pool, while the drain locks the pool first
Closed
#295 A plan change and the scheduled-change sweep wait up to four minutes on each Stripe call, past the end of the request
Closed
#284 A FedWiki status or swap request finds its site by name, so a deleted site leaves the request pending for years and a new site with that name takes its outcome
Closed
#282 With no Stripe key, the member catalog still offers products whose prices were synced earlier, and their buttons post to a route that does not exist
Closed
#178 The readiness panel says whether members can find a product by a rule the catalog no longer uses
Closed
#283 With the FedWiki sync off, archived sites are never purged and a downgrade never parks sites
Closed
#208 A request that takes longer than eight seconds gets no answer, because the server's write timeout runs out before the request timeout
Closed
#290 A request that runs longer than eight seconds loses its answer, though the console lets it run for 32
Closed
#247 A FedWiki site's name can keep the wrong certificate answer after a status change
Closed
#293 The member's invoice list and invoice page show Stripe's invoice-level period, not the period the invoice pays for
Closed
#291 A plan switch is confirmed in a panel above the plan cards, before the button that opened it
Closed
#246 A site archived on the farm outside the console is never purged, and one archived twice can be purged at once
Closed
#245 The retention purge can delete a site a member is restoring
Closed
#287 The upgrade confirmation says the charge covers the rest of the period when the new tier is billed on another interval
Closed
#271 A grant on one ladder ends a multi-ladder subscription's tiers on every ladder, and the other ladders stay empty while the subscription bills
Closed
#272 A member can buy an add-on that has no entitlement set, pay for it every period, and receive nothing
Closed
#277 While a grant holds a ladder that a subscription still pays for, the Products page sells a tier above the grant through Checkout, so the ladder carries two subscriptions
Closed
#278 A member cannot move a subscription paused by an operator's grant to the granted tier or a higher one before the grant ends
Closed
#269 A member cannot cancel a subscription while an operator's grant holds its ladder, and the Products page shows no price for it while it bills
Closed
#270 When a grant over a paid tier ends, the subscription that pays for that tier gets it back only at its next Stripe event, not when the grant ends
Closed
#285 A subscription reconcile's Stripe calls ignore the caller's deadline
Closed
#153 An org type's default ladder can start on a product that confers nothing, and then restoring the default fails
Closed
#212 A subscription's next reconcile confers its tier again over the operator's grant that replaced it, and ends the grant
Closed
#148 A past-due subscriber is shown their ladder as unheld and offered a second subscription
Closed
#193 The subscription reconcile changes provision status without the pool lock
Closed
#209 member-console start exits with status 0 when the web server fails to start
Closed
#141 The console serves nothing, not even the certificate ask, until Temporal and the identity provider are reachable
Closed
#23 The console connects to its database as a superuser, so the privilege revokes bind nothing
Closed
#163 The Discourse webhook receiver stores members' email addresses in the raw event log
Closed
#231 A failed read of the sites entitlement tells the member they have reached their site limit
Closed
#165 FedWiki's site usage is a running total that many code paths adjust; derive it instead
Closed
#215 A default change or a reorder lists each organization it could not move with raw database error text
Closed
#216 Adding, deleting or reordering tiers while the entitlement lock is held answers "see server logs" instead of the refusal that says to try again
Closed
#194 Adding a tier locks pools in creation order, while other paths sort them by pool id
Closed
#187 Plan-wide changes to ladders and defaults run inside HTTP handlers, each with its own transaction shape
Closed
#236 The FedWiki walkthrough fails on networks whose DNS drops loopback answers
Closed
#166 Nothing looks for dead code, duplication, tangled functions or a value written from too many places
Closed
#213 A tier reorder that commits during a conferral records the wrong kind of tier change
Closed
#189 The grants listing query is written twice, and only its delivery state is checked for drift
Closed
#188 Finding which tier an organization holds on a ladder is a loop written five times
Closed
#190 Each page's template set is assembled in its own place, and the lint and tests assemble stand-ins
Closed
#33 The forum mapping tests pass only when another package has run first
Closed
#175 Checkout and the plan switch do not enforce what the Products page offers
Closed
#30 Two generated domain queries have no caller outside their own tests
Closed
#125 Creating or deleting a wiki site holds the request open until the work finishes or a timer runs out
163 Issues created by 1 user
Opened
#161 The Temporal authorization guide says a worker-role token can poll task queues; polling needs write
Opened
#162 Temporal stores workflow inputs, including members' names and sign-in identifiers, in plain text
Opened
#163 The Discourse webhook receiver stores members' email addresses in the raw event log
Opened
#164 What an unlimited numeric limit is, and how it is stored and delivered
Opened
#165 FedWiki's site usage is a running total that many code paths adjust; derive it instead
Opened
#166 Nothing looks for dead code, duplication, tangled functions or a value written from too many places
Opened
#167 Alerts are written by hand in about twenty variants, and the design system has no part for a notice
Opened
#168 The console has no notifications
Opened
#169 The console has rules for what copy to cut, but no guide for writing the copy that stays
Opened
#170 Every list of records is a table, and at mobile width tables scroll sideways
Opened
#171 An application outside the console cannot connect to it: there is no published protocol
Opened
#172 Nothing decides who enforces a numeric limit, or what happens when a connected application loses access
Opened
#173 A connected application cannot show anything inside the console
Opened
#174 FedWiki and Discourse are built into the console instead of connecting through the published contract
Opened
#175 Checkout and the plan switch do not enforce what the Products page offers
Opened
#176 No operator page shows a subscription's scheduled change, so a deferred cancellation reads as renewing
Opened
#177 A scheduled change is marked applied before Stripe carries it out, and is never retried
Opened
#178 The readiness panel says whether members can find a product by a rule the catalog no longer uses
Opened
#179 A tier change keeps its cause and the operator's note in one text column, and nothing ties together the rows one act writes
Opened
#180 Ending a plan's delivery runs the same four steps in three places, with the pool locked at different points
Opened
#181 A batch of rule changes has no record of its own, so its first change stands in for it
Opened
#182 Nothing says which billing account is an organization's own, and three paths take the oldest
Opened
#183 Whether a catalog object or customer reached Stripe is recorded in two places
Opened
#184 A swap of the active site is stored as two single-site requests held together by naming conventions
Opened
#185 A form declaration can hold settings its layout family never reads
Opened
#186 Locks are written out at each call site, with four key conventions and no written order
Opened
#187 Plan-wide changes to ladders and defaults run inside HTTP handlers, each with its own transaction shape
Opened
#188 Finding which tier an organization holds on a ladder is a loop written five times
Opened
#189 The grants listing query is written twice, and only its delivery state is checked for drift
Opened
#190 Each page's template set is assembled in its own place, and the lint and tests assemble stand-ins
Opened
#191 Tests build their data and check their pages by hand, with one copy of each helper per package
Opened
#192 Tests share one database and global settings, so packages must run one at a time
Opened
#193 The subscription reconcile changes provision status without the pool lock
Opened
#194 Adding a tier locks pools in creation order, while other paths sort them by pool id
Opened
#195 A refused plan switch answers 200 and replaces the preview with the plans
Opened
#196 Recording a failed drain locks the obligation before the pool, while the drain locks the pool first
Opened
#197 A failed read of an organization's plan position is shown to the member as holding nothing
Opened
#198 A scheduled cancellation keeps its "Cancels on" badge but loses its end date and Keep plan when the plan's price cannot be read
Opened
#199 The Products page offers a plan switch on a subscription the switch cannot change
Opened
#200 The current plan's card shows the price of its subscription's first item, which can belong to another product
Opened
#201 Plan cards make a limit's singular by cutting a trailing "s", and drop their limit lines without an error when the rules cannot be read
Opened
#202 A member's plan change does not see a grant issued while it runs, and replaces that grant when it finishes
Opened
#203 Checkout reads the price's Stripe mapping a second time and repeats checks the offer decision has already passed
Opened
#204 Checkout answers a failed read of the organization's billing accounts as "no billing account found" with 400
Opened
#205 Checkout and four other handlers take a field from the URL when the posted form leaves it out
Opened
#206 A failed read of the plan ladders replaces a member's whole entitlements panel with a plans error
Opened
#207 Operator pages show a failed read as an empty or settled answer instead of an error
Opened
#208 A request that takes longer than eight seconds gets no answer, because the server's write timeout runs out before the request timeout
Opened
#209 member-console start exits with status 0 when the web server fails to start
Opened
#210 An organization with more than 200 members reads as 200 on its page, and its latest members are picked from the first 200 by name
Opened
#211 Past tier changes are named by the ladder's current order, so a reorder or a tier removal rewrites what they say
Opened
#212 A subscription's next reconcile confers its tier again over the operator's grant that replaced it, and ends the grant
Opened
#213 A tier reorder that commits during a conferral records the wrong kind of tier change
Opened
#214 A default ladder's last tier can be removed while organizations hold it, leaving the ladder empty
Opened
#215 A default change or a reorder lists each organization it could not move with raw database error text
Opened
#216 Adding, deleting or reordering tiers while the entitlement lock is held answers "see server logs" instead of the refusal that says to try again
Opened
#217 A rule change on a large entitlement set is shown as not applied when its first recomputation fails on one pool, although it was applied
Opened
#218 Conferring a product on two ladders writes its tier-change rows in no fixed order, so a golden test fails now and then
Opened
#219 A member's downgrade is lost when a reconcile releases the old schedule the downgrade has just reused
Opened
#220 The copy rules are checked two different ways, and some sentences a person reads are checked by neither
Opened
#221 Some HTTP handlers still open their own transaction or run hand-written SQL
Opened
#222 A create or a settings save sometimes lands without its success toast, so two walkthroughs fail now and then
Opened
#223 Five tests check less than their names or comments say
Opened
#224 The test kit opens whatever database TEST_DATABASE_URL names, the application's included
Opened
#225 List queries can end their sort on a column two rows share, and nothing checks the last sort key
Opened
#226 Nothing catches a subtest that calls a fixture built on its parent test's t
Opened
#227 No tool in the repository checks that a change keeps every test name and result
Opened
#228 Should a generated-mutant report run over the packages whose tests need no database?
Opened
#229 Removing a request whose workflow never started takes no instance lock, so a repeat of it can be answered as a conflict
Opened
#230 A verified custom domain offers to create a site when the console cannot read whether one is already there
Opened
#231 A failed read of the sites entitlement tells the member they have reached their site limit
Opened
#232 Sign-in is refused when one ID token claim has an unexpected type, even a claim the console never reads
Opened
#233 A downgrade on a subscription with two items removes the other item at Stripe
Opened
#234 A request with the wrong method is told the page does not exist, never 405
Opened
#235 Should pure functions get property-based tests beside their examples?
Opened
#236 The FedWiki walkthrough fails on networks whose DNS drops loopback answers
Opened
#237 A large tier removal or add is refused; the tier should retire and drain instead
Opened
#238 A change to an org type's default plan or a ladder's tier order cannot carry a note saying why
Opened
#239 Operator errors point to the server logs but give no reference to find the line by
Opened
#240 Creating a workspace for an organization without a default pool creates one with no plan
Opened
#241 The create-workspace route answers any signed-in member while its control is hidden
Opened
#242 migrate down undoes the last integration's newest migration, not the most recently applied one
Opened
#243 The default change, the reorder and the tier removal each rebuild a refused preview in their own code
Opened
#244 The repository has no code of conduct
Opened
#245 The retention purge can delete a site a member is restoring
Opened
#246 A site archived on the farm outside the console is never purged, and one archived twice can be purged at once
Opened
#247 A FedWiki site's name can keep the wrong certificate answer after a status change
Opened
#248 A create reconcile gives up after three database errors and leaves the site pending until the next boot
Opened
#249 Inbound webhook events are kept forever
Opened
#250 Error messages put members' email addresses and forum usernames into the console's logs
Opened
#251 The env setting only picks the log format, and the image sets an ENV the console never reads
Opened
#252 Objects in each schema belong to the user that runs migrations, not to the schema's owner role
Opened
#253 Nobody is told when the console serves without Temporal, its identity provider or its session store
Opened
#254 Decide whether the domains system should live inside the console
Opened
#255 A past-due subscription loses its plan at once, with no grace period
Opened
#256 A member cannot change the card their subscription charges
Opened
#257 A Checkout page opened before a plan was bought can still buy that plan's ladder a second time
Opened
#258 An add-on whose payment is due shows no state and is offered again
Opened
#259 Package tests run every query as the cluster's superuser, so a privilege the runtime role lacks shows only in the running console
Opened
#260 member-console start handles no stop signal, so a stop cuts in-flight requests and never stops the Temporal worker
Opened
#261 A grant with an end date stays active past it when its expiration workflow fails to start or fails
Opened
#262 A session the console cannot decode answers the error page on every request until it expires
Opened
#263 Screen captures of the Stripe integration page depend on whether the console's Stripe reads finished before the capture
Opened
#264 The console's database pool keeps a search_path from db-dsn, while the documentation and the spec say it uses core,public
Opened
#265 No test runs the Temporal activity or the boot step that keep webhook event partitions ahead of need
Opened
#266 An interrupted test run leaves its roles in the shared test cluster, and test/reset-test-db.sh drops none
Opened
#267 A Stripe webhook event is dispatched again when its final status update fails
Opened
#268 The integration guide's configuration section omits ConfigKey's Type, Enum and Positive fields
Opened
#269 A member cannot cancel a subscription while an operator's grant holds its ladder, and the Products page shows no price for it while it bills
Opened
#270 When a grant over a paid tier ends, the subscription that pays for that tier gets it back only at its next Stripe event, not when the grant ends
Opened
#271 A grant on one ladder ends a multi-ladder subscription's tiers on every ladder, and the other ladders stay empty while the subscription bills
Opened
#272 A member can buy an add-on that has no entitlement set, pay for it every period, and receive nothing
Opened
#273 After a product's entitlement set is cleared, extending a grant of it fails with "Failed to save the grant" and no reason
Opened
#274 Screen captures print the pinned times in the time zone the console process runs in, so a capture from another zone differs from the baseline
Opened
#275 Keep plan pressed just after a downgrade takes effect answers nothing and records the downgrade as withdrawn
Opened
#276 The Stripe statuses that suspend a plan are listed again in the operator's billing card and the test kit instead of read from the reconcile
Opened
#277 While a grant holds a ladder that a subscription still pays for, the Products page sells a tier above the grant through Checkout, so the ladder carries two subscriptions
Opened
#278 A member cannot move a subscription paused by an operator's grant to the granted tier or a higher one before the grant ends
Opened
#279 A member cannot arrange for a subscription paused by an operator's grant to continue on the granted tier or a higher one when the grant ends
Opened
#280 A grant over a paid tier uses up time the member paid for, or gives part of a period away, depending on where the subscription's renewal date falls
Opened
#281 An operator cannot issue a grant that waits under the organization's own plan and takes over when that plan stops covering it
Opened
#282 With no Stripe key, the member catalog still offers products whose prices were synced earlier, and their buttons post to a route that does not exist
Opened
#283 With the FedWiki sync off, archived sites are never purged and a downgrade never parks sites
Opened
#284 A FedWiki status or swap request finds its site by name, so a deleted site leaves the request pending for years and a new site with that name takes its outcome
Opened
#285 A subscription reconcile's Stripe calls ignore the caller's deadline
Opened
#286 A member whose default payment method is SEPA Direct Debit cannot upgrade their plan
Opened
#287 The upgrade confirmation says the charge covers the rest of the period when the new tier is billed on another interval
Opened
#288 A tier priced in another currency is offered as a switch that always fails
Opened
#289 The current plan's card states no cost when the organization type's default plan holds it
Opened
#290 A request that runs longer than eight seconds loses its answer, though the console lets it run for 32
Opened
#291 A plan switch is confirmed in a panel above the plan cards, before the button that opened it
Opened
#292 An upgrade confirmed across a renewal answers "Try again in a moment" instead of showing fresh figures
Opened
#293 The member's invoice list and invoice page show Stripe's invoice-level period, not the period the invoice pays for
Opened
#294 A wiki name whose site was never created can keep passing the certificate check until the console restarts
Opened
#295 A plan change and the scheduled-change sweep wait up to four minutes on each Stripe call, past the end of the request
Opened
#296 A request that runs out of time tells the member to try again, though its work may still finish
Opened
#297 The FedWiki and Discourse operator pages say a scheduled run never happened when Temporal could not be asked
Opened
#298 A failed read of a FedWiki organization's last active-site change is treated as no change, on the sites card and in the swap
Opened
#299 With no Stripe key, the Products and Billing pages and the billing sweeps still act on Stripe objects an earlier key made
Opened
#300 The billing pages and the setup checklist decide "Stripe is configured" from the integration settings, while the member pages and Checkout decide it from the key's mode
Opened
#301 FedWiki maintenance can change or delete a newer site that reuses a deleted site's name
Opened
#302 After a plan change confirmed in the dialog on the Products page, keyboard focus falls back to the top of the page
Opened
#303 A plan change the console refuses on purpose is logged at ERROR, like a fault
Opened
#304 Syncing a new product to Stripe logs an ERROR when its price waits a moment for the product
Opened
#305 A FedWiki maintenance run whose farm sync failed is shown as Completed
Opened
#306 Retrying failed recomputations locks their rows in no set order, so it can deadlock with a drain on the same rows
Opened
#307 A downgrade Stripe holds is not shown when the console never recorded it
Opened
#308 A move deferred to a commitment's end survives an upgrade the console learns of from Stripe
Opened
#309 A plan change made and recorded is answered as failed when the reconcile after it fails
Opened
#310 A FedWiki row action or API delete answers a failed database read as "Site not found"
Opened
#311 The readiness verdict names a missing price "Active price" while it names every other gap in lowercase
Opened
#312 A Stripe create that Stripe answered with a server error is retried for a day under a key Stripe will only answer with that error
Opened
#313 The Stripe environment check's reads outlive the attempt Temporal gave up, so two attempts run at once
Opened
#314 A product or price that Stripe makes after answering the console with a server error is never recorded from Stripe's event
Opened
#315 A checkout can create a second Stripe customer for an organization when Stripe answers after the request has ended
Opened
#316 An operator's Retry of a failed Stripe sync can be undone by the dead-letter write it answered
Opened
#317 The Stripe specs describe an outbox path, a helper and a query the console no longer has
Opened
#318 The checkout answers three failures as bare text beside the plan
Opened
#319 FedWiki site actions answer a failure with 200
Opened
#320 The FedWiki sites card repeats its notices to a screen reader every three seconds
Opened
#321 The invoice detail and a domain's DNS records still render a back link
Opened
#322 The sites card's header splits the disabled Create site button from its reason
Opened
#323 A notice lists its own rows, each with its words and one link
46 Unresolved Conversations
Open
#78
The operator has no single place showing what needs attention
Open
#149
The Stripe page's dead-letter tables print raw error chains, with the account id and request-log links
Open
#120
Screenshots change every day because some cells count from today
Open
#88
A product cannot be sold as a bundle covering several plan ladders at once
Open
#154
The default comes back as a new grant each time, while a marked grant comes back as itself: two mechanisms for one idea
Open
#117
A grant cannot be queued to start when the current one ends
Open
#99
A product can point at a set of capabilities that does not exist
Open
#155
A retired product can return only to the exact row that delivered it, so each new way of writing grant rows needs its own exception
Open
#97
An operator cannot retire a product; the only way out of the catalog is deleting it
Open
#151
The console has no time zone of its own: dates follow whatever zone the server process runs in
Open
#150
Invoice detail pages omit payments, cards and the subscription
Open
#3
An add-on a member is meant to hold several times can only be bought once
Open
#44
The wiki integration reaches into the domains registry directly instead of through the integration contract
Open
#82
A plan change affecting many organizations applies one outcome to all of them
Open
#139
Whether a member may create a workspace has never been decided
Open
#62
A plan ladder cannot be taken out of service
Open
#14
Nothing runs the project's checks except the person who remembers to
Open
#113
There is no way to review which organizations a rule change recomputed
Open
#122
A returning member lands in whichever organization comes first and cannot reach the others
Open
#121
Nothing says which file a new HTTP handler belongs in
Open
#63
The project lint never checks routes an integration registers
Open
#80
What a payments provider port looks like, and which billing code belongs behind it
Open
#131
A column named for a payment provider's event holds words that are not events
Open
#10
Some operator lists read the database once per row
Open
#18
The member catalog does not say a plan change will wait for the end of a committed term
Open
#159
A member can end up paying for a tier below one they were granted, with the granted tier waiting behind it
Open
#118
The screenshot harness cannot reach a page's interaction states
Open
#146
A payment-provider event larger than 64 KB is cut off, fails its signature check and never reaches the console
Open
#12
A transient error reading the billing sweep schedule is read as the schedule being absent
Open
#128
Workflow schedules from an earlier configuration keep running after a redeploy
Open
#92
Nothing defines what a suspended or archived resource pool means
Open
#145
The product flags mix up who can see a product, who can buy it and who can be given it
Open
#32
The demo data covers whichever states someone noticed were missing
Open
#158
What the operator's grants page is for, and whether an operator should issue and manage grants from it
Open
#81
A count of pools still waiting to be recomputed never says how long they have waited
Open
#100
The operator cannot see which payment-provider product a catalog product is mapped to
Open
#95
Every product carries a category that changes nothing
Open
#102
The readiness section calls a product unpurchasable when it was never meant to be sold
Open
#157
Tier changes shows a payment-provider event's raw reason string instead of words
Open
#17
An operator cannot put a minimum term on a subscription
Open
#38
A subscription with a minimum term and a fee policy refuses mid-term changes instead of charging the fee
Open
#46
The core database seeds a resource key that belongs to the wiki integration
Open
#87
A domain that serves something other than a wiki site cannot be recorded as served
Open
#45
Wiki state and quota enforcement wait for the next poll instead of reacting to the change
Open
#77
An external system cannot be told when something changes in the console
Open
#127
What a stacking policy is for, and where an operator would choose one