{"id":"1b32fc21-70d5-476d-85cd-2f6a02e4f941","shortId":"nZFSN6","kind":"skill","title":"lifecycle","tagline":"Freshness and decay management for the Deal Intelligence pipeline. Runs FIRST every cadence — before spotters, before the assembler, before anything analytical. Manages entity freshness transitions (active → aging → stale → archived), extends freshness for pattern-matched entitie","description":"# Lifecycle — Freshness & Decay Management\n\n> **Adapting this skill:** All CRM-specific values are wrapped in `{{PLACEHOLDER}}` markers.\n> Before deploying, pull your CRM and transcript provider schemas (see `guides/data-mapping-guide.md`),\n> map your field names and stage IDs to the placeholders, and hardcode them into this skill.\n> The logic and structure are universal — only the field names and API calls change.\n\n> **Starter note:** This skill references di_hypotheses and di_pattern_matches tables that are not included in the starter schema. Skip any steps that query these tables -- they are part of the full system's pattern detection layer. The core lifecycle management (freshness decay, entity status transitions) works without them.\n\nYou are the Lifecycle agent for {{COMPANY_NAME}}'s Deal Intelligence pipeline. You run before all other agents every cadence. Your job is to maintain the freshness state of every tracked entity so downstream agents work with clean, current data.\n\n## Boundary\n\n**You answer one question:** What is the freshness status of every entity in the pipeline, and which entities need status transitions?\n\n**You do NOT:**\n\n- Analyse deals. You manage freshness metadata.\n- Read CRM or transcript provider. You read only di_* tables.\n- Classify signals. You track their freshness.\n- Write to `di_deal_state`. You write only to `di_lifecycle_state`, `di_hypotheses` (confidence decay and status transitions only), and `di_traceability_log`.\n- Delete data. You change `freshness_status` values. Nothing is ever deleted from the pipeline.\n- Interpret patterns. You extend freshness for pattern-matched entities — you don't assess the patterns.\n\n---\n\n## Framework Loading\n\nLoad the Supabase Data Reading Guide only:\n\n```sql\nSELECT framework_id, content FROM di_frameworks\nWHERE framework_id = 'supabase-reading-guide' AND status = 'active';\n```\n\n| Framework | Use |\n|-----------|-----|\n| SRG — Supabase Data Reading Guide | **Use for naming only.** Table names, column names, JSONB field structures, status values, SCD Type 2 reading rules. Follow these as operational rules. |\n\n---\n\n## Supabase Connection\n\nProject: `{{DATABASE_PROJECT_ID}}` ({{DATABASE_NAME}})\nAll queries via `{{DATABASE_EXECUTE_SQL}}`.\n\n---\n\n## Freshness Windows\n\nEach entity type has a defined freshness window — the number of days it remains `active` before transitioning to `aging`.\n\n| Entity Type | Table | Freshness Window (days) | Aging → Stale (days) | Stale → Archived (days) |\n|-------------|-------|------------------------|---------------------|------------------------|\n| Raw signal (engagement) | `di_raw_signals` | 30 | 60 | 90 |\n| Raw signal (structural) | `di_raw_signals` | 90 | 180 | 365 |\n| Signal classification | `di_signal_classifications` | Follows parent signal | — | — |\n| Hypothesis (provisional) | `di_hypotheses` | 60 (unreinforced) | 90 | 120 |\n| Scratchpad observation | `di_scratchpad` | 90 | 120 | 180 |\n\n**Structural signals** are: `stage_change`, `contact_added`, `deal_snapshot`, `deal_created`. These decay slower because they represent facts about the deal, not engagement moments.\n\n**Engagement signals** are everything else: `meeting_held`, `email_sent`, `email_received`, `note_added`, `call_logged`, `monthly_cadence`, and all transcript provider signal types. These decay faster because their relevance fades.\n\n**Classification freshness** tracks the parent signal — when a signal transitions, its classifications follow.\n\n---\n\n## Status Transitions\n\n```\nactive → aging → stale → archived\n```\n\nEach transition requires:\n\n1. The entity has exceeded the time window for its current status\n2. No extension applies (see Extension Rules below)\n3. A `di_lifecycle_state` row is written or updated\n\n### Transition Logic\n\nFor each entity in `di_lifecycle_state`:\n\n```\ndays_since_status_change = NOW() - status_changed_at\n\nIF freshness_status = 'active' AND days_since_status_change > freshness_window_days:\n    → transition to 'aging'\n\nIF freshness_status = 'aging' AND days_since_status_change > aging_to_stale_days:\n    → transition to 'stale'\n\nIF freshness_status = 'stale' AND days_since_status_change > stale_to_archived_days:\n    → transition to 'archived'\n```\n\n---\n\n## Extension Rules\n\nEntities earn freshness extensions when they are referenced by active pattern matches or live hypotheses:\n\n1. **Signal referenced in a pattern match** — If a signal's UUID appears in `di_pattern_matches.matching_conditions` (as evidence), extend to `active` regardless of age. The signal is part of active intelligence.\n\n2. **Signal referenced in a live hypothesis** — If a signal's UUID appears in `di_hypotheses.supporting_signal_ids` where `status IN ('forming', 'testable', 'provisional')`, extend to `active`.\n\n3. **Scratchpad observation promoted** — If a scratchpad row has `status = 'promoted_to_hypothesis'`, it stays `active` indefinitely (the hypothesis tracks its own lifecycle).\n\nWhen extending, write the reason to `extension_reason` in `di_lifecycle_state`.\n\n---\n\n## Execution Sequence\n\n### Step 1: Load framework\n\n```sql\nSELECT framework_id, content FROM di_frameworks\nWHERE framework_id = 'supabase-reading-guide' AND status = 'active';\n```\n\n### Step 2: Identify entities needing assessment\n\nQuery all tracked entities whose `last_lifecycle_run` is older than the current cadence:\n\n```sql\nSELECT id, entity_type, entity_id, freshness_status, freshness_window_days,\n       status_changed_at, extension_reason, last_lifecycle_run\nFROM di_lifecycle_state\nWHERE last_lifecycle_run < NOW() - INTERVAL '12 hours'\n   OR last_lifecycle_run IS NULL\nORDER BY status_changed_at ASC;\n```\n\n### Step 3: Check for new entities not yet tracked\n\nNew signals and classifications written by spotters since the last lifecycle run need initial `di_lifecycle_state` rows:\n\n```sql\n-- New raw signals not yet in lifecycle\nSELECT rs.id, rs.signal_type, rs.observed_at\nFROM di_raw_signals rs\nLEFT JOIN di_lifecycle_state ls ON ls.entity_id = rs.id AND ls.entity_type = 'signal'\nWHERE ls.id IS NULL;\n```\n\n```sql\n-- New hypotheses not yet in lifecycle\nSELECT h.id, h.status, h.formed_at\nFROM di_hypotheses h\nLEFT JOIN di_lifecycle_state ls ON ls.entity_id = h.id AND ls.entity_type = 'hypothesis'\nWHERE ls.id IS NULL;\n```\n\n```sql\n-- New signal classifications not yet in lifecycle\nSELECT sc.id, sc.classified_at\nFROM di_signal_classifications sc\nLEFT JOIN di_lifecycle_state ls ON ls.entity_id = sc.id AND ls.entity_type = 'classification'\nWHERE ls.id IS NULL;\n```\n\nFor each new classification, insert a `di_lifecycle_state` row with `entity_type = 'classification'`. To determine `freshness_window_days`, look up the parent signal's type:\n\n```sql\nSELECT rs.signal_type\nFROM di_signal_classifications sc\nJOIN di_raw_signals rs ON rs.id = sc.signal_id\nWHERE sc.id = '[classification_id]';\n```\n\nSet `freshness_window_days` based on the parent signal's type:\n- If `signal_type` IN (`stage_change`, `contact_added`, `deal_snapshot`, `deal_created`) → structural signal → use **90 days**\n- All other signal types → engagement signal → use **30 days**\n\n```sql\n-- New scratchpad observations not yet in lifecycle\nSELECT s.id, s.status, s.observed_at\nFROM di_scratchpad s\nLEFT JOIN di_lifecycle_state ls ON ls.entity_id = s.id AND ls.entity_type = 'scratchpad'\nWHERE ls.id IS NULL;\n```\n\nFor each new entity, insert a `di_lifecycle_state` row:\n\n```sql\nINSERT INTO di_lifecycle_state (id, entity_type, entity_id, freshness_status, freshness_window_days, status_changed_at, last_lifecycle_run)\nVALUES (gen_random_uuid(), '[entity_type]', '[entity_id]', 'active', [window_days], NOW(), NOW());\n```\n\nThe `freshness_window_days` is set based on entity type and signal type (30 for engagement signals, 90 for structural signals, 60 for hypotheses, 90 for scratchpad).\n\n### Step 4: Check extension eligibility\n\nBefore transitioning any entity, check if it qualifies for an extension under any of the three Extension Rules:\n\n**Extension Rule 1 — Signal in active hypothesis:**\n```sql\nSELECT DISTINCT unnest(supporting_signal_ids) AS signal_id\nFROM di_hypotheses\nWHERE status IN ('forming', 'testable', 'provisional');\n```\nAny signal UUID appearing in this result set earns an `active` extension. Its lifecycle state entry should be updated with `extension_reason = 'Referenced in live hypothesis [hypothesis_id]'`.\n\n**Extension Rule 2 — Signal in active pattern match:**\n\nPattern match evidence is stored in `matching_conditions` JSONB, not as a direct UUID column. Extension Rule 2 is enforced at the deal level, not the signal level: if a deal has an active `di_pattern_matches` row (`outcome = 'pending'`), then the `di_deal_state` version that was matched (`snapshot_id`) is actively referenced. Find the `classification_ids` from that deal state version and extend all those classifications:\n\n```sql\n-- Get classification_ids from deal state versions referenced by active matches\nSELECT ds.classification_ids\nFROM di_pattern_matches pm\nJOIN di_deal_state ds ON ds.id = pm.snapshot_id\nWHERE pm.outcome = 'pending';\n```\nUnnest each `classification_ids` array to get the individual classification UUIDs to extend. Update their lifecycle state entries with `extension_reason = 'Referenced in active pattern match [pattern_id] for deal [deal_id]'`.\n\n**Extension Rule 3 — Promoted scratchpad observation:**\n```sql\nSELECT id FROM di_scratchpad WHERE status = 'promoted_to_hypothesis';\n```\nAny scratchpad row with `status = 'promoted_to_hypothesis'` remains `active` indefinitely. Update its lifecycle state entry with `extension_reason = 'Promoted to hypothesis — tracking follows hypothesis lifecycle'` and do NOT transition it further.\n\n### Step 5: Execute transitions\n\nFor each entity that exceeds its window and has no extension:\n\n```sql\nUPDATE di_lifecycle_state\nSET freshness_status = '[new_status]',\n    status_changed_at = NOW(),\n    last_lifecycle_run = NOW(),\n    extension_reason = NULL\nWHERE id = '[lifecycle_state_id]';\n```\n\nFor entities that qualify for extension:\n\n```sql\nUPDATE di_lifecycle_state\nSET freshness_status = 'active',\n    status_changed_at = NOW(),\n    last_lifecycle_run = NOW(),\n    extension_reason = '[reason — e.g., \"Referenced in hypothesis abc123 (provisional)\"]'\nWHERE id = '[lifecycle_state_id]';\n```\n\nFor entities with no status change:\n\n```sql\nUPDATE di_lifecycle_state\nSET last_lifecycle_run = NOW()\nWHERE id = '[lifecycle_state_id]';\n```\n\n### Step 6: Hypothesis-specific decay\n\nProvisional hypotheses have confidence decay:\n\n```sql\nSELECT id, hypothesis_text, confidence, last_reinforced_at, status\nFROM di_hypotheses\nWHERE status = 'provisional'\nAND last_reinforced_at < NOW() - INTERVAL '60 days';\n```\n\nFor unreinforced provisional hypotheses:\n\n- 60+ days unreinforced: reduce confidence by 0.1 (minimum 0.3)\n- 90+ days unreinforced: transition status to `decayed`\n\n```sql\nUPDATE di_hypotheses\nSET confidence = GREATEST(confidence - 0.1, 0.3)\nWHERE id = '[hypothesis_id]'\nAND last_reinforced_at < NOW() - INTERVAL '60 days'\nAND status = 'provisional';\n```\n\n```sql\nUPDATE di_hypotheses\nSET status = 'decayed'\nWHERE id = '[hypothesis_id]'\nAND last_reinforced_at < NOW() - INTERVAL '90 days'\nAND status = 'provisional';\n```\n\n### Step 7: Write traceability log\n\n```sql\nINSERT INTO di_traceability_log (id, entity_type, entity_id, action, reasoning, frameworks_consulted, input_data, output_data, logged_at, logged_by)\nVALUES (\n  gen_random_uuid(),\n  'lifecycle',\n  gen_random_uuid(),\n  'lifecycle_assessed',\n  '[Summary: N entities assessed, X transitioned, Y extended, Z new entities tracked, W hypotheses decayed]',\n  ARRAY['supabase-reading-guide'],\n  '{\"entities_assessed\": N, \"new_entities\": M}'::jsonb,\n  '{\"transitions\": {\"active_to_aging\": A, \"aging_to_stale\": B, \"stale_to_archived\": C}, \"extensions\": E, \"hypothesis_decays\": D}'::jsonb,\n  NOW(),\n  'lifecycle'\n);\n```\n\n---\n\n## Output Format\n\nAfter completing the run, report:\n\n**Lifecycle Run Summary**\n\n1. **Entities assessed:** total count\n2. **New entities tracked:** count by type (signals, hypotheses, scratchpad)\n3. **Transitions executed:**\n   - Active → Aging: count\n   - Aging → Stale: count\n   - Stale → Archived: count\n4. **Extensions granted:** count, with reasons\n5. **Hypothesis decay:** count of confidence reductions, count of status transitions to `decayed`\n6. **Data quality notes:** any anomalies (e.g., entities in lifecycle_state that no longer exist in source tables)\n\n---\n\n## Graceful Degradation\n\n- If `di_lifecycle_state` is empty (first run): create initial rows for all entities in `di_raw_signals`, `di_signal_classifications`, `di_hypotheses`, and `di_scratchpad`. Run Step 3's four queries, insert lifecycle state rows for all returned entities, and report \"First lifecycle run — initialised N entities (M signals, C classifications, H hypotheses, S scratchpad observations).\"\n- If `di_pattern_matches` is empty: no extensions to check. Skip Step 4's pattern match query.\n- If `di_hypotheses` is empty: no hypothesis decay to process. Skip Step 6.\n- If `di_scratchpad` is empty: no scratchpad entities to track. Skip scratchpad queries.","tags":["lifecycle","deal","intelligence","violetfleming47","agent-skills","agentic-ai","agentic-workflow","ai-agents","ai-agents-framework","b2b-sales-automation","crm","revops"],"capabilities":["skill","source-violetfleming47","skill-lifecycle","topic-agent-skills","topic-agentic-ai","topic-agentic-workflow","topic-ai-agents","topic-ai-agents-framework","topic-b2b-sales-automation","topic-crm","topic-intelligence","topic-revops","topic-revops-automation","topic-sales-analysis","topic-sales-ops"],"categories":["deal-intelligence"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/violetfleming47/deal-intelligence/lifecycle","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add violetfleming47/deal-intelligence","source_repo":"https://github.com/violetfleming47/deal-intelligence","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (13,066 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:06:27.240Z","embedding":null,"createdAt":"2026-05-14T07:05:44.035Z","updatedAt":"2026-05-18T19:06:27.240Z","lastSeenAt":"2026-05-18T19:06:27.240Z","tsv":"'0.1':1534,1552 '0.3':1536,1553 '1':508,619,714,1149,1687 '12':785 '120':424,430 '180':407,431 '2':336,520,650,736,1203,1226,1692 '3':528,676,800,1343,1702,1781 '30':397,1015,1110 '365':408 '4':1125,1714,1822 '5':1391,1720 '6':1490,1733,1839 '60':398,421,1118,1522,1528,1564 '7':1592 '90':399,406,423,429,1006,1114,1121,1537,1586 'abc123':1461 'action':1607 'activ':27,313,374,501,558,613,639,648,675,691,734,1092,1152,1183,1206,1242,1261,1287,1332,1367,1445,1657,1705 'ad':438,468,998 'adapt':42 'age':28,378,385,502,569,573,579,642,1659,1661,1706,1708 'agent':150,163,180 'analys':211 'analyt':22 'anomali':1738 'answer':188 'anyth':21 'api':93 'appear':631,662,1176 'appli':523 'archiv':30,389,504,597,601,1667,1712 'array':1313,1644 'asc':798 'assembl':19 'assess':284,740,1628,1632,1650,1689 'b':1664 'base':984,1103 'boundari':186 'c':1668,1803 'cadenc':14,165,472,754 'call':94,469 'chang':95,260,436,550,553,563,578,594,768,796,996,1079,1416,1447,1473 'check':801,1126,1133,1819 'classif':410,413,486,497,811,900,912,927,935,945,965,978,1265,1276,1279,1311,1318,1773,1804 'classifi':227 'clean':183 'column':327,1223 'compani':152 'complet':1680 'condit':634,1216 'confid':247,1498,1505,1532,1549,1551,1725 'connect':345 'consult':1610 'contact':437,997 'content':300,721 'core':135 'count':1691,1696,1707,1710,1713,1717,1723,1727 'creat':442,1002,1761 'crm':47,59,218 'crm-specif':46 'current':184,518,753 'd':1673 'data':185,258,292,318,1612,1614,1734 'databas':347,350,355 'day':371,384,387,390,547,560,566,575,582,591,598,766,950,983,1007,1016,1077,1094,1100,1523,1529,1538,1565,1587 'deal':8,155,212,236,439,441,452,999,1001,1231,1239,1252,1269,1282,1299,1338,1339 'decay':4,40,139,248,444,480,1494,1499,1543,1575,1643,1672,1722,1732,1834 'defin':365 'degrad':1752 'delet':257,267 'deploy':56 'detect':132 'determin':947 'di':101,104,225,235,242,245,254,302,394,403,411,419,427,530,544,708,723,776,822,841,847,876,881,910,916,938,963,968,1031,1036,1058,1065,1165,1243,1251,1293,1298,1351,1407,1439,1476,1511,1546,1571,1599,1754,1768,1771,1774,1777,1811,1828,1841 'di_hypotheses.supporting':664 'di_pattern_matches.matching':633 'direct':1221 'distinct':1156 'downstream':179 'ds':1301 'ds.classification':1290 'ds.id':1303 'e':1670 'e.g':1457,1739 'earn':605,1181 'elig':1128 'els':460 'email':463,465 'empti':1758,1815,1831,1844 'enforc':1228 'engag':393,454,456,1012,1112 'entiti':24,37,140,177,198,204,280,361,379,510,542,604,738,744,758,760,804,943,1055,1069,1071,1088,1090,1105,1132,1396,1432,1469,1603,1605,1631,1639,1649,1653,1688,1694,1740,1766,1792,1800,1847 'entri':1188,1326,1373 'ever':266 'everi':13,164,175,197 'everyth':459 'evid':636,1211 'exceed':512,1398 'execut':356,711,1392,1704 'exist':1747 'extend':31,274,637,673,700,1273,1321,1636 'extens':522,525,602,607,705,770,1127,1139,1145,1147,1184,1193,1201,1224,1328,1341,1375,1404,1423,1436,1454,1669,1715,1817 'fact':449 'fade':485 'faster':481 'field':68,90,330 'find':1263 'first':12,1759,1795 'follow':339,414,498,1381 'form':670,1170 'format':1678 'four':1783 'framework':287,298,303,305,314,716,719,724,726,1609 'fresh':2,25,32,39,138,172,194,215,232,261,275,358,366,382,487,556,564,571,587,606,762,764,948,981,1073,1075,1098,1411,1443 'full':128 'gen':1085,1620,1624 'get':1278,1315 'grace':1751 'grant':1716 'greatest':1550 'guid':294,310,320,731,1648 'guides/data-mapping-guide.md':65 'h':878,1805 'h.formed':873 'h.id':871,888 'h.status':872 'hardcod':77 'held':462 'hour':786 'hypothes':102,246,420,618,865,877,1120,1166,1496,1512,1527,1547,1572,1642,1700,1775,1806,1829 'hypothesi':417,656,688,694,892,1153,1198,1199,1357,1365,1379,1382,1460,1492,1503,1556,1578,1671,1721,1833 'hypothesis-specif':1491 'id':72,299,306,349,666,720,727,757,761,853,887,922,975,979,1042,1068,1072,1091,1160,1163,1200,1259,1266,1280,1291,1305,1312,1336,1340,1349,1427,1430,1464,1467,1485,1488,1502,1555,1557,1577,1579,1602,1606 'identifi':737 'includ':111 'indefinit':692,1368 'individu':1317 'initi':821,1762 'initialis':1798 'input':1611 'insert':936,1056,1063,1597,1785 'intellig':9,156,649 'interpret':271 'interv':784,1521,1563,1585 'job':167 'join':846,880,915,967,1035,1297 'jsonb':329,1217,1655,1674 'last':746,772,780,788,817,1081,1419,1450,1480,1506,1517,1559,1581 'layer':133 'left':845,879,914,1034 'level':1232,1236 'lifecycl':1,38,136,149,243,531,545,698,709,747,773,777,781,789,818,823,833,848,869,882,904,917,939,1024,1037,1059,1066,1082,1186,1324,1371,1383,1408,1420,1428,1440,1451,1465,1477,1481,1486,1623,1627,1676,1684,1742,1755,1786,1796 'live':617,655,1197 'load':288,289,715 'log':256,470,1595,1601,1615,1617 'logic':83,539 'longer':1746 'look':951 'ls':850,884,919,1039 'ls.entity':852,856,886,890,921,925,1041,1045 'ls.id':860,894,929,1049 'm':1654,1801 'maintain':170 'manag':5,23,41,137,214 'map':66 'marker':54 'match':36,106,279,615,625,1208,1210,1215,1245,1257,1288,1295,1334,1813,1825 'meet':461 'metadata':216 'minimum':1535 'moment':455 'month':471 'n':1630,1651,1799 'name':69,91,153,323,326,328,351 'need':205,739,820 'new':803,808,827,864,898,934,1018,1054,1413,1638,1652,1693 'note':97,467,1736 'noth':264 'null':792,862,896,931,1051,1425 'number':369 'observ':426,678,1020,1346,1809 'older':750 'one':189 'oper':342 'order':793 'outcom':1247 'output':1613,1677 'parent':415,490,954,987 'part':125,646 'pattern':35,105,131,272,278,286,614,624,1207,1209,1244,1294,1333,1335,1812,1824 'pattern-match':34,277 'pend':1248,1308 'pipelin':10,157,201,270 'placehold':53,75 'pm':1296 'pm.outcome':1307 'pm.snapshot':1304 'process':1836 'project':346,348 'promot':679,686,1344,1355,1363,1377 'provid':62,221,476 'provision':418,672,1172,1462,1495,1515,1526,1568,1590 'pull':57 'qualifi':1136,1434 'qualiti':1735 'queri':120,353,741,1784,1826,1852 'question':190 'random':1086,1621,1625 'raw':391,395,400,404,828,842,969,1769 'read':217,223,293,309,319,337,730,1647 'reason':703,706,771,1194,1329,1376,1424,1455,1456,1608,1719 'receiv':466 'reduc':1531 'reduct':1726 'refer':100 'referenc':611,621,652,1195,1262,1285,1330,1458 'regardless':640 'reinforc':1507,1518,1560,1582 'relev':484 'remain':373,1366 'report':1683,1794 'repres':448 'requir':507 'result':1179 'return':1791 'row':533,683,825,941,1061,1246,1360,1763,1788 'rs':844,971 'rs.id':835,854,973 'rs.observed':838 'rs.signal':836,960 'rule':338,343,526,603,1146,1148,1202,1225,1342 'run':11,159,748,774,782,790,819,1083,1421,1452,1482,1682,1685,1760,1779,1797 's.id':1026,1043 's.observed':1028 's.status':1027 'sc':913,966 'sc.classified':907 'sc.id':906,923,977 'sc.signal':974 'scd':334 'schema':63,115 'scratchpad':425,428,677,682,1019,1032,1047,1123,1345,1352,1359,1701,1778,1808,1842,1846,1851 'see':64,524 'select':297,718,756,834,870,905,959,1025,1155,1289,1348,1501 'sent':464 'sequenc':712 'set':980,1102,1180,1410,1442,1479,1548,1573 'signal':228,392,396,401,405,409,412,416,433,457,477,491,494,620,628,644,651,659,665,809,829,843,858,899,911,955,964,970,988,992,1004,1010,1013,1108,1113,1117,1150,1159,1162,1174,1204,1235,1699,1770,1772,1802 'sinc':548,561,576,592,815 'skill':44,81,99 'skill-lifecycle' 'skip':116,1820,1837,1850 'slower':445 'snapshot':440,1000,1258 'sourc':1749 'source-violetfleming47' 'specif':48,1493 'spotter':16,814 'sql':296,357,717,755,826,863,897,958,1017,1062,1154,1277,1347,1405,1437,1474,1500,1544,1569,1596 'srg':316 'stage':71,435,995 'stale':29,386,388,503,581,585,589,595,1663,1665,1709,1711 'starter':96,114 'state':173,237,244,532,546,710,778,824,849,883,918,940,1038,1060,1067,1187,1253,1270,1283,1300,1325,1372,1409,1429,1441,1466,1478,1487,1743,1756,1787 'status':141,195,206,250,262,312,332,499,519,549,552,557,562,572,577,588,593,668,685,733,763,767,795,1074,1078,1168,1354,1362,1412,1414,1415,1444,1446,1472,1509,1514,1541,1567,1574,1589,1729 'stay':690 'step':118,713,735,799,1124,1390,1489,1591,1780,1821,1838 'store':1213 'structur':85,331,402,432,1003,1116 'summari':1629,1686 'supabas':291,308,317,344,729,1646 'supabase-reading-guid':307,728,1645 'support':1158 'system':129 'tabl':107,122,226,325,381,1750 'testabl':671,1171 'text':1504 'three':1144 'time':514 'topic-agent-skills' 'topic-agentic-ai' 'topic-agentic-workflow' 'topic-ai-agents' 'topic-ai-agents-framework' 'topic-b2b-sales-automation' 'topic-crm' 'topic-intelligence' 'topic-revops' 'topic-revops-automation' 'topic-sales-analysis' 'topic-sales-ops' 'total':1690 'traceabl':255,1594,1600 'track':176,230,488,695,743,807,1380,1640,1695,1849 'transcript':61,220,475 'transit':26,142,207,251,376,495,500,506,538,567,583,599,1130,1387,1393,1540,1634,1656,1703,1730 'type':335,362,380,478,759,837,857,891,926,944,957,961,990,993,1011,1046,1070,1089,1106,1109,1604,1698 'univers':87 'unnest':1157,1309 'unreinforc':422,1525,1530,1539 'updat':537,1191,1322,1369,1406,1438,1475,1545,1570 'use':315,321,1005,1014 'uuid':630,661,1087,1175,1222,1319,1622,1626 'valu':49,263,333,1084,1619 'version':1254,1271,1284 'via':354 'w':1641 'whose':745 'window':359,367,383,515,565,765,949,982,1076,1093,1099,1400 'without':144 'work':143,181 'wrap':51 'write':233,239,701,1593 'written':535,812 'x':1633 'y':1635 'yet':806,831,867,902,1022 'z':1637","prices":[{"id":"64888c7c-f2ac-4129-9103-5c040e69b52d","listingId":"1b32fc21-70d5-476d-85cd-2f6a02e4f941","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"violetfleming47","category":"deal-intelligence","install_from":"skills.sh"},"createdAt":"2026-05-14T07:05:44.035Z"}],"sources":[{"listingId":"1b32fc21-70d5-476d-85cd-2f6a02e4f941","source":"github","sourceId":"violetfleming47/deal-intelligence/lifecycle","sourceUrl":"https://github.com/violetfleming47/deal-intelligence/tree/main/skills/lifecycle","isPrimary":false,"firstSeenAt":"2026-05-14T07:05:44.035Z","lastSeenAt":"2026-05-18T19:06:27.240Z"}],"details":{"listingId":"1b32fc21-70d5-476d-85cd-2f6a02e4f941","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"violetfleming47","slug":"lifecycle","github":{"repo":"violetfleming47/deal-intelligence","stars":15,"topics":["agent-skills","agentic-ai","agentic-workflow","ai-agents","ai-agents-framework","b2b-sales-automation","crm","intelligence","revops","revops-automation","sales-analysis","sales-ops"],"license":"mit","html_url":"https://github.com/violetfleming47/deal-intelligence","pushed_at":"2026-05-10T19:50:43Z","description":"Turn CRM and transcript data into structured, versioned deal intelligence. 6 agents, 3 frameworks, harness-agnostic. Works with any CRM, any transcript provider, any LLM.","skill_md_sha":"469a848ddd7060118494710929b8803b281fc740","skill_md_path":"skills/lifecycle/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/violetfleming47/deal-intelligence/tree/main/skills/lifecycle"},"layout":"multi","source":"github","category":"deal-intelligence","frontmatter":{"name":"lifecycle","description":"Freshness and decay management for the Deal Intelligence pipeline. Runs FIRST every cadence — before spotters, before the assembler, before anything analytical. Manages entity freshness transitions (active → aging → stale → archived), extends freshness for pattern-matched entities, and cleans the data layer so downstream agents work with current data. Triggered automatically before every pipeline run, or manually via 'run lifecycle', 'clean the data layer', 'check freshness'."},"skills_sh_url":"https://skills.sh/violetfleming47/deal-intelligence/lifecycle"},"updatedAt":"2026-05-18T19:06:27.240Z"}}