{"id":"data2-event-tracking-plan-csv-unknowns","audience":"analysts","category":"data","track":"data","technique":"grounding","level":"intermediate","title":"Turn a tracking plan into a CSV event dictionary","free":false,"task":"You're building an event dictionary for the product analytics tool. Write one CSV block (one code block) with the header event_name,fires_when,key_properties and one row per event, in the same order as the plan. Use only the plan; if it doesn't say when an event fires or its properties, write unknown in that cell. At most 15 words outside the code. Wrap cells that contain commas in double quotes.","materialLabel":"Tracking plan notes (attached to your prompt automatically)","material":"Tracking plan v3 - Orbit Notes app (partial, 5 events)\n\nsignup_completed\n  Fires when a new user finishes the signup form and the account is created.\n  Properties: method (email, google), referrer.\n\nnote_created\n  Fires when a user saves a brand-new note. Not fired for edits.\n  Properties: note_id, template_used (true/false).\n\nnote_shared\n  Fires when a user sends a share link or invites someone to a note.\n  Properties: note_id, share_type (link, invite), recipient_count.\n\nexport_clicked\n  (Added by the growth team in September. No description was written.)\n  Properties: not documented.\n\npaywall_viewed\n  Fires when the upgrade screen is shown after a user hits the free limit of 50 notes.\n  Properties: trigger (limit, feature), notes_count.\n\nNotes:\n- Property names use snake_case.\n- Marketing has asked whether export_clicked also fires on PDF downloads; engineering hasn't confirmed.","rules":[{"type":"codeBlocks","count":1},{"type":"maxProseWords","max":15}],"mistakes":[{"title":"Guessing the missing event","why":"The AI writes that export_clicked fires on exports or PDF downloads.","fix":"Add: \"export_clicked: write unknown in both cells.\"","checks":["r0"]},{"title":"Messy CSV","why":"The AI uses commas inside cells without quotes, breaking columns.","fix":"Add: \"Property names separated by semicolons; quote any cell with a comma.\"","checks":["r1"]},{"title":"Dropping plan details","why":"The AI loses facts such as 'not fired for edits' and the 50-note limit.","fix":"Add: \"fires_when from the plan only, under 15 words.\"","checks":["r2"]},{"title":"Leaving the format to chance","why":"The AI picks its own length and layout unless told the exact shape.","fix":"Add: \"Put the code in exactly 1 code block. Keep the writing outside the code under 15 words.\"","checks":["codeBlocks","maxProseWords"]}],"promptHints":[{"label":"Names the header","patterns":["event_name,fires_when","header"]},{"label":"Handles unknowns","patterns":["unknown","don.t guess"]},{"label":"Fixes the quoting","patterns":["double quotes","quote","semicolons"]},{"label":"Keeps the plan order","patterns":["same order","5 rows","plan.s order"]},{"label":"Caps outside text","patterns":["one (short )?sentence","\\d+ words"]}],"hint":"Dictionaries invented from thin documentation are worse than gaps. Ask for unknown, and fix the CSV shape.","mission":"Document the product analytics events for the team.","musts":["One CSV block, 5 rows","Unknown stays unknown","Quote cells with commas"],"rubricLabels":["The code block is CSV with the header event_name,fires_when,key_properties and 5 data rows in the plan's order (signup_completed, note_created, note_shared, export_clicked, paywall_viewed)","The export_clicked row has unknown for fires_when and unknown for key_properties, and does not claim it fires on PDF downloads","Cells with commas are wrapped in double quotes, note_created says it is not fired for edits, and paywall_viewed mentions the free limit of 50 notes"]}