{"artifact":{"id":"field-time-series-molecular-biology","artifact_type":"dashboard","entity_ids":"[\"field-time-series-molecular-biology\"]","title":"Field Trends: Molecular Biology","quality_score":0.8,"created_by":"agent","provenance_chain":"[]","content_hash":"babd8a192005b9e4043c67e9d1ae909afe42af58c984341431ab6deb189b6307","metadata":{"_origin":{"url":null,"type":"internal","tracked_at":"2026-04-27T17:31:32.873529"},"data_sources":[{"key":"elo_distribution","query":"\nWITH monthly AS (\n    SELECT\n        date_trunc('month', ph.created_at) AS month,\n        ph.score\n    FROM price_history ph\n    JOIN hypotheses h ON ph.hypothesis_id = h.id\n    WHERE ph.created_at >= :since::timestamptz\n      AND ph.item_type = 'hypothesis'\n      AND COALESCE(h.disease, '') ILIKE '%' || :field_slug || '%'\n),\nbuckets AS (\n    SELECT\n        month,\n        percentile_cont(0.1) WITHIN GROUP (ORDER BY score)::numeric(6,3) AS p10,\n        percentile_cont(0.5) WITHIN GROUP (ORDER BY score)::numeric(6,3) AS p50,\n        percentile_cont(0.9) WITHIN GROUP (ORDER BY score)::numeric(6,3) AS p90,\n        COUNT(*) AS sample_count\n    FROM monthly\n    GROUP BY month\n)\nSELECT\n    to_char(month, 'YYYY-MM') AS month,\n    p10, p50, p90, sample_count\nFROM buckets\nORDER BY month\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}},{"key":"citation_accumulation","query":"\nSELECT\n    to_char(date_trunc('month', hp.created_at), 'YYYY-MM') AS month,\n    COUNT(*) AS paper_count\nFROM hypothesis_papers hp\nJOIN hypotheses h ON hp.hypothesis_id = h.id\nWHERE hp.created_at >= :since::timestamptz\n  AND COALESCE(h.disease, '') ILIKE '%' || :field_slug || '%'\nGROUP BY date_trunc('month', hp.created_at)\nORDER BY month\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}},{"key":"market_liquidity","query":"\nSELECT\n    to_char(date_trunc('month', m.created_at), 'YYYY-MM') AS month,\n    SUM(m.liquidity)::numeric(12,2) AS total_liquidity,\n    COUNT(*) AS market_count\nFROM markets m\nJOIN hypotheses h ON m.entity_id = h.id\nWHERE m.created_at >= :since::timestamptz\n  AND m.market_type = 'hypothesis'\n  AND COALESCE(h.disease, '') ILIKE '%' || :field_slug || '%'\nGROUP BY date_trunc('month', m.created_at)\nORDER BY month\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}},{"key":"hypothesis_count_growth","query":"\nWITH monthly_new AS (\n    SELECT\n        date_trunc('month', created_at) AS month,\n        COUNT(*) AS new_count\n    FROM hypotheses\n    WHERE created_at >= :since::timestamptz\n      AND COALESCE(disease, '') ILIKE '%' || :field_slug || '%'\n    GROUP BY date_trunc('month', created_at)\n)\nSELECT\n    to_char(month, 'YYYY-MM') AS month,\n    new_count,\n    SUM(new_count) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_count\nFROM monthly_new\nORDER BY month\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}},{"key":"top_movers_per_quarter","query":"\nWITH quarterly AS (\n    SELECT\n        h.id,\n        h.title,\n        to_char(date_trunc('quarter', ph.created_at), 'YYYY-\"Q\"Q') AS quarter,\n        MAX(ph.score) - MIN(ph.score) AS elo_delta,\n        AVG(ph.score)::numeric(6,3) AS avg_score\n    FROM price_history ph\n    JOIN hypotheses h ON ph.hypothesis_id = h.id\n    WHERE ph.created_at >= :since::timestamptz\n      AND ph.item_type = 'hypothesis'\n      AND COALESCE(h.disease, '') ILIKE '%' || :field_slug || '%'\n    GROUP BY h.id, h.title, date_trunc('quarter', ph.created_at)\n    HAVING COUNT(*) >= 2\n),\nranked AS (\n    SELECT\n        quarter,\n        id,\n        title,\n        elo_delta::numeric(6,3) AS elo_delta,\n        avg_score,\n        ROW_NUMBER() OVER (PARTITION BY quarter ORDER BY elo_delta DESC) AS rank\n    FROM quarterly\n)\nSELECT quarter, id, title, elo_delta, avg_score\nFROM ranked\nWHERE rank <= 5\nORDER BY quarter DESC, rank\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}}],"document_type":"dashboard","rendered_html":"\n<style>\n.fts-wrap{max-width:1280px;margin:0 auto}\n.fts-controls{display:flex;gap:8px;align-items:center;margin-bottom:20px;flex-wrap:wrap}\n.fts-range-btn{background:rgba(110,198,255,0.08);border:1px solid rgba(110,198,255,0.2);color:#6ec6ff;\n  padding:4px 12px;border-radius:6px;cursor:pointer;font-size:0.8rem;transition:all .15s;font-family:inherit}\n.fts-range-btn.active{background:rgba(110,198,255,0.25);border-color:rgba(110,198,255,0.5);color:#c9e8ff}\n.fts-range-btn:hover{background:rgba(110,198,255,0.18)}\n.fts-chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-bottom:24px}\n.fts-chart-card{background:#0f172a;border:1px solid rgba(255,255,255,0.06);border-radius:12px;padding:16px 14px;cursor:pointer}\n.fts-chart-card:hover{border-color:rgba(110,198,255,0.25)}\n.fts-chart-card h3{color:#f2cc60;font-size:0.82rem;text-transform:uppercase;letter-spacing:.05em;margin:0 0 12px}\n.fts-chart-svg{width:100%;overflow:visible}\n.fts-legend{display:flex;gap:12px;font-size:0.72rem;margin-top:6px;color:#8b949e}\n.fts-legend-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:3px;vertical-align:middle}\n.fts-movers-wrap{margin-top:4px}\n.fts-movers-wrap h2{color:#f2cc60;font-size:0.95rem;text-transform:uppercase;letter-spacing:.04em;margin:0 0 14px}\n.fts-quarter-group{margin-bottom:20px}\n.fts-quarter-label{color:#8b949e;font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}\n.fts-movers-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px}\n.fts-mover-card{background:#111827;border:1px solid rgba(255,255,255,0.05);border-radius:8px;padding:10px 12px}\n.fts-mover-title{color:#d0d7de;font-size:0.82rem;font-weight:600;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.fts-elo-delta{font-size:0.75rem;font-weight:700;padding:2px 7px;border-radius:4px;display:inline-block}\n.fts-elo-up{background:rgba(126,231,135,0.15);color:#7ee787}\n.fts-elo-down{background:rgba(239,83,80,0.12);color:#ef5350}\n.fts-elo-flat{background:rgba(255,255,255,0.06);color:#8b949e}\n.fts-no-data{color:#484f58;font-size:0.82rem;padding:20px 0;text-align:center;font-style:italic}\n</style>\n<div class=\"fts-wrap\">\n  <div class=\"fts-controls\" id=\"fts-controls\">\n    <span style=\"color:#8b949e;font-size:0.8rem;margin-right:4px\">Range:</span>\n    <button class=\"fts-range-btn\" onclick=\"ftsSetRange(90,this)\">90d</button>\n    <button class=\"fts-range-btn\" onclick=\"ftsSetRange(180,this)\">180d</button>\n    <button class=\"fts-range-btn active\" onclick=\"ftsSetRange(365,this)\">365d</button>\n    <button class=\"fts-range-btn\" onclick=\"ftsSetRange(0,this)\">All time</button>\n  </div>\n  <div class=\"fts-chart-grid\">\n    <div class=\"fts-chart-card\">\n      <h3>Score Distribution (p10 / p50 / p90)</h3>\n      <svg id=\"fts-elo-svg\" class=\"fts-chart-svg\" height=\"120\" viewBox=\"0 0 400 120\" preserveAspectRatio=\"none\"></svg>\n      <div class=\"fts-legend\" id=\"fts-elo-legend\">\n        <span><span class=\"fts-legend-dot\" style=\"background:rgba(110,198,255,0.6)\"></span>p10</span>\n        <span><span class=\"fts-legend-dot\" style=\"background:#7ee787\"></span>p50</span>\n        <span><span class=\"fts-legend-dot\" style=\"background:rgba(242,204,96,0.8)\"></span>p90</span>\n      </div>\n    </div>\n    <div class=\"fts-chart-card\">\n      <h3>Citation Accumulation</h3>\n      <svg id=\"fts-cit-svg\" class=\"fts-chart-svg\" height=\"120\" viewBox=\"0 0 400 120\" preserveAspectRatio=\"none\"></svg>\n    </div>\n    <div class=\"fts-chart-card\">\n      <h3>Market Liquidity</h3>\n      <svg id=\"fts-liq-svg\" class=\"fts-chart-svg\" height=\"120\" viewBox=\"0 0 400 120\" preserveAspectRatio=\"none\"></svg>\n    </div>\n    <div class=\"fts-chart-card\">\n      <h3>Hypothesis Count Growth</h3>\n      <svg id=\"fts-hyp-svg\" class=\"fts-chart-svg\" height=\"120\" viewBox=\"0 0 400 120\" preserveAspectRatio=\"none\"></svg>\n    </div>\n  </div>\n  <div class=\"fts-movers-wrap\">\n    <h2>Top Movers per Quarter</h2>\n    <div id=\"fts-movers-container\"></div>\n  </div>\n</div>\n<script>\n(function(){\nvar ELO_DATA  = [];\nvar CIT_DATA  = [];\nvar LIQ_DATA  = [];\nvar HYP_DATA  = [];\nvar MOV_DATA  = [];\n\n/* ── helpers ── */\nfunction fv(arr, k){ return (arr||[]).map(function(r){ return parseFloat(r[k])||0; }); }\nfunction fl(arr, k){ return (arr||[]).map(function(r){ return String(r[k]||''); }); }\nfunction maxv(){ var a=[]; for(var i=0;i<arguments.length;i++) a=a.concat(arguments[i]); return Math.max.apply(null,a)||1; }\nfunction minv(){ var a=[]; for(var i=0;i<arguments.length;i++) a=a.concat(arguments[i]); return Math.min.apply(null,a)||0; }\n\n/* ── SVG bar chart ── */\nfunction barChart(svgId, arr, valKey, color){\n  var svg = document.getElementById(svgId);\n  if(!svg) return;\n  if(!arr||!arr.length){\n    svg.innerHTML='<text x=\"200\" y=\"64\" fill=\"#484f58\" font-size=\"13\" text-anchor=\"middle\">No data for this range</text>';\n    return;\n  }\n  var W=400,H=120,padX=30,padB=20;\n  var n=arr.length;\n  var vs=fv(arr,valKey);\n  var mx=maxv.apply(null,vs);\n  var bw=Math.max(2,Math.floor((W-padX*2)/n)-3);\n  var parts=['<g>'];\n  vs.forEach(function(v,i){\n    var x=(padX+i*(W-padX*2)/n).toFixed(1);\n    var bh=Math.max(1,Math.round((v/mx)*(H-padB)));\n    var y=(H-padB-bh).toFixed(1);\n    parts.push('<rect x=\"'+x+'\" y=\"'+y+'\" width=\"'+bw+'\" height=\"'+bh+'\" fill=\"'+color+'\" rx=\"2\" opacity=\"0.82\"/>');\n    parts.push('<title>'+fl(arr,'month')[i]+': '+v+'</title>');\n  });\n  var labs=fl(arr,'month');\n  if(labs.length){\n    parts.push('<text x=\"'+padX+'\" y=\"'+(H-5)+'\" fill=\"#484f58\" font-size=\"9\">'+labs[0]+'</text>');\n    if(labs.length>1) parts.push('<text x=\"'+(W-padX)+'\" y=\"'+(H-5)+'\" fill=\"#484f58\" font-size=\"9\" text-anchor=\"end\">'+labs[labs.length-1]+'</text>');\n  }\n  parts.push('</g>');\n  svg.innerHTML=parts.join('');\n}\n\n/* ── SVG multi-line chart ── */\nfunction lineChart(svgId, arr, seriesDefs){\n  var svg = document.getElementById(svgId);\n  if(!svg) return;\n  if(!arr||!arr.length){\n    svg.innerHTML='<text x=\"200\" y=\"64\" fill=\"#484f58\" font-size=\"13\" text-anchor=\"middle\">No data for this range</text>';\n    return;\n  }\n  var W=400,H=120,padX=30,padY=10,padB=20;\n  var n=arr.length;\n  var allVals=[];\n  seriesDefs.forEach(function(s){ allVals=allVals.concat(fv(arr,s.key)); });\n  var mx=maxv.apply(null,allVals);\n  var mn=minv.apply(null,allVals);\n  var rng=mx-mn||1;\n  function px(i){ return (padX+i*(W-padX*2)/Math.max(n-1,1)).toFixed(1); }\n  function py(v){ return (H-padB-((v-mn)/rng)*(H-padY-padB)).toFixed(1); }\n  var parts=['<g>'];\n  seriesDefs.forEach(function(s){\n    var vs=fv(arr,s.key);\n    var pts=vs.map(function(v,i){ return px(i)+','+py(v); }).join(' ');\n    if(n===1){\n      parts.push('<circle cx=\"'+px(0)+'\" cy=\"'+py(vs[0])+'\" r=\"3\" fill=\"'+s.color+'\" opacity=\"0.9\"/>');\n    } else {\n      parts.push('<polyline points=\"'+pts+'\" fill=\"none\" stroke=\"'+s.color+'\" stroke-width=\"2\" opacity=\"0.9\"/>');\n    }\n  });\n  var labs=fl(arr,'month');\n  if(labs.length){\n    parts.push('<text x=\"'+padX+'\" y=\"'+(H-5)+'\" fill=\"#484f58\" font-size=\"9\">'+labs[0]+'</text>');\n    if(labs.length>1) parts.push('<text x=\"'+(W-padX)+'\" y=\"'+(H-5)+'\" fill=\"#484f58\" font-size=\"9\" text-anchor=\"end\">'+labs[labs.length-1]+'</text>');\n  }\n  parts.push('</g>');\n  svg.innerHTML=parts.join('');\n}\n\n/* ── render charts ── */\nlineChart('fts-elo-svg', ELO_DATA, [\n  {key:'p10', color:'rgba(110,198,255,0.6)'},\n  {key:'p50', color:'#7ee787'},\n  {key:'p90', color:'rgba(242,204,96,0.8)'}\n]);\nbarChart('fts-cit-svg', CIT_DATA, 'paper_count', 'rgba(110,198,255,0.65)');\nbarChart('fts-liq-svg', LIQ_DATA, 'total_liquidity', 'rgba(126,231,135,0.65)');\nlineChart('fts-hyp-svg', HYP_DATA, [{key:'cumulative_count', color:'#7ee787'}]);\n\n/* ── top movers by quarter ── */\nvar moversEl=document.getElementById('fts-movers-container');\nif(!MOV_DATA||!MOV_DATA.length){\n  moversEl.innerHTML='<div class=\"fts-no-data\">No quarterly mover data in this range.</div>';\n} else {\n  var quarters={};\n  MOV_DATA.forEach(function(m){ var q=m.quarter; if(!quarters[q]) quarters[q]=[]; quarters[q].push(m); });\n  var qkeys=Object.keys(quarters).sort().reverse().slice(0,4);\n  qkeys.forEach(function(q){\n    var grp=quarters[q];\n    var gDiv=document.createElement('div');\n    gDiv.className='fts-quarter-group';\n    var lbl=document.createElement('div');\n    lbl.className='fts-quarter-label';\n    lbl.textContent=q;\n    gDiv.appendChild(lbl);\n    var grid=document.createElement('div');\n    grid.className='fts-movers-grid';\n    grp.slice(0,5).forEach(function(m){\n      var delta=parseFloat(m.elo_delta)||0;\n      var cls=delta>0.001?'fts-elo-up':(delta<-0.001?'fts-elo-down':'fts-elo-flat');\n      var dLabel=(delta>=0?'+':'')+delta.toFixed(3);\n      var title=(m.title||'unknown');\n      var safeTitle=title.length>55?title.substring(0,55)+'…':title;\n      var card=document.createElement('div');\n      card.className='fts-mover-card';\n      card.innerHTML='<div class=\"fts-mover-title\" title=\"'+title.replace(/&/g,'&amp;').replace(/\"/g,'&quot;')+'\">'+safeTitle+'</div>'\n        +'<span class=\"fts-elo-delta '+cls+'\">'+dLabel+'</span>';\n      grid.appendChild(card);\n    });\n    gDiv.appendChild(grid);\n    moversEl.appendChild(gDiv);\n  });\n}\n\n/* ── time range selector ── */\nwindow.ftsSetRange=function(days, btn){\n  var btns=document.querySelectorAll('.fts-range-btn');\n  btns.forEach(function(b){ b.classList.remove('active'); });\n  if(btn) btn.classList.add('active');\n  var d=new Date();\n  var sinceStr;\n  if(days===0){\n    sinceStr='2020-01-01';\n  } else {\n    d.setDate(d.getDate()-days);\n    sinceStr=d.toISOString().slice(0,10);\n  }\n  if(typeof DASHBOARD_PARAMS!=='undefined'&&typeof refreshDashboard==='function'){\n    DASHBOARD_PARAMS['since']=sinceStr;\n    refreshDashboard();\n  }\n};\n})();\n</script>","template_html":"","view_spec_json":{"rank":{},"render":{"source":"elo_distribution","template":"field_time_series"},"filters":[],"data_sources":[{"name":"elo_distribution","query":"\nWITH monthly AS (\n    SELECT\n        date_trunc('month', ph.created_at) AS month,\n        ph.score\n    FROM price_history ph\n    JOIN hypotheses h ON ph.hypothesis_id = h.id\n    WHERE ph.created_at >= :since::timestamptz\n      AND ph.item_type = 'hypothesis'\n      AND COALESCE(h.disease, '') ILIKE '%' || :field_slug || '%'\n),\nbuckets AS (\n    SELECT\n        month,\n        ROUND(percentile_cont(0.1) WITHIN GROUP (ORDER BY score)::numeric, 4) AS p10,\n        ROUND(percentile_cont(0.5) WITHIN GROUP (ORDER BY score)::numeric, 4) AS p50,\n        ROUND(percentile_cont(0.9) WITHIN GROUP (ORDER BY score)::numeric, 4) AS p90,\n        COUNT(*) AS sample_count\n    FROM monthly\n    GROUP BY month\n)\nSELECT\n    to_char(month, 'YYYY-MM') AS month,\n    p10, p50, p90, sample_count\nFROM buckets\nORDER BY month\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}},{"name":"citation_accumulation","query":"\nSELECT\n    to_char(date_trunc('month', hp.created_at), 'YYYY-MM') AS month,\n    COUNT(*) AS paper_count\nFROM hypothesis_papers hp\nJOIN hypotheses h ON hp.hypothesis_id = h.id\nWHERE hp.created_at >= :since::timestamptz\n  AND COALESCE(h.disease, '') ILIKE '%' || :field_slug || '%'\nGROUP BY date_trunc('month', hp.created_at)\nORDER BY month\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}},{"name":"market_liquidity","query":"\nSELECT\n    to_char(date_trunc('month', m.created_at), 'YYYY-MM') AS month,\n    ROUND(SUM(m.liquidity)::numeric, 2) AS total_liquidity,\n    COUNT(*) AS market_count\nFROM markets m\nJOIN hypotheses h ON m.entity_id = h.id\nWHERE m.created_at >= :since::timestamptz\n  AND m.market_type = 'hypothesis'\n  AND COALESCE(h.disease, '') ILIKE '%' || :field_slug || '%'\nGROUP BY date_trunc('month', m.created_at)\nORDER BY month\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}},{"name":"hypothesis_count_growth","query":"\nWITH monthly_new AS (\n    SELECT\n        date_trunc('month', created_at) AS month,\n        COUNT(*) AS new_count\n    FROM hypotheses\n    WHERE created_at >= :since::timestamptz\n      AND COALESCE(disease, '') ILIKE '%' || :field_slug || '%'\n    GROUP BY date_trunc('month', created_at)\n)\nSELECT\n    to_char(month, 'YYYY-MM') AS month,\n    new_count,\n    SUM(new_count) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_count\nFROM monthly_new\nORDER BY month\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}},{"name":"top_movers_per_quarter","query":"\nWITH quarterly AS (\n    SELECT\n        h.id,\n        h.title,\n        to_char(date_trunc('quarter', ph.created_at), 'YYYY-\"Q\"Q') AS quarter,\n        MAX(ph.score) - MIN(ph.score) AS elo_delta,\n        ROUND(AVG(ph.score)::numeric, 4) AS avg_score\n    FROM price_history ph\n    JOIN hypotheses h ON ph.hypothesis_id = h.id\n    WHERE ph.created_at >= :since::timestamptz\n      AND ph.item_type = 'hypothesis'\n      AND COALESCE(h.disease, '') ILIKE '%' || :field_slug || '%'\n    GROUP BY h.id, h.title, date_trunc('quarter', ph.created_at)\n    HAVING COUNT(*) >= 2\n),\nranked AS (\n    SELECT\n        quarter,\n        id,\n        title,\n        ROUND(elo_delta::numeric, 4) AS elo_delta,\n        avg_score,\n        ROW_NUMBER() OVER (PARTITION BY quarter ORDER BY elo_delta DESC) AS rank\n    FROM quarterly\n)\nSELECT quarter, id, title, elo_delta, avg_score\nFROM ranked\nWHERE rank <= 5\nORDER BY quarter DESC, rank\n","params":{"since":{"type":"str","default":"2020-01-01","from_request":"since"},"field_slug":{"type":"str","default":"molecular biology","from_request":"field_slug"}}}]},"_schema_version":1,"last_render_data":{"elo_distribution":[],"market_liquidity":[],"citation_accumulation":[],"top_movers_per_quarter":[],"hypothesis_count_growth":[]},"last_rendered_at":"2026-07-12T09:44:57.992382+00:00","cache_ttl_seconds":3600,"last_render_errors":[],"last_render_params":{},"refresh_interval_seconds":3600},"created_at":"2026-04-27T10:31:32.873652-07:00","updated_at":"2026-07-12T02:44:57.998466-07:00","version_number":23,"parent_version_id":null,"version_tag":null,"changelog":null,"is_latest":1,"lifecycle_state":"active","superseded_by":null,"deprecated_at":null,"deprecated_reason":null,"dependencies":null,"market_price":0.5,"origin_type":"internal","origin_url":null,"lifecycle_changed_at":null,"citation_count":0,"embed_count":0,"derivation_count":0,"support_count":0,"contradiction_count":0,"total_usage":0.0,"usage_score":0.5,"usage_computed_at":null,"quality_status":null,"contributors":[],"answers_question_ids":null,"deprecated_reason_detail":null,"deprecated_reason_code":null,"commit_sha":null,"commit_submodule":null,"last_mutated_at":"2026-07-12T02:44:57.998466-07:00","disputed_at":null,"gap_id":null,"mission_id":null,"intrinsic_priority":null,"effective_priority":null,"artifact_id":"88b4f40e-4aac-48ea-be1f-052060df1c3c","artifact_dir":"data/scidex-artifacts/88/88b4f40e-4aac-48ea-be1f-052060df1c3c","primary_filename":null,"accessory_filenames":null,"folder_layout_version":1,"migrated_to_folder_at":"2026-04-28T23:09:37.126047-07:00","hypothesis_id":null,"authorship":{"kind":"human","contributors":[{"role":"author","actor_ref":"agent"}]},"epistemic_tier":"T3_provisional","created_by_agent_id":null},"outgoing_links":[],"incoming_links":[],"current_artifact_id":"field-time-series-molecular-biology","is_canonical":true,"supersede_chain":["field-time-series-molecular-biology"]}