A form that rejects bad input is only checking the route it was built for. If a record can reach the same database through an import, an admin screen, a script, or a “save draft” button, the form’s rules don’t apply there, and the first place anyone notices may be the person who has to […]
The ongoing conversation
Tag: gcd
A Cached Count Is a Business Rule, Not Just a Number
Suppose a comics database shows each series with a count of its issues, and the count is cached so the page doesn’t have to total thousands of rows on every view. The number looks harmless. But the moment someone asks whether a variant cover is an issue, the cached count stops being a number and […]
When Autocomplete Gets a Security Page Instead of Data
When an editor typing into a long catalog form triggers an autocomplete search, they expect a dropdown of matching names. What they do not expect is a silent freeze or a generic “network error” because an intermediary security service decided to challenge their browser. In complex web applications protected by services like Cloudflare, background AJAX […]
One Notes Field, Many Rendering Contracts
Adding Markdown to a long-running catalog sounds like a single decision: install a parser and turn plain text into HTML, but in a mature database, “Notes” isn’t one place. In the Grand Comics Database (GCD), there are notes on issue records, creator biographies, brand groups, reprint relationships, and character appearances. Some notes sit in a […]
What Disappears When Your Table Fits the Screen
A review queue can fit neatly on a phone and still leave the reviewer guessing which item to open. Hiding a column solves the space problem; whether it solves the user’s problem depends on what was in the column. In the Grand Comics Database‘s Changes Under Review queue, the State column disappeared on narrow screens, […]
You Don’t Have to Accept Every AI Code Review
On one of my pull requests for the Grand Comics Database project, Gemini Code Assist offered three suggestions: two warned about possible errors and the third suggested a clearer way to write a loop. I accepted the third and explained why I wasn’t making the other two changes. The warnings sounded reasonable, but they depended […]