Deck-E narration leak filter: the tag list is derived now (issue #90)
Architecture: the "anchored on our seven tool names" sentence was describing a
list that had been wrong since `journey` and `escort` were added. Rewritten to
say the alternation is derived from `COSMETIC_TOOLS`, what pins it, and why the
23 data + 4 deep tools are deliberately out of scope.
Decision Log + Contribution Record: the corresponding entries.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
a388039
Decision Log: GLC's Classic Collection carve-out is enforced (issue #93)
The `set_carveouts` block was vendored, typed and loaded but no validator
read it, and the reprint oracle waved the whole Classic Collection through
the GLC pool — a legality false-negative. Records the fix, why the deny has
to outrank the oracle, and the matching keys.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
634753c
Decision Log: the card-art work is deployed, and verified live
The entry said "not deployed by this session", which stopped being true when the
owner asked for the deploy and PR #112 squash-merged with all six checks green.
Replaced with what was actually observed on the live site afterwards -- 0
redirects and 0 placeholders across the measured pages, against 100% 302s before,
at both DPR 1 and DPR 2 -- rather than an assertion that it shipped.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VqQ2pWdA2FAhXPjsooPy7K
7a55613
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
5a84299
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
2863821
Decision Log and Contribution Record: the entrance/arrival/return follow-up
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
dcf23a3
Decision Log and Contribution Record: Deck-E animation round two
Sync the Decision-Log snapshot to the repo's DECISIONS.md, which now carries the
2026-08-25 animation entry, and add the ledger line for the pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
82e102b
Record issue #75: the character chunk on the document critical path
`index.html` preloaded the 1.2 MB `Decke-runtime` chunk on every page for every
visitor. An `advancedChunks` group absorbs the DEPENDENCIES of its matches, so
`cardSource.ts` importing `lib/api.ts` pulled the app's shared plumbing into the
character chunk and gave the entry a static edge to three.js.
- Frontend-Research: new subsection under "Lazy chunks — must not be in the entry
bundle" ("Lazy" is a property of the OUTPUT), plus the measured critical-path
figures against the §B.5 budget and what should enforce it.
- Decision-Log: the DECISIONS.md entry.
- Contribution-Record: ledger line.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
59a1327
Deck-E: revert the keyboard-fitting stack (PR #86)
Snapshot of the DECISIONS.md entry, plus the ledger line.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
823c75e
Deck-E: the keyboard drift (PR #85)
Snapshot of the DECISIONS.md entry, plus the ledger line.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
b9f4ea8
Deck-E: the iOS keyboard (PR #84)
Snapshot of the DECISIONS.md entries, plus the ledger line.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
05e3745
Deck-E: measure his mark against the panel, not the viewport (PR #82)
Snapshot of the DECISIONS.md entry, plus the ledger line.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0bc277a
Sync Decision-Log (80 entries the page had fallen behind, plus the two 2026-08-24 animation-pass entries) and add the animation-pass ledger line (PR #81)
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57aa8b6
Decision Log and Contribution Record: the prompt fix that let writes happen
Closes the half of AGENTS.md's rule that commit 9ba77b0 left open --
DECISIONS.md and the wiki Decision Log are meant to move together, and
that commit landed with only the repo half done.
Appends the entry verbatim: the system prompt told him to preview a
collection change in prose and wait, which duplicated the SDK's
needsApproval gate, and duplicating it disabled it -- the dialog only
exists once the tool is called, so he stated the numbers, stopped, and
the reader was left answering a question the system had never been asked
to put.
The ledger gets a second row for the date rather than an edit to the
first, matching how this page already handles several sessions in one
day. It keeps the caveat rather than the headline: roughly 30% of
opening turns still stall and need a follow-up, which is the stated
ceiling of a prompt-level fix.
Still branch-only. The note above the 2026-08-21 block already says so
and covers this entry, so it was not repeated.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
c4c4a2f
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>
bcd8506
Sync wiki with Deck-E rev 2: agent-tools extraction, entitlement/meter, data access, deep tier
Brings Architecture, MCP Setup, Decision Log and the Contribution Record in
line with the deckpal repo's Deck-E PRs 1-4 and 7 (the browser tool wire fix,
server-side entitlement + spend meter on /api/chat, the packages/agent-tools
extraction with two front-ends, Deck-E's lazy-RLS data access, and the
metered deep tier). Also corrects two staleness gaps found while syncing:
the MCP tool count (21 -> 23) and the Deck-E route's dev-only status, both
of which had drifted from the canonical repo docs before this session.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
c3ac4ba
Deck-E: foil measurement, rip flow, showScreen
b712093
Deck-E: an independent review found the premise, not the algebra
6308ebb
Deck-E: the clip was the pin's clamp, not the canvas unit
a920b4d
Deck-E: the toolbar strip, and pace by distance
065f2a4
Deck-E: the pinned camera leaking into the solve, and the entry judder
bc4e717
Deck-E: hand the scroll tracking to the compositor
8299f2b
Deck-E: movement-engine pass — pace, the boot pop, the phone
485a2fd
Deck-E: the two-ignore-list trap and the build gate that caught it
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
b78541e
Deck-E: real card art, batched card_stash
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5fa6c1c
Record the stale-chunk-after-deploy defect
b79632e
Record the fifth interrupt defect, from the visual pass
259d22e
Record the lifecycle restructure the review points at
5d4f531
Sync the Deck-E framing and loop-seam pass
On-Behalf-Of: @cheyras <cheyras@gmail.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
12c80e6
Sync the Deck-E states/gaze pass
Decision Log gets the 2026-08-20 entry (a state is something he stays in; the
look-at constraint that never exported; the one wrong spin axis behind two
reported defects), and the Contribution Record gets its session line.
On-Behalf-Of: @cheyras
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
27e97ac