Record PR #272: TCGplayer ids TCGdex lacks are derived from TCGCSV
Data Layer §4.5 update note, Contribution Record line, and the Decision Log
regenerated from decisions/ (pnpm decisions:wiki).
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Record 30th Classic artwork sources and verified branding
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Document verified price recovery and 30th Celebration release
On-Behalf-Of: @cheyras
Co-Authored-By: Codex (GPT-5.6 Sol) <noreply@anthropic.com>
Document administration tiers, feature controls and AI usage
Synchronize the owner guide, architecture, security boundaries, UI conventions and decision record with app commit 8f44c4b6. Live release verification remains separate.
On-Behalf-Of: @cheyras
Co-Authored-By: GPT-6 <noreply@anthropic.com>
Document administration, roles and configurable AI credits
Add the owner guide and synchronize architecture, schema, frontend, MCP and decision records for DeckPal PR188. Production schema and payment verification remain pending.
On-Behalf-Of: @cheyras
Co-Authored-By: Codex in-session worker <noreply@anthropic.com>
Sync wiki: Project Holo 2c (parts 1 and 2) card-art re-sourcing
Decision-Log: snapshot both 2026-08-31 DECISIONS.md entries (PR #150's
pkmn.gg-surface retirement, and the pokemontcg.io re-sourcing execution).
Data-Layer: image-source section now reflects the executed reality
(pokemontcg.io adopted, 1,417 assets re-sourced, 495 deleted, 952-card
published no-art list) instead of the pre-decision research state.
UI-Spec: notes the pkmnDark -> deckpalDark root class rename. Contribution-
Record: one ledger row per work session (2c part 1 and 2c part 2).
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MExGVHFfAsqf2HDAhG2wAa
prices-cardmarket: the job now reports what it wrote, and what production showed
The write path was correct all along — proved against a real Postgres and then
on the live database (28,490 EUR observations inserted, read back, persisting;
three-week-stale EUR prices current again). The real defect was that the job
reported its intentions rather than its results, so `sync_run` could not be used
as evidence about it.
Records the fix, and the still-unexplained loss of fifteen nights of EUR rows
with its strong candidate: price_observation cascades from card_variant, which
holds 41,471 rows against a maximum id of 154,037.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Price retention tiers on production: 2.374 GiB -> 0.495 GiB, and the two production-only defects
23 months rolled oldest-first against the live database with every verification
exact. Records the measured reclaim, and the two things no local harness could
model: Supabase's 2-minute statement_timeout on the database role, and a PWA
serving the previous bundle against the new response shape — bump the SW API
cacheName on every shape change, and never let a chart throw on a point it
cannot place.
Also moves the Contribution Record footer back below the last ledger line,
where the 2026-08-29 entry had landed above it.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Price history tiered retention: Data-Layer §4.7, the decision, the ledger
Daily price rows forever are ~6.6 GB/year against an 8 GB allowance. Records
the tiers (daily ~30d / weekly ~6mo / monthly forever), the measurements behind
OHLC-not-close, the verify-before-delete order, and the two guards an
adversarial review added: RLS on every partition, and a refusal to roll up a
month with days nobody ingested.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Card art sourcing: TCGplayer ruled out too; the replacement search is finished
Data-Layer 5.3a and the Decision Log now record the outcome rather than an open
question. pkmn.gg and TCGplayer images are both ruled out -- the latter because
its Terms forbid automated collection outside the API, the API Terms bar
redistribution to end users, and new API access is not granted, so there is no
compliant route rather than an unattractive one. The 403-to-automated-fetch
caveat is recorded, since the finding rests on search summaries rather than the
primary text and that limit should travel with it.
pokemontcg.io is the surviving candidate at 88 of 592; 504 cards have no approved
source and are documented in research/card-art-residue.json rather than chased.
Notes the reusable lesson: four independent catalogs lack the same trainer kits,
which is evidence the scans are not public rather than that nobody looked.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VqQ2pWdA2FAhXPjsooPy7K
Card art: direct object URLs, cloud warm path, and the 2026-08-26 measurements
Architecture: the SPA no longer goes through the image function for art that is
already in the bucket; records why a HIT was never free (invocation + Storage
probe before the 302) and that the proxied path remains the fallback. Also
corrects the "no manifest row is a FAIL" description, which was a permanent
placeholder for 585 cards.
Data-Layer 5.3a: the cloud tier had no bulk warmer at all -- the disk warmers
cannot reach it and storage:backfill only mirrors a disk cache -- so the bucket
held only what someone had looked at (18,840 of 21,066 cards missing).
warm:cloud is that path now.
Frontend-Research C.2a: the SW route matches two origins, the image cache is
deckpal-img-v2, and the rename is load-bearing because v1 held opaque responses
the browser pads against the origin quota.
Decision Log + Contribution Record: the full entry with before/after figures.
Both the Decision Log and Data-Layer note that pkmn.gg is ruled out as a source
on the owner's decision, so warm:pkmn is not the route for the remaining 592
cards and should not be reached for on the next gap either.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VqQ2pWdA2FAhXPjsooPy7K
Sync the wiki, and correct a page that described branch work as shipped
Brings Architecture, Decision Log and the Contribution Record in line with
the 2026-08-22 work on `decke-agent` (PR #74, open): the approval
`signature` bug that broke every approved write once
DECKE_APPROVAL_SECRET was set, the round trip extracted into a testable
module, the narration transform's move, search_cards no longer grounding
a guessed set id, and the chat model switch. Twelve DECISIONS entries
appended verbatim -- this page is a snapshot, not a rewrite.
The correction that mattered most was to our OWN previous sync. MCP Setup
said the 23 tools "are defined once, in the packages/agent-tools workspace
package". That package does not exist on origin/main. It is branch-only
work from PR #74, and the 2026-08-21 sync wrote it up as current
behaviour -- so a reader following that page would have gone looking in a
directory that is not there, and Deck-E in production has its own separate
tool set rather than a share of the MCP registry. The page now says what
is true today and names the pending PR without claiming it.
Everything new is marked as branch-only for the same reason. Nothing here
describes the collection-write path as working, because it does not: the
model will not call `log_cards` at all, which is recorded plainly rather
than omitted.
Two older pages get a banner instead of a rewrite. Data Layer and
Frontend Research §D sized a single-user Raspberry Pi deployment that the
project abandoned for Vercel + Supabase the same week they were finished.
Their measurements are captioned with the command that produced them, so
they are left as measured and the banner says which sections are still
evidence and which describe a plan that was dropped. A dated measurement
rewritten to a current number stops being evidence.
Also: removed an orphaned mid-file footer from Decision Log and the
Contribution Record, each left behind by an earlier sync that appended
below it, so both pages now carry exactly one and a reader scanning for
the date gets the right one. TypeScript's entry corrected to 7.0.2.
Home was checked against the files on disk and the AGENTS.md inventory
and left alone. Dex Data, Prior Art, Project Brief and UI Spec were
checked and deliberately not touched -- Project Brief is historical by
designation, and UI Spec already carries its own supersession notice.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Rename the product to DeckPal
Follows the repo rename: DeckScout → DeckPal, deckscout.io → deckpal.app,
and the MCP server rotom-mcp → deckpal-mcp.
docs: initialize DeckScout wiki with design docs and attribution system
Pages: Home, Architecture, Data-Layer, Frontend-Research, Dex-Data,
UI-Spec, Prior-Art (merged with raw scan), Project-Brief, Decision-Log
(snapshot), Contribution-Record (attribution ledger).
All content authored from current (homelab-stripped) repo sources.
Every page carries an agent+human attribution footer.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136MZx8gJRZn4ET9ieof6bt