Panini Flawless Basketball · NBA
2018-19 Flawless
- Base set
- 159 cards · checklist
- Parallels
- 83 · 1 on the base set
- Released
- November 8, 2019
Numbering is not contiguous: #130 is not part of the 159-card base set. Whether a skipped number was never issued or belongs to another block is recorded in this release's notes and open questions, not inferred here.
licensed (NBA)
Base set parallels · 1
Insert sets · 10
Autograph sets · 22
- 2016-17 Panini Flawless Update IIcount not documented
- 2017-18 Panini Flawless Updatecount not documented
- 2017-18 Panini Flawless Update Icount not documented
- Championship Tags Autographs36 cards
- Distinguished Autos35 cards4 parallels
- Enshrined Signatures37 cards5 parallels
- Flawless Autographs54 cards4 parallels
- Flawless Excellence Signatures35 cards4 parallels
- Flawless Patch Autographs42 cards4 parallels
- Horizontal Patch Auto43 cards4 parallels
- Laundry Tag Autographs17 cards
- Legendary Scripts57 cards5 parallels
- Logoman Autographs36 cards
- Momentous Autographs54 cards4 parallels
- Premium Ink41 cards4 parallels
- Rookie Autographs12 cards4 parallels
- Signature Prime Materials36 cards4 parallels
- Star Swatch Signatures8 cards4 parallels
- USA Basketball14 cards4 parallels
- VS. Signatures Left9 cards4 parallels
- VS. Signatures Right9 cards4 parallels
- Vertical Patch Auto42 cards4 parallels
Open questions · 19show
- G-001 THE ENTIRE BASE-RUN PARALLEL LADDER RESTS ON ONE EDITORIAL LINEAGE. The four base-run parallels and their print runs (Double #/10, Triple #/5, Bronze FOTL #/2, Platinum 1/1) come from cardboardconnection and checklistcenter, which state them almost verbatim and are best read as one opinion counted twice rather than two sources - the exact hazard CAV-033 names. There is no third source: beckett.com 302-redirects to maintenance.beckett.com, and tcdb catalogues NO base-set parallel for this release at all. The tcdb absence is itself evidenced rather than assumed: Inserts.cfm heads its only populated section "Insert Sets (166)", all 166 entries are accounted for (161 read off the listing plus sids 218472-218476 probed individually and all five proving to be VS. Signatures Right and its parallels), the page's "Parallel Sets" anchor carries no entries, and sid 218477 is a foreign product (2019-20 Panini Certified - Certified Signatures), which proves the upper boundary of the block. No marketplace corroboration was obtained: the session fetch budget was exhausted before a goldin/comc/eBay listing carrying a Double or Triple serial could be fetched, and a web search alone returned nothing usable. These four rows are the weakest claims in this release.
- G-002 CARD 130 WAS NEVER ISSUED, AND THE SCHEMA CANNOT RECORD WHAT THAT MAKES TRUE OF THE BASE RUN. Three distinct layers, because only the third is actionable by a human. LAYER 1 - THE FACT. The base run is 1-160 with no card 130, i.e. 159 distinct cards. The two editorial sources both state the second base tier is "60 cards" (cardboardconnection: "60 cards. Serial numbered #/5."; checklistcenter: "60 Cards - Serial Numbered #/5"). tcdb renders 59. The unissued number is confirmed on two independent renderings of the same parent: Checklist.cfm?PageIndex=2 rendered all 59 rows without truncation, first card 101 and last card 160, running 101-129 then 131-160; and Gallery.cfm?PageIndex=13 rendered tiles 121-129 followed directly by 131 when asked explicitly whether a card numbered 130 appears. tcdb's parent header "Total Cards: 159" reconciles exactly with 100 + 29 + 30, so the header is counting DISTINCT NUMBERS - the same unit measured on the 2018-19 National Treasures parent. base_set_size=159 is written and is correct; 158 and 160 are both false. LAYER 2 - WHAT THE BASE RUN THEREFORE IS, AND WHAT base_cards.csv CANNOT HOLD. The 159 cards carry TWO different print runs: cards 1-100 (Base Gems) are serial numbered to 20 and cards 101-160 (Base SP Gems) are serial numbered to 5, each corroborated row-level on tcdb by the literal tokens "SN20" and "SN5" on every rendered row. base_cards.csv has no print_run column, so it cannot carry this at card level; it has card_tier, which IS populated here with 'Base Gems' and 'Base SP Gems' so the membership survives. Note that CAV-022 states card_tier is populated only for releases that have a base_card_tiers entry and is blank elsewhere meaning 'not stratified'. That description is already inaccurate - eight releases in data/ populate card_tier with no tier file (the hoopspremium line and paninihoops-bkb-2018-19, all carrying 'Hoops Tribute') - and this release is the ninth. Leaving card_tier blank here would have made CAV-022's 'blank means not stratified' affirmatively FALSE for this release, since the run demonstrably is stratified, so it was populated. LAYER 3 - base_card_tiers.csv CANNOT HOLD THEM EITHER, IN ANY SPELLING. This is the part that needs a human decision. The deferred constraint trigger tier_partition_tiles, defined over the function check_tier_partition() in migrations/009_triggers_and_views.sql, rejects both possible forms. (a) The single-range form, card_range 101-160 with card_count 59, is rejected at lines 25-26: "IF t.card_count <> t.range_end - t.range_start + 1 THEN RAISE EXCEPTION 'base_card_tiers for %: card_count disagrees with its own range at %'" - because 160 - 101 + 1 = 60, not 59. (b) The split form, card_range 101-129 plus card_range 131-160, is rejected at lines 22-23: "ELSIF t.range_start <> prev + 1 THEN RAISE EXCEPTION 'base_card_tiers for % do not tile: gap or overlap at %'" - because 131 is not 129 + 1. A third form was simulated against the trigger logic and also fails: falsifying card_count to 60 to match the range is rejected in turn at lines 31-32, "IF total <> expected THEN RAISE EXCEPTION 'base_card_tiers for % sum to % but base_set_size is %'", because the tiers then sum to 160 against a base_set_size of 159 - so falsifying the tier alone is not even sufficient, base_set_size would have to be falsified to 160 as well. Every remaining option requires writing something false: setting card_count to 60 invents a card 130 that does not exist, and changing base_set_size to 158 or 160 misstates the base run. THERE IS NO WAY TO EXPRESS AN UNISSUED INTERIOR BASE NUMBER IN THIS FILE. WHAT WAS DONE. Per specs/NOIR_ADDENDUM.md case (c) - do not force it - base_card_tiers.csv was REMOVED from this directory rather than written with a falsified value. The file was deleted outright rather than left header-only: 151 of the 190 release directories in data/ carry no such file at all, so absence is the established spelling for 'this release has no tier rows' (only nattreasures-bkb-2019-20 is header-only), and NOIR_ADDENDUM case (a) says in terms to write no base_card_tiers.csv when the structure does not fit. The tier structure - both ranges, both print runs and the unissued 130 - is stated in prose in release.csv notes, and per-card membership is in base_cards.csv card_tier. Removing the file is safe for every other release: check_tier_partition() iterates "FOR rel IN SELECT DISTINCT release_id FROM base_card_tiers", so a release with no tier rows is never examined by it. KNOWN COST OF THIS CHOICE, FLAGGED RATHER THAN HIDDEN. base_print_run stays varies-by-tier, which is correct and is now the only structured trace of the two-tier run. But pipeline/snapshot.py lines 125-130 enforce an invariant adopted 2026-08-27 that varies-by-tier requires tier rows to exist, and will emit "flawless-bkb-2018-19: base_print_run=varies-by-tier but no base_card_tiers rows exist". snapshot.py is NOT part of the gate sequence in CLAUDE.md, and verify_load.py's own re-implementation of the snapshot invariants does not include this one (its tier check joins base_card_tiers and so only fires for releases that have rows), so the gate will pass and the snapshot build will not. The three ways out are all decisions above an extraction agent's authority: relax the trigger to allow card_count <= the range span, relax the snapshot invariant to accept varies-by-tier with the values in prose, or add an unissued-numbers field. migrations/ was deliberately NOT touched - a schema change is the user's call and would also move the constraint-test count the gate pins at 17.
- G-003 CHANNEL NOT WRITTEN FOR EITHER BASE TIER. Flawless is universally understood to be a hobby-only product and all six catalogued sibling seasons write channel=hobby on their base tiers, but no source actually fetched in this build states a trade channel for the 2018-19 release. cardboardconnection gives only a configuration line ("10 cards per pack, 1 pack per box, 2 boxes per case"), which is not a channel statement; tcdb states none. Retailer pages at steelcitycollectibles.com and dacardworld.com whose SEARCH-RESULT TITLES read "Hobby Box" were queued and could not be fetched before the session fetch limit - and a search-engine result title is not the listing. channel=UNKNOWN is written rather than inheriting the sibling seasons' value. One fetch of either retailer page would close this.
- G-004 FOUR CARD-COUNT DISAGREEMENTS BETWEEN tcdb AND THE EDITORIAL LINEAGE, none resolved. Enshrined Signatures: tcdb states and renders 37, cardboardconnection and checklistcenter say 38. Horizontal Patch Auto: tcdb states and renders 43, editorial says 44. Vertical Patch Auto: tcdb states and renders 42, editorial says 44. Legendary Scripts: tcdb's header states 57 while its pages render 56, and editorial says 58 - a three-way spread. card_count follows tcdb in every case because tcdb is the source that actually renders the rows, and because the editorial pair is one lineage (CAV-033), not because the editorial figure was tested and failed. A pass with beckett reachable, or with marketplace corroboration, could settle these.
- G-005 NINE SETS HAVE NO SINGLE PRINT RUN, AND sets.csv CANNOT HOLD WHAT THEY DO HAVE. sets.csv has no print_run column (EXTRACTION_SPEC 2.2), so each set's real numbering is recorded only in words in its notes. The distinct serial-token set of every one of these was enumerated over the whole set rather than sampled: Championship Tags Autographs {SN2 x34, SN1 x2}; Dual Patches {SN20, SN15, SN13, SN10}; Flawless Patch Autographs {SN25, SN21, SN15, SN9}; Horizontal Patch Auto {SN25, SN24, SN20, SN19, SN17, SN15}; Patches {SN20, SN17, SN15, SN10}; Rookie Patches {SN20 x18, SN18, SN15}; Signature Prime Materials {SN25, SN22, SN20, SN19, SN16, SN15, SN10}; Star Swatch Signatures {SN25, SN18, SN15}; Vertical Patch Auto {SN25, SN20, SN15, SN13}. WHAT WAS REFUSED: checklistcenter prints "Serial Numbered #/25 or as Noted" for five of these and "#/20 or as Noted" for two more, and cardboardconnection prints a flat "#/2" for Championship Tags Autographs. A ceiling is not a print run and none of those figures was written. The row-level enumeration refutes the flat #/2 outright, on 2 of 36 cards.
- G-006 SIX PARALLEL TIERS ARE PROVABLY SERIAL NUMBERED WITH A PER-CARD VARIABLE RUN, WHICH THE SCHEMA CANNOT EXPRESS. Per EXTRACTION_SPEC 2.3 the forced print_run/serial_numbered pairing collapses this state to UNKNOWN/UNKNOWN, which a consumer cannot distinguish from 'nothing was found'. It is not that - every one of these tiers renders a serial token on every row. The held facts, enumerated over the tiers' own rows: Horizontal Patch Auto Green {SN5 x42, SN3 x1} over 43 of 43; Horizontal Patch Auto Ruby {SN15 x38, SN12 x2, SN13 x1} over 41 of 41; Legendary Scripts Ruby {SN15 x38, SN11 x1} over 40 of a stated 60; Rookie Patches Ruby {SN15 x18, SN12 x1} over 19 of 19; Signature Prime Materials Ruby {SN15 x25, SN14 x1} over 26 of a stated 34; Vertical Patch Auto Ruby {SN15 x42, SN12 x1} over 43 of 43. Five of the six are Ruby tiers, and in four of them a single card breaks an otherwise flat run - which is exactly the shape a three-row sample cannot see. Six of 79 set-scope tiers, 7.6%.
- G-007 COVERAGE SHORT BY ONE ROW ON TWO TIERS THAT WERE NEVERTHELESS WRITTEN WITH AN INTEGER. Both tiers state Total Cards 57 and the union of every fetch made against them reaches 56 rows, all carrying one token (SN20 and SN1 respectively). The integer was written on three grounds: the final Gallery page rendered short of ten tiles, which is the end-of-set signature; tcdb's stated total is documented as unreliable in both directions; and three differently-varied fetches per tier agreed. It is still one row short of a complete enumeration and is recorded here rather than presented as certain. The same shortfall shape was NOT given the benefit of the doubt where the token set was also variable - see Legendary Scripts Ruby and Signature Prime Materials Ruby in G-006, both written UNKNOWN.
- G-008 SINGLE-SOURCED SET. tcdb carries "2018-19 Panini Flawless - Laundry Tag Autographs" (sid 218409, Total Cards 17, all 17 rows rendering "AU, MEM, SN1"). Neither cardboardconnection nor checklistcenter lists the set at all - it is absent from both of their checklist breakdowns, which otherwise cover every other set in this release. Written on tcdb alone. Note the sibling season carries an equivalent set as "Laundry Tags Autographs" (plural Tags); tcdb's 2018-19 title is singular and was not normalised.
- G-009 PRIOR-SEASON UPDATE BLOCKS ARE LISTED BUT THEIR COUNTS ARE UNRESOLVED, AND THE TWO SOURCE FAMILIES DO NOT AGREE ON WHAT THEY EVEN ARE. tcdb files roughly 58 subset entries under this 2018-19 parent belonging to EARLIER products: five "2016-17 Panini Flawless Update II" entries (sids 604369-604372 and 218372), one "2017-18 Panini Flawless Update" (sid 218373) and about 52 "2017-18 Panini Flawless Update I: <set>" entries (sids 605035-605039 and 605549-605595). tcdb's own Notes column on two of these rows reads "Additional cards from the 2016-17 Panini Flawless set that were not distributed during the original release" and the 2017-18 equivalent. The editorial lineage instead carries a single "Flawless Update Set" of "126 cards" / "126 Cards - Serial Numbered as Noted", which does not map onto tcdb's split and was not adopted. Three rows are written with card_count UNKNOWN per EXTRACTION_SPEC 5.5 (list the set, flag it, never write its cards into this release). THE MIRROR OF THIS ALREADY EXISTS IN THE CATALOGUE: flawless-bkb-2019-20's gap G-018 records tcdb filing "2018-19 Panini Flawless Update" (sid 255520) and its Update I subsets under the 2019-20 parent - so THIS release's own late cards live under the NEXT season's parent, and the previous season's live here. A future pass should handle both directions together.
- G-010 FETCH-LAYER TRUNCATION ON Inserts.cfm, RECOVERED RATHER THAN RECORDED AS A LOSS. The listing self-describes as "Insert Sets (166)" and the fetch delivered 161 entries, cutting mid-entry after "VS. Signatures Left Ruby" (sid 218471). Re-fetching under ?x=1, under ?SORT=DESC and under a second valid slug all cut at the same place, which per CHASE_CHECKLIST_SPEC is the signature of a limit on this side of the wire rather than tcdb's own stochastic truncation. The five missing entries were recovered by probing sids 218472-218476 individually (VS. Signatures Right plus its Gold, Green, Platinum and Ruby parallels), which makes 161 + 5 = 166 and reconciles the listing exactly. Recorded so the next pass does not rediscover the wall. Note that the reconciliation also licenses the negative finding in G-001: nothing is hiding in this listing.
- G-011 THE LINE'S ENTIRE GEM LADDER COLLAPSES TO parallel_family='other'. parallel_family is derived, as required, from the single ordered FAMILIES list in pipeline/fix_schema.py lifted by AST, and that list has entries for Platinum and Bronze but none for Ruby, Gold, Green or Pink. The result is 61 of 83 rows carrying 'other' - including every Ruby, Gold and Green row in the release, which is the dominant visual system of the Flawless line and of its six catalogued sibling seasons. No family was minted and no entry was added to fix_schema.py, per the round-8 brief. Reported so the question can be settled once for the whole line rather than per release; note CAV-021 already records an unresolved question about what parallel_family should hold.
- G-012 BECKETT UNREACHABLE FOR THE WHOLE BUILD, exactly as CAV-033 and the task brief describe: every request 302-redirects to maintenance.beckett.com. No fetch was spent on it. The consequence is concrete rather than cosmetic: with beckett gone, 'corroborated by two sources' on this release means cardboardconnection plus checklistcenter, which agree almost verbatim and are one editorial lineage. Every value in this release that does not rest on a tcdb row-level rendering is therefore single-sourced in substance - see G-001 and G-004.
- G-013 NO VARIATION-SET INVESTIGATION WAS PERFORMED, AND THIS RELEASE MAKES NO CLAIM THAT THERE IS NONE. Errors.cfm was not fetched on the parent sid; the session fetch budget was spent on enumerating the distinct serial-token set of all 79 parallel tiers instead. Per CAV-020 a clean Errors.cfm would have been worthless as evidence of absence anyway, so nothing was lost by not asking it. WHAT DOES SURVIVE without it: base_set_size, the base-run contiguity of 1-160 with 130 unissued, and the finding that no numbered block sits past 160 - all three rest on an independent contiguous enumeration of the parent (Checklist.cfm pages 1 and 2 plus Gallery pages 9, 10, 13 and 16; page 2 rendered its full 59 rows and stopped at 160, and Gallery page 16 rendered 9 tiles ending at 160). WHAT DOES NOT SURVIVE: any statement about b-suffixed or photo variation rows, which a base-run enumeration is not designed to surface.
- G-014 rookie_flag IS UNKNOWN ON EVERY BASE CARD. tcdb rendered a flag column on every page fetched and it carried serial and subset tokens (SN20, SN5, LGD, AS) but no RC token on any row, including on cards 81-100, which are the 2018-19 rookie class (Doncic, Trae Young, Ayton, Jaren Jackson Jr., Shai Gilgeous-Alexander and so on) and would certainly carry one if tcdb recorded it for this set. Per the round-8 brief and EXTRACTION_SPEC, a token NOT seen is evidence of nothing until a second differently-varied fetch agrees; the absence here was observed on both Checklist.cfm and Gallery.cfm, but absence of an RC designation is not a source stating these are not rookie cards, so UNKNOWN is written rather than 'no'. This matches CAV-003.
- G-015 THIS RELEASE CONTRADICTS EVERY CATALOGUED SIBLING SEASON ON STRUCTURE, AND THE CONTRADICTION IS REAL RATHER THAN A CONVENTION SLIP. All six Flawless seasons already in data/ (2019-20 through 2024-25) carry base_set_size=200, a 100-card Main tier at /20 and further tiers at /5 or /10 named Legends, All-Stars, MVPs, Team USA, Flashbacks, Flawless Picks and so on. 2018-19 is base_set_size=159 across two tiers only. The base-run parallel ladder is reversed too: every sibling season carries Gold /10, Emerald /5, Bronze FOTL /3 (Fuchsia /3 in 2024-25) and Platinum 1/1, where 2018-19 carries Double /10, Triple /5, Bronze FOTL /2 and Platinum 1/1 - so both the names and the Bronze print run move. NOTHING was inherited: every value here has its own 2018-19 source. Recorded per EXTRACTION_SPEC section 6's cross-season check so a reader comparing the line by card number is warned rather than misled. Separately, the section 5.3 exclusion rule did not have to be applied: there is no autograph or memorabilia block numbered past the base run in this parent - the checklist stops dead at 160 and every set in the release has its own sid.
- G-016 FIVE PARALLEL TIERS RENDER FEWER CARDS THAN THE SET THEY PARALLEL, which is recorded because it looks exactly like a coverage hole and is not one. Dual Patches is 40 cards but its Gold tier states and renders 25 and its Ruby tier 15; Patches is 40 but its Gold is 39 and its Ruby 27; Star Swatch Signatures is 8 but its Ruby is 6. In each case the tier's own Total Cards and its rendered row count agree with each other, so the tier genuinely has a shorter roster rather than being truncated. parallels.csv has no card_count column so this cannot be recorded structurally; it is in each row's visual_notes and here.
- G-017 SET-BOUNDARY DISAGREEMENT, resolved in favour of tcdb and recorded. cardboardconnection and checklistcenter both carry a single "VS. Signatures Set" of 18 cards; tcdb carries two sets, "VS. Signatures Left" (sid 218467, 9 cards) and "VS. Signatures Right" (sid 218472, 9 cards), each with its own Gold, Green, Platinum and Ruby parallels. 9 + 9 reconciles to the editorial 18 exactly, which is why this is filed as a naming/boundary question rather than a count dispute. Two rows are written, following tcdb because tcdb is what renders the cards and carries the sids a chase pass will need. A resolver looking for a single 18-card "VS. Signatures" will not find one in this release.
- G-018 ADVANCE WARNING FOR THE CHASE PASS, not a defect in this release's files. Gallery.cfm?PageIndex=2 on Championship Tags (sid 218374) renders a card-number column mixing real letter codes with bare ordinals: tiles read C-KDR, C-CPL, C-DNK, C-DWD, C-KIV, C-BGF, C-GAN and C-BBL alongside "11" (Stephen Curry) and "16" (Damian Lillard). Per CHASE_CHECKLIST_SPEC this mixed shape is the dominant pattern on premium lines and the real codes settle the scheme for the set, so the ordinals are tcdb placeholders and must not be written as card numbers. No insert_cards.csv was produced by this build - card-level chase checklists are a separate pass - so nothing is wrong on disk; this is recorded so the next agent does not have to rediscover it.
- G-019 NO MARKETPLACE EVIDENCE WAS OBTAINED FOR ANY VALUE IN THIS RELEASE. EXTRACTION_SPEC 3.4 requires marketplace corroboration before writing plain integers onto an autograph set, and the scope memo records that 2018-19 is the richest modern season for it (the Doncic / Trae Young / Ayton rookie year). None was fetched: the session fetch limit was reached, and the budget had been deliberately spent instead on enumerating the distinct serial-token set of every one of the 79 parallel tiers, which is what the task brief identified as the larger risk at this price tier. The trade-off is stated rather than hidden. Note that no plain integer card_number was written anywhere in this release - base_cards.csv is the base run only, and no insert_cards.csv was produced - so the specific failure 3.4 guards against is not live here. What is still uncovered is G-001: the base-run parallel ladder, which one eBay or goldin lot title carrying a Double or Triple serial would independently confirm.
If you know a source that answers one of these, tell us — name the question's label and where to look.
Draft — sourced but not independently verified. How this catalogue is built