{"contractVersion":"1.1.0","guide":"/developers","guideMarkdown":"/developers.md","notes":["fees[] applies to group-targeted strands only; the installing group/club owner collects them.","Named functions ({ \"fn\": ... }) in dueDate/condition are planned, not yet accepted.","Native strands (pattern \"native\", with native.module and presets) are shipped by the platform, not submitted."],"vocab":{"thread":["health","social","love","stability","career","growth"],"pattern":["task_generator","list_with_tasks","habit_tracker","goal_tracker","event_organiser"],"targetType":["individual","group","both"],"configFieldType":["text","textarea","number","date","datetime","boolean","select","frequency","array","file"],"priority":["low","medium","high"],"recurrenceType":["daily","weekly","monthly","yearly"],"dueDateType":["relative","frequency"],"conditionOperators":["exists","equals","notEquals"],"eventType":["birthday","anniversary","appointment","reminder","other"],"eventRecurrence":["yearly","monthly","once"],"groupAssignmentMode":["everyone","rotate","fixed","select"],"fixedRole":["owner","admin","any"],"formSubmitType":["append_to_config","update_config_item","create_event","create_task"],"uiComponent":["card","tabs","stat","stats_grid","progress_ring","task_list","next_tasks","strand_health","entity_list","text","action_button","event_list","next_events"],"uiAction":["open_form","rsvp"],"migrationOperation":["renameField","copyField","wrapInArray","setDefault","removeFields","transformValue"],"feeInterval":["one_off","month","year"],"paths":{"config":"config.<fieldId>","forEachItem":"<as>.<fieldId>","placeholder":"{{<as>.<fieldId>}}"},"units":{"dates":"ISO YYYY-MM-DD","money":"integer pence"}},"skeleton":{"id":"kebab-slug","name":"Display name","description":"One or two sentences.","icon":"🧩","thread":"stability","version":"1.0.0","pattern":"task_generator","targetType":"individual","configSchema":[{"id":"anchorDate","label":"An important date","type":"date","required":true,"placeholder":"","helpText":"Shown under the field","default":"","step":"Basics"},{"id":"cadence","label":"How often","type":"select","required":true,"default":"monthly","options":[{"value":"weekly","label":"Weekly"},{"value":"monthly","label":"Monthly"},{"value":"never","label":"Never"}]},{"id":"items","label":"Things","type":"array","required":false,"minItems":0,"itemSchema":[{"id":"name","label":"Name","type":"text","required":true},{"id":"date","label":"Date","type":"date","required":false}]},{"id":"photo","label":"Photo","type":"file","required":false,"accept":"image/*","bucket":"photos"}],"taskTemplates":[{"id":"anchored","title":"Do the thing","description":"Three weeks before the date.","priority":"high","healthImpact":-10,"dueDate":{"source":"config.anchorDate","offset":{"days":-21},"fallback":{"type":"relative","days":7}}},{"id":"per-item","title":"Check {{item.name}}","priority":"low","healthImpact":3,"forEach":"config.items","as":"item","condition":{"field":"item.date","exists":true},"recurrence":{"type":"monthly","interval":1},"dueDate":{"source":"item.date","offset":{"months":1}},"groupAssignment":{"mode":"rotate","rotationKey":"items"}},{"id":"by-cadence","title":"Routine check","priority":"low","healthImpact":2,"condition":{"field":"config.cadence","notEquals":"never"},"dueDate":{"type":"frequency","source":"config.cadence","map":{"weekly":{"days":7},"monthly":{"days":30}},"fallback":{"type":"relative","days":30}}},{"id":"simple","title":"In a month","priority":"medium","healthImpact":1,"dueDate":{"type":"relative","days":30}}],"eventTemplates":[{"id":"item-day","title":"{{item.name}} day","eventType":"reminder","allDay":true,"forEach":"config.items","as":"item","date":{"source":"item.date","recurrence":"yearly","offset":{"days":0}},"duration":{"hours":1,"minutes":0},"busy":false,"location":"","healthImpact":0,"condition":{"field":"item.date","exists":true},"reminderTasks":[{"title":"Prepare for {{item.name}}","priority":"low","daysBefore":3}]}],"forms":[{"id":"add-item","title":"Add a thing","description":"","mode":"create","entityType":"item","fields":[{"id":"name","label":"Name","type":"text","required":true},{"id":"date","label":"Date","type":"date","required":false}],"submitLabel":"Add","onSubmit":{"type":"append_to_config","target":"items","regenerateTasks":true}}],"uiLayout":{"dashboard":{"type":"card","children":[{"type":"strand_health","showRing":true,"stats":["pending","overdue"]},{"type":"next_tasks","limit":3,"showDueDate":true,"emptyMessage":"Nothing due"},{"type":"action_button","label":"Add a thing","variant":"secondary","action":{"type":"open_form","formId":"add-item"}}]},"detail":{"type":"tabs","tabs":[{"label":"Things","content":{"type":"entity_list","source":"config.items","entityType":"item","display":{"title":"{{item.name}}","subtitle":"{{item.date}}"},"actions":[{"type":"open_form","formId":"add-item","label":"Edit"},{"type":"delete","label":"Remove"}],"emptyState":{"message":"Nothing yet","actionLabel":"Add one","action":{"type":"open_form","formId":"add-item"}}}},{"label":"Tasks","content":{"type":"task_list","filter":"strand"}},{"label":"Progress","content":{"type":"stats_grid","columns":2,"stats":[{"type":"stat","label":"Anchor","value":"{{config.anchorDate}}","format":"date"}]}}]}},"migrations":[{"fromVersion":"0.9.0","description":"Example migration","operations":[{"type":"renameField","from":"oldDate","to":"anchorDate"},{"type":"setDefault","field":"cadence","value":"monthly"}]}],"fees":[{"id":"kitty","label":"Monthly kitty","amount_pence":300,"interval":"month"}]}}