Spreadsheets
A spreadsheet with the columns and sums already in it. Open it, fill in your numbers.A spreadsheet with the columns and sums already in it. Open it, fill in your numbers.CSV templates; formulas included, open in Excel, Numbers or Sheets.
- Sheet: phenotype log templateSpreadsheetSpreadsheetsheetfromfrom← Could AI Help Design Strains?Could AI Help Design Strains? Genomic Prediction and the Data Growers Would NeedGenomic prediction for cannabis: marker data, the phenotype bottleneck, what is realistic in 2026 · MoonshotsMoonshots: Genetics, Your Own Model, a BenchmarkResearch Directions
One row per plant per week: the columns to log so that, years from now, you have something a model could actually learn from.One row per plant per week: the columns to log so that, years from now, you have something a model could actually learn from.One row per plant per week: the columns to log so that, years from now, you have something a model could actually learn from.
A piece of itExampleExample run_id,room,plant_id,cultivar,mother_id,seed_or_clone,genotype_sample_id,log_date,week_from_flip,stage,height… 2026-03-02-A,Flower 2,P-0001,Acme Cut 7,M-014,clone,GT-0001,2026-03-09,1,veg,42,4.5,9,7.2,4,4,1,n,25.1,62,650… 2026-03-02-A,Flower 2,P-0001,Acme Cut 7,M-014,clone,GT-0001,2026-04-27,8,late flower,118,5.1,,12.4,3,4,2,n,23…
Download phenotype-log-template.csvDownload phenotype-log-template.csvphenotype-log-template.csv · 1.4 KB
# phenotype-log-template.csv v1.0 2026-09-17 CC0, from Distru's No Bullshit AI Course (08-moonshots/01) # README: one row per plant per week, plus one row at harvest. Same columns, same units, every time, for every plant. Consistent logging is the prerequisite for any trait prediction; a model can only learn from traits that were measured the same way on enough plants. Fill unknowns with blank, never with a guess. Delete these three comment lines before importing into a spreadsheet. run_id,room,plant_id,cultivar,mother_id,seed_or_clone,genotype_sample_id,log_date,week_from_flip,stage,height_cm,internode_spacing_cm,node_count,stem_diameter_mm,leaf_color_1_5,vigor_1_5,pest_pressure_1_5,pm_present_yn,temp_c_avg,rh_pct_avg,ppfd_umol,co2_ppm,ec_in,ph_in,ec_out,ph_out,irrigation_l_per_day,nutrient_recipe_id,harvest_date,wet_weight_g,dry_weight_g,trim_weight_g,flower_days,coa_batch_id,coa_total_thc_pct,coa_total_cbd_pct,coa_total_terpenes_pct,coa_top_terpene,coa_top_terpene_pct,aroma_note,notes,logged_by 2026-03-02-A,Flower 2,P-0001,Acme Cut 7,M-014,clone,GT-0001,2026-03-09,1,veg,42,4.5,9,7.2,4,4,1,n,25.1,62,650,900,1.8,5.9,2.1,6.1,1.2,R-veg-01,,,,,,,,,,,,"citrus","first week after flip",dana 2026-03-02-A,Flower 2,P-0001,Acme Cut 7,M-014,clone,GT-0001,2026-04-27,8,late flower,118,5.1,,12.4,3,4,2,n,23.4,48,900,1100,2.2,6.0,2.6,6.3,2.4,R-flower-03,2026-05-04,612,131,98,63,COA-24-0451,21.4,0.1,2.3,limonene,0.81,"citrus, fuel","one branch snapped week 5",dana - Checklist: clean a CSV before you upload itSpreadsheetSpreadsheetsheetfromfrom← Paste the Spreadsheet: Working With Your Own DataPaste the Spreadsheet: Your Own Data in the Context WindowTabular data in context: CSV size, chunking, redaction, and asking for the query instead of the answer · Prompts That Actually WorkPrompts That Work for OperatorsPrompting for Operators
Everything to fix in a spreadsheet before you import it or paste it: one header row, IDs kept as text, one unit per column, no totals row at the bottom.Everything to fix in a spreadsheet before you import it or paste it: one header row, IDs kept as text, one unit per column, no totals row at the bottom.Everything to fix in a spreadsheet before you import it or paste it: one header row, IDs kept as text, one unit per column, no totals row at the bottom.
A piece of itExampleExample Keep the original. Duplicate the file. Name it original-YYYY-MM-DD.csv. Never edit the original. Know the target. If this is going into a system (Distru, QuickBooks, Metrc), open that system's…
Download csv-cleanup-checklist.mdDownload csv-cleanup-checklist.mdcsv-cleanup-checklist.md · 3.4 KB
# Clean a CSV Before You Upload It (or Paste It Into AI) From Distru's No Bullshit AI Course, modules 03 and 05. A bad import is worse than no import. Two minutes here saves an afternoon later. ## Before you touch anything - [ ] **Keep the original.** Duplicate the file. Name it `original-YYYY-MM-DD.csv`. Never edit the original. - [ ] **Know the target.** If this is going into a system (Distru, QuickBooks, Metrc), open that system's import template first. Column names must match it exactly. ## Structure - [ ] One header row, row 1. No title rows, no blank rows above it. - [ ] No merged cells. No sub-headers. No totals row at the bottom. - [ ] One value per cell. "3.5g x 12" is two columns (`weight`, `qty`), not one. - [ ] Every row has the same number of columns. A stray comma inside a product name breaks this; wrap that cell in quotes or remove the comma. - [ ] Delete columns you do not need. Fewer columns, fewer mistakes, and cheaper to paste into AI. ## Identifiers - [ ] IDs and tags are text, not numbers. Spreadsheets turn `000123` into `123` and long tags into `1.23E+23`. Format the column as text *before* pasting data into it. - [ ] Metrc tags are 24 characters. Check one. If they are 23 or 25, something got trimmed or padded. - [ ] No leading or trailing spaces in ID columns. Use TRIM. - [ ] Case is consistent. Tags are usually uppercase. ## Numbers and units - [ ] Quantities are plain numbers: `453.6`, not `453.6 g` or `453,6` or `$453.60`. - [ ] One unit per column. If the sheet mixes grams and pounds, add a `unit` column or convert everything to one unit. 1 lb = 453.592 g. - [ ] No currency symbols or thousands separators in numeric columns. - [ ] Negative numbers are real negatives (`-12`), not `(12)` or `12-`. ## Dates - [ ] One format. ISO (`2026-09-16`) is safest and every system reads it. - [ ] No mixed `MM/DD` and `DD/MM`. If you are not sure which one a column is, find a row with day > 12 and check. - [ ] No text like `yesterday`, `Q3`, or `next week`. ## Text - [ ] Product names match the target system's names exactly, or you have a mapping column. - [ ] No line breaks inside cells unless the cell is quoted. - [ ] Remove notes to yourself ("check this!!", "??"). - [ ] Encoding is UTF-8. If you see `é` or `’`, the file was saved wrong. Re-export. ## Privacy (before pasting into any AI) - [ ] No customer names, phone numbers, emails, or addresses unless the task truly needs them. Replace with `Customer 1`, `Customer 2`. - [ ] No employee SSNs, DOBs, or badge numbers. Ever. - [ ] No API keys, passwords, or license numbers in any cell or header. ## The two-minute check 1. Sort by each ID column. Look at the top and bottom rows for blanks and weird values. 2. Row count before = row count after (unless you meant to delete rows). Write both numbers down. 3. Open the file in a plain text editor. Look at the first three lines. That is what the machine sees. ## Let AI do the boring part (safely) Paste the header row and three sample rows, then ask: > "Here is my header and three sample rows. Write me a formula or a short script that [converts all dates to YYYY-MM-DD / strips units from the quantity column / trims spaces from the tag column]. Do not change any values you were not asked to change. Explain how to check that only that column changed." Then **diff** old vs. new. Only the intended column should differ. If anything else changed, stop. License: CC0. - Sheet: AI cost estimator for one workflow (CSV with formulas)SpreadsheetSpreadsheetsheetfromfrom← What This Actually CostsWhat This Actually Costs: Tokens In, Tokens Out, and Why Plugs Bill Every MessageToken economics: input vs. output, per-turn context cost, caching, batch, and a monthly estimate per workflow · Pick the Right ToolPick the Right Tool: Model, Automation or AgentModel & Architecture Selection
Fill in ten numbers and it tells you what one AI job costs per run, per month and per year, and whether the time it saves is worth it.Fill in ten numbers and it tells you what one AI job costs per run, per month and per year, and whether the time it saves is worth it.Fill in ten numbers and it tells you what one AI job costs per run, per month and per year, and whether the time it saves is worth it.
A piece of itExampleExample Section,Item,Value,Note About,"AI cost estimator, one workflow",v1,"From Distru's No Bullshit AI Course, module 02 lesson 04. Fill th… Inputs,Runs per month,300,How many times the workflow fires. Friday Metrc reconciliation = 4; every buyer ema…
Download ai-cost-estimator.csvDownload ai-cost-estimator.csvai-cost-estimator.csv · 2.8 KB
Section,Item,Value,Note About,"AI cost estimator, one workflow",v1,"From Distru's No Bullshit AI Course, module 02 lesson 04. Fill the yellow-ish Inputs rows (column C); the Results rows are formulas. Prices are Anthropic list prices, September 2026; TypeSafe Jev list price, September 2026. Re-check before budgeting. License: CC0. Tested by opening with Python's csv module and evaluating every formula; also opens in Excel, Numbers and Google Sheets (File > Import)." Inputs,Runs per month,300,How many times the workflow fires. Friday Metrc reconciliation = 4; every buyer email = 300. Inputs,Fixed tokens per run,4000,"Standing instructions, rules, examples and any connector tool lists. Same every run, so it can be cached. A one-page rules block is about 700 tokens." Inputs,Words you paste per run,4500,The data that changes each run. A 10-column spreadsheet row is about 30 words; one email is 150-300 words. Inputs,Variable input tokens per run,"=ROUND(C5/0.75,0)","Anthropic's rule of thumb: 1 token is about 0.75 English words. Newer Claude models tokenize about 30% denser than that, so this leans high." Inputs,Output tokens per run,800,What it writes back. One paragraph is 150-300 tokens; a 30-row table is 800-1500. Inputs,Turns per run,1,A chat message or one API call = 1. An agent loop re-sends everything each turn; count the turns. Inputs,Input price per 1M tokens ($),2,"Anthropic list, September 2026: Haiku 4.5 = 1, Sonnet 5 = 2, Opus 5 = 5. Check the vendor page." Inputs,Output price per 1M tokens ($),10,"Haiku 4.5 = 5, Sonnet 5 = 10, Opus 5 = 25." Inputs,Cache hit share of fixed tokens (0-1),0.9,0 if you paste into a chat by hand. 0.9 if your automation marks the fixed part with cache_control. Cache reads are 0.1x the input price. Inputs,Batch discount (0 or 0.5),0,0.5 only if the job can wait up to 24 hours and runs through the Batch API. Results,Input tokens per run,=(C4+C6)*C8, Results,Cached input tokens per run,=C4*C11*C8, Results,Uncached input tokens per run,=C13-C14, Results,Cost per run ($),"=ROUND((C15*C9+C14*C9*0.1+C7*C10)/1000000*(1-C12),4)","Output tokens are the total for the whole run, not per turn." Results,Cost per month ($),"=ROUND(C16*C3,2)", Results,Cost per year ($),"=ROUND(C17*12,2)", Compare,Minutes of a person's time saved per run,10,Be honest. Checking the output counts against this number. Compare,Loaded hourly cost of that person ($),22, Compare,Time value per month ($),"=ROUND(C19*C3/60*C20,2)", Compare,Time value divided by AI cost,"=ROUND(C21/C17,0)",Under 3 and the automation is not paying for itself once you count the setup afternoon. Compare,"Decision model instead, per month ($)","=ROUND(C13*C3*0.042/1000000,4)","Only if the answer is a label, a score or a yes/no that software reads. TypeSafe Jev list price, September 2026: $0.042 per 1M input tokens, output free." - Sheet: 280E-aware chart of accounts (CSV)SpreadsheetSpreadsheetsheetfromfrom← Accounting, 280E, and QuickBooks: Where AI Helps (and Where It Can't)Accounting, 280E, and QuickBooks: AI Sorts the Pile Monthly, Your CPA Decides280E bookkeeping: LLM first-pass classification into a COGS-aware chart of accounts, CPA review, and the QBO PurchaseOrder-vs-Bill sync · Cannabis Problems, Solved With AICannabis Problems: Metrc, Inventory, Sales, 280EDomain Workflows: Compliance, Inventory, Sales, Accounting
A starting chart of accounts that already separates what survives 280E from what does not, with the shared costs flagged for your CPA.A starting chart of accounts that already separates what survives 280E from what does not, with the shared costs flagged for your CPA.A starting chart of accounts that already separates what survives 280E from what does not, with the shared costs flagged for your CPA.
A piece of itExampleExample account_code,account_name,account_type,cogs_bucket,typical_for,notes 4000,Sales - Cannabis Products,Income,N/A,all,Taxable revenue; excise and sales tax collected go to liability… 4100,Sales - Non-Cannabis Accessories,Income,N/A,retail,Lighters and glassware; some CPAs track a separate tr…
Download 280e-chart-of-accounts.csvDownload 280e-chart-of-accounts.csv280e-chart-of-accounts.csv · 3.4 KB
account_code,account_name,account_type,cogs_bucket,typical_for,notes 4000,Sales - Cannabis Products,Income,N/A,all,Taxable revenue; excise and sales tax collected go to liability accounts below 4100,Sales - Non-Cannabis Accessories,Income,N/A,retail,Lighters and glassware; some CPAs track a separate trade or business here. Ask yours 2200,Excise Tax Payable,Liability,N/A,retail;distribution,Collected on behalf of the state; not revenue and not an expense 5000,COGS - Cannabis Product Purchases,COGS,COGS,retail;distribution,Wholesale product bought for resale; invoice from a licensed seller 5010,COGS - Inbound Freight and Transfer Fees,COGS,COGS,all,Distributor transport charges on incoming product 5020,COGS - Raw Materials and Nutrients,COGS,COGS,cultivation;manufacturing,Soil media nutrients clones seeds solvents 5030,COGS - Packaging and Labels,COGS,COGS,cultivation;manufacturing;distribution,Product packaging that ships with the product. Retail shopping bags are usually not here; ask your CPA 5040,COGS - Production Labor,COGS,COGS,cultivation;manufacturing,Growers trimmers extractors packagers. Job title decides; SPLIT if the person also sells 5050,COGS - Lab Testing,COGS,COGS,cultivation;manufacturing;distribution,Required compliance testing on batches 5060,COGS - Production Facility Costs,COGS,SPLIT,cultivation;manufacturing,Rent utilities and repairs for grow or lab space. Shared buildings need a square-footage allocation 5070,COGS - Metrc Tags and Track-and-Trace Fees,COGS,SPLIT,all,Tag purchases; classification varies by method and license type. Flag for CPA 6000,Rent - Retail and Office,Expense,NON_COGS,retail;all,Sales floor and office space. SPLIT if the building also holds production or storage 6010,Utilities - Retail and Office,Expense,NON_COGS,retail;all,SPLIT when one meter covers production and retail 6100,Wages - Sales and Front of House,Expense,NON_COGS,retail;distribution,Budtenders sales reps receptionists 6110,Wages - Management and Admin,Expense,NON_COGS,all,Owners bookkeepers HR. SPLIT if they also do production work 6200,Marketing and Advertising,Expense,NON_COGS,all,Menus loyalty platforms listing fees printed materials 6210,Software and Subscriptions,Expense,NON_COGS,all,POS ERP accounting menu platforms. Some CPAs allocate inventory software; ask 6300,Security Services and Equipment,Expense,NON_COGS,all,Guards cameras alarm monitoring. Compliance-required is not the same as cost of goods; ask your CPA 6400,Professional Fees,Expense,NON_COGS,all,Legal CPA consultants 6500,Licenses Permits and Regulatory Fees,Expense,NON_COGS,all,State and local license renewals and application fees 6600,Insurance,Expense,NON_COGS,all,General liability product liability property. SPLIT if a policy is specific to production 6700,Repairs and Maintenance - Retail and Office,Expense,NON_COGS,retail;all,Production-area repairs belong in 5060 6800,Vehicle and Delivery,Expense,SPLIT,distribution;retail,Outbound delivery is usually not COGS; inbound transport of product is 5010 6900,Bank Fees and Merchant Processing,Expense,NON_COGS,all,ACH and cashless ATM fees 7000,Meals Travel and Entertainment,Expense,NON_COGS,all,Rarely COGS. Watch for PERSONAL? flags 7100,Office Supplies,Expense,NON_COGS,all, 1200,Inventory Asset,Asset,N/A,all,Product purchases may post here first and move to 5000 when sold depending on your method. Ask your CPA 2100,Sales Tax Payable,Liability,N/A,retail, 9999,UNSORTED,Review,UNSURE,all,The model could not place it. A person looks at every one