APP_DEBUG was false, but its tables are published in a separate opt-in step, so the natural production install threw no such table: prompt_versions on the first Deck::get(). Caching gave no protection, because the active version is resolved before the cache is consulted. Tracking now defaults to off, and every database interaction degrades to metadata.json with a single logged warning rather than throwing. Deck::track() never throws at all — it runs after a completed, paid-for AI call.Deck::activate() never recording anything in prompt_versions. It only ever issued an UPDATE, which matched no rows because nothing inserted them, so the table stayed empty and the lookup in getActiveVersion() could fail but never succeed. It now upserts, with explicit timestamps, making runtime version switching work as documented... or a directory separator could read files outside the configured prompts path. Names are now validated and InvalidPromptNameException is thrown otherwise./v(\d+)$/ treated directories such as rev2, dev3, and archive-v9 as versions 2, 3, and 9 — advertised by prompt:list --all and then failing to load. Both PromptManager and make:prompt now anchor the match against the directory name.getActiveVersion() returning the version column unordered and uncast, which picked arbitrarily between multiple active rows and could raise a TypeError on drivers that return integers as strings.make:prompt creating prompts that could not be loaded back. Kebab-casing passed path separators straight through, so make:prompt Support/Reply scaffolded a nested support/reply that PromptManager refuses to resolve and prompt:list shows as a broken support entry. The command now validates the name it generated against the same pattern the loader applies, sharing one definition so the two cannot drift apart.Deck::track() throwing on an invalid prompt name, contradicting its own documented promise never to throw. It builds no path — the name is only a column value — so the guard protected nothing.$ also matches before one. It is now anchored with \z.config/deck.php you are unaffected. If you did not and you rely on tracking, set DECK_TRACKING_ENABLED=true. See UPGRADE.md.prompt_versions.user_prompt is now nullable, so activation can be recorded without prompt content. Existing tracking installs must re-publish and run the migrations.metadata.json. Editing active_version in the file and deploying no longer changes what is served. Activation is environment state; the file is the bootstrap default.quality workflow running the Pint formatting check on every push and pull request, and asserting that every release in CHANGELOG.md has a matching entry in the documentation site's changelog. Formatting was previously never checked in CI, and the two changelogs could drift silently.Deck::activate() now accepts string|int versions, so 'v2', '2', and 2 are all valid. Only Deck::get() was widened in 0.4.2, despite the changelog describing both.tests workflow now runs composer test rather than calling vendor/bin/pest directly, so CI and the documented contributor command cannot diverge.Version for prompt [order-summary] does not exist. Both Deck::get() and Deck::activate() now throw InvalidVersionException naming the offending value.user.md that make:prompt does not create without --user, a second version that a single run does not create, and omitted the version-level metadata.json added in 0.4.4.metadata.json.0.4.4.Deck::get() signature, which described ?int rather than string|int|null.Fixed migration publishing, which silently failed on case-sensitive filesystems. DeckServiceProvider pointed at src/database/migrations while the directory is src/Database/migrations, so vendor:publish --tag=deck-migrations reported success whilst failing on Linux and macOS case-sensitive volumes.
Fixed make:prompt overwriting the active_version key by rewriting the prompt's root metadata.json. Creating a new version silently promoted it to active. The file is now merged, preserving active_version, the existing description, the original created_at, a populated variables list, and any keys added by hand.
Fixed prompt metadata being unreachable. make:prompt wrote the name, description, and roles to the prompt's root metadata.json, but PromptManager only ever read the version-level v{n}/metadata.json, so PromptTemplate::metadata() was always empty and the prompt:list description column was always blank. make:prompt now writes version-level metadata, and metadata reads merge the prompt-level file with the version-level file, version keys winning. The active_version key is excluded from metadata().
Fixed prompt:test --ver=v2 silently rendering the active version instead of the one requested. (int) 'v2' evaluated to a falsy 0, so the command fell through to active() while reporting the wrong version number in its header. The command now uses the ResolvesVersion trait, accepts both 2 and v2, and fails with a clear message on unparseable input.
Fixed the PromptPHP\Deck\Database\Factories\ PSR-4 mapping pointing at the non-existent lowercase src/database/factories/.
Fixed the README downloads badge reporting the deprecated veeqtoh/prompt-deck package instead of a combined figure.
Fixed the docs landing page linking to the pre-rename promptphp/prompt-deck repository, and the README licence link pointing at a master branch that does not exist.
make:prompt now prints how to activate the version it just created when a different version is live.downloads badge workflow that publishes the combined Packagist download count for promptphp/deck and the deprecated veeqtoh/prompt-deck to a shields endpoint on the orphan badges branch./changelog/rss.xml.PromptPHP\Deck\Database\Seeders\ autoload mapping, which pointed at a directory that does not exist.sebastian/diff constraint to allow v8/v9 To allow pest 5.ActivatePromptCommand and PromptManager to Use ResolvesVersion trait for version resolution in prompt retrieval and activation and support mixed types for version signature on get and activate methods.ActivatePromptCommand and PromptManager to support prompt version activation in formats 1 or v1.veeqtoh/prompt-deck to promptphp/deck.Veeqtoh\PromptDeck to PromptPHP\Deck.Veeqtoh\PromptDeck public namespace.docs directory. #5.gitattributes file to manage text file handling and export-ignore rules.How can I help you explore Laravel packages today?