← Session 10 — Website planning + local dashboard build
thinking (643 chars)
Bug in home.html: `{{ state|first:"CURRENT POSITION" }}` — that's not valid; state is a dict. In Django templates, dict lookup: `{{ state.CURRENT_POSITION }}` won't work because key has a space ("CURRENT POSITION"). Keys with spaces can't be accessed via dot. I need to pass position separately from the view. Let me fix home view to pass position=state.get("CURRENT POSITION"). Fix template accordingly.
Continue with remaining templates: dashboard.html, roadmap.html, ledger.html, ledger_detail.html, experiments.html, experiment_detail.html, collection.html, collection_item.html, paper.html, live.html, feedback.html. Then CSS and app.js.
Fixing a template bug (dict keys with spaces can't be dot-accessed), then continuing templates.
tool: Edit
input
{
"file_path": "D:\\Python\\Quantum\\web\\dashboard\\views.py",
"old_string": "def home(request):\n return render(request, \"dashboard/home.html\", {\n \"stats\": rd.summary_stats(),\n \"state\": rd.parse_state(),\n })",
"new_string": "def home(request):\n state = rd.parse_state()\n return render(request, \"dashboard/home.html\", {\n \"stats\": rd.summary_stats(),\n \"position\": state.get(\"CURRENT POSITION\", \"\"),\n })"
}
tool: Edit ok
input
{
"file_path": "D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\home.html",
"old_string": " <pre id=\"home-position\" class=\"state-box\">{{ state|first:\"CURRENT POSITION\" }}</pre>",
"new_string": " <pre id=\"home-position\" class=\"state-box\">{{ position }}</pre>"
}
result 2026-08-19 17:59:41Z → 2026-08-29 03:59:11Z
{
"filePath": "D:\\Python\\Quantum\\web\\rhweb\\settings.py",
"oldString": "INSTALLED_APPS = [\n \"django.contrib.contenttypes\",\n \"django.contrib.auth\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"dashboard\",\n]\n\nMIDDLEWARE = [\n \"django.middleware.security.SecurityMiddleware\",\n \"django.contrib.sessions.middleware.SessionMiddleware\",\n \"django.middleware.common.CommonMiddleware\",\n \"django.middleware.csrf.CsrfViewMiddleware\",\n \"django.contrib.auth.middleware.AuthenticationMiddleware\",\n \"django.contrib.messages.middleware.MessageMiddleware\",\n]",
"newString": "INSTALLED_APPS = [\n \"django.contrib.admin\",\n \"django.contrib.contenttypes\",\n \"django.contrib.auth\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"dashboard\",\n]\n\nMIDDLEWARE = [\n \"django.middleware.security.SecurityMiddleware\",\n \"django.contrib.sessions.middleware.SessionMiddleware\",\n \"django.middleware.common.CommonMiddleware\",\n \"django.middleware.csrf.CsrfViewMiddleware\",\n \"django.contrib.auth.middleware.AuthenticationMiddleware\",\n \"django.contrib.messages.middleware.MessageMiddleware\",\n \"dashboard.middleware.VisitorLogMiddleware\",\n]",
"originalFile": "\"\"\"\nRH-WEBSITE settings \u2014 localhost-only read-only dashboard for NGUYEN-RH-1.\nHARD RULE (RH-WEBSITE.md \u00a70): this project NEVER writes to the research\narchive. All research data is read through read-only handles (see\ndashboard/research_data.py). The only writable stores are web/feedback.db\nand web/feedback/.\n\"\"\"\nfrom pathlib import Path\n\nBASE_DIR = Path(__file__).resolve().parent.parent # web/\nREPO_ROOT = BASE_DIR.parent # D:\\Python\\Quantum\nRESEARCH_DIR = REPO_ROOT / \"research\"\n\nSECRET_KEY = \"rh-website-localhost-only-dev-key\"\nDEBUG = True\nALLOWED_HOSTS = [\"127.0.0.1\", \"localhost\"]\n\nINSTALLED_APPS = [\n \"django.contrib.contenttypes\",\n \"django.contrib.auth\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"dashboard\",\n]\n\nMIDDLEWARE = [\n \"django.middleware.security.SecurityMiddleware\",\n \"django.contrib.sessions.middleware.SessionMiddleware\",\n \"django.middleware.common.CommonMiddleware\",\n \"django.middleware.csrf.CsrfViewMiddleware\",\n \"django.contrib.auth.middleware.AuthenticationMiddleware\",\n \"django.contrib.messages.middleware.MessageMiddleware\",\n]\n\nROOT_URLCONF = \"rhweb.urls\"\n\nTEMPLATES = [\n {\n \"BACKEND\": \"django.template.backends.django.DjangoTemplates\",\n \"DIRS\": [],\n \"APP_DIRS\": True,\n \"OPTIONS\": {\n \"context_processors\": [\n \"django.template.context_processors.request\",\n \"django.contrib.messages.context_processors.messages\",\n ],\n },\n },\n]\n\nWSGI_APPLICATION = \"rhweb.wsgi.application\"\n\n# Website-owned database (feedback). Lives in web/, never in research/.\nDATABASES = {\n \"default\": {\n \"ENGINE\": \"django.db.backends.sqlite3\",\n \"NAME\": BASE_DIR / \"feedback.db\",\n }\n}\n\nLANGUAGE_CODE = \"en-us\"\nTIME_ZONE = \"UTC\"\nUSE_I18N = True\nUSE_TZ = True\n\nSTATIC_URL = \"static/\"\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\n",
"structuredPatch": [
{
"oldStart": 16,
"oldLines": 6,
"newStart": 16,
"newLines": 7,
"lines": [
" ALLOWED_HOSTS = [\"127.0.0.1\", \"localhost\"]",
" ",
" INSTALLED_APPS = [",
"+ \"django.contrib.admin\",",
" \"django.contrib.contenttypes\",",
" \"django.contrib.auth\",",
" \"django.contrib.sessions\","
]
},
{
"oldStart": 31,
"oldLines": 6,
"newStart": 32,
"newLines": 7,
"lines": [
" \"django.middleware.csrf.CsrfViewMiddleware\",",
" \"django.contrib.auth.middleware.AuthenticationMiddleware\",",
" \"django.contrib.messages.middleware.MessageMiddleware\",",
"+ \"dashboard.middleware.VisitorLogMiddleware\",",
" ]",
" ",
" ROOT_URLCONF = \"rhweb.urls\""
]
}
],
"userModified": false,
"replaceAll": false
}
tool: Write
input
{
"file_path": "D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\dashboard.html",
"content": "{% extends \"dashboard/base.html\" %}\n{% block title %}Dashboard{% endblock %}\n{% block nav_dashboard %}active{% endblock %}\n{% block content %}\n<h1>Mission Dashboard</h1>\n\n<div class=\"grid-2\">\n <section class=\"card\">\n <h2>Current position <span class=\"live-chip\">live</span></h2>\n <pre id=\"dash-position\" class=\"state-box\">{{ state.CURRENT_POSITION }}</pre>\n </section>\n <section class=\"card\">\n <h2>Next action <span class=\"live-chip\">live</span></h2>\n <pre id=\"dash-next\" class=\"state-box\">{{ state.NEXT_ACTION }}</pre>\n <h3>Blockers</h3>\n <pre id=\"dash-blockers\" class=\"state-box small\">{{ state.BLOCKERS }}</pre>\n </section>\n</div>\n\n<section class=\"card\">\n <h2>Progress</h2>\n <div class=\"stat-grid\">\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.checklist.done }}</div>\n <div class=\"stat-label\">tasks done</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.checklist.partial }}</div>\n <div class=\"stat-label\">in progress</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.checklist.open }}</div>\n <div class=\"stat-label\">open</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.results }}</div>\n <div class=\"stat-label\">ledger results</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.experiments }}</div>\n <div class=\"stat-label\">experiments</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ new_feedback }}</div>\n <div class=\"stat-label\">new feedback</div></div>\n </div>\n <h3>Phases</h3>\n <table class=\"tbl\">\n <thead><tr><th>Phase</th><th>Done</th><th>Partial</th><th>Open</th><th>Status</th></tr></thead>\n <tbody>\n {% for p in stats.checklist.phases %}\n <tr>\n <td>{{ p.name }}</td>\n <td>{{ p.done }}</td><td>{{ p.partial }}</td><td>{{ p.open }}</td>\n <td>{% if p.marker == \"\u2705\" %}<span class=\"tag tag-ok\">complete</span>\n {% elif p.done > 0 or p.partial > 0 %}<span class=\"tag tag-run\">active</span>\n {% else %}<span class=\"tag tag-open\">pending</span>{% endif %}</td>\n </tr>\n {% endfor %}\n </tbody>\n </table>\n</section>\n\n<div class=\"grid-2\">\n <section class=\"card\">\n <h2>Recent activity (git)</h2>\n <ul class=\"commit-list\">\n {% for c in commits %}<li><code>{{ c }}</code></li>{% endfor %}\n </ul>\n </section>\n <section class=\"card\">\n <h2>Recent sessions</h2>\n <table class=\"tbl\">\n <thead><tr><th>#</th><th>Date</th><th>Summary</th></tr></thead>\n <tbody>\n {% for s in sessions %}\n <tr><td>{{ s.id }}</td><td>{{ s.date }}</td>\n <td class=\"wrap\">{{ s.summary|truncatewords:25 }}</td></tr>\n {% endfor %}\n </tbody>\n </table>\n </section>\n</div>\n{% endblock %}\n"
}
tool: Write
input
{
"file_path": "D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\roadmap.html",
"content": "{% extends \"dashboard/base.html\" %}\n{% block title %}Roadmap{% endblock %}\n{% block nav_roadmap %}active{% endblock %}\n{% block content %}\n<h1>Research Blueprint & Roadmap</h1>\n<p class=\"muted\">Rendered live from <code>NGUYEN.md</code> \u2014 the project's\nmaster plan. Last updated: {{ mtime }}</p>\n<article class=\"card md\">{{ html|safe }}</article>\n{% endblock %}\n"
}
tool: Write
input
{
"file_path": "D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\ledger.html",
"content": "{% extends \"dashboard/base.html\" %}\n{% block title %}Results Ledger{% endblock %}\n{% block nav_ledger %}active{% endblock %}\n{% block content %}\n<h1>Results Ledger</h1>\n<p class=\"muted\">Every claim with its honesty tag. Click through for the full\nstatement, proof, dependencies, and adversarial review.</p>\n<table class=\"tbl\">\n <thead><tr><th>ID</th><th>Claim</th><th>Tag</th><th>Track</th><th>Date</th></tr></thead>\n <tbody>\n {% for r in results %}\n <tr>\n <td><a href=\"{% url 'ledger_detail' r.id %}\">{{ r.id }}</a></td>\n <td class=\"wrap\">{{ r.title }}</td>\n <td><span class=\"tag {% if r.tag == 'PROVED-CONDITIONAL' %}tag-cond{% elif 'PROVED' in r.tag %}tag-ok{% else %}tag-num{% endif %}\">{{ r.tag }}</span></td>\n <td>{{ r.track }}</td>\n <td>{{ r.date }}</td>\n </tr>\n {% endfor %}\n </tbody>\n</table>\n{% endblock %}\n"
}
tool: Write ok
input
{
"file_path": "D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\ledger_detail.html",
"content": "{% extends \"dashboard/base.html\" %}\n{% block title %}{{ row.id }}{% endblock %}\n{% block nav_ledger %}active{% endblock %}\n{% block content %}\n<p><a href=\"{% url 'ledger' %}\">\u2190 Results Ledger</a></p>\n<h1>{{ row.id }} \u2014 {{ row.title }}</h1>\n<p>\n <span class=\"tag {% if row.tag == 'PROVED-CONDITIONAL' %}tag-cond{% elif 'PROVED' in row.tag %}tag-ok{% else %}tag-num{% endif %}\">{{ row.tag }}</span>\n <span class=\"muted\">Track {{ row.track }} \u00b7 {{ row.date }} \u00b7 file updated {{ mtime }}</span>\n</p>\n{% if row.dependencies %}<p class=\"muted\">Dependencies: {{ row.dependencies }}</p>{% endif %}\n<article class=\"card md\">{{ html|safe }}</article>\n{% endblock %}\n"
}
result 2026-08-19 17:59:41Z → 2026-08-28 04:16:12Z
{
"type": "create",
"filePath": "D:\\Python\\quantum-deploy\\upload.py",
"content": "\"\"\"Resumable parallel FTP upload of docroot/ -> server /.\n\n- 6 worker threads, one FTP connection each (server allows 50).\n- Skips files whose remote SIZE already matches (safe resume/re-run).\n- chmods app.cgi to 755 at the end.\nUsage: FTP_PASS=... python upload.py\n\"\"\"\nimport ftplib\nimport os\nimport sys\nimport threading\nfrom concurrent.futures import ThreadPoolExecutor\nfrom pathlib import Path\n\nHOST = \"121swr.com\"\nUSER = \"[ftp-user]@researchai.dev\"\nPASS = os.environ[\"FTP_PASS\"]\nDOCROOT = Path(__file__).resolve().parent / \"docroot\"\nWORKERS = 6\n\n_local = threading.local()\n\n\ndef conn():\n ftp = getattr(_local, \"ftp\", None)\n if ftp is None:\n ftp = ftplib.FTP()\n ftp.connect(HOST, 21, timeout=60)\n ftp.login(USER, PASS)\n ftp.set_pasv(True)\n _local.ftp = ftp\n return ftp\n\n\ndef ensure_dirs(ftp, remote_dir):\n parts = [p for p in remote_dir.split(\"/\") if p]\n cur = \"\"\n for p in parts:\n cur += \"/\" + p\n try:\n ftp.mkd(cur)\n except ftplib.error_perm:\n pass # exists\n\n\ndef remote_size(ftp, path):\n try:\n return ftp.size(path)\n except ftplib.error_perm:\n return None\n\n\ndef upload_one(job):\n local, remote = job\n size = local.stat().st_size\n ftp = conn()\n for attempt in range(3):\n try:\n ensure_dirs(ftp, remote.rsplit(\"/\", 1)[0])\n if remote_size(ftp, remote) == size:\n return (remote, \"skip\", size)\n with local.open(\"rb\") as fh:\n ftp.storbinary(f\"STOR {remote}\", fh, blocksize=256 * 1024)\n got = remote_size(ftp, remote)\n if got != size:\n raise IOError(f\"size mismatch after upload: {got} != {size}\")\n return (remote, \"put\", size)\n except Exception: # noqa: BLE001\n try:\n _local.ftp.close()\n except Exception: # noqa: BLE001\n pass\n _local.ftp = None\n if attempt == 2:\n raise\n ftp = conn()\n\n\ndef main():\n jobs = []\n for p in sorted(DOCROOT.rglob(\"*\")):\n if p.is_file():\n rel = p.relative_to(DOCROOT).as_posix()\n jobs.append((p, \"/\" + rel))\n total = sum(p.stat().st_size for p, _ in jobs)\n print(f\"{len(jobs)} files, {total/1e6:.1f} MB\")\n\n done = [0]\n put_bytes = [0]\n lock = threading.Lock()\n with ThreadPoolExecutor(max_workers=WORKERS) as ex:\n for remote, action, size in ex.map(upload_one, jobs):\n with lock:\n done[0] += 1\n if action == \"put\":\n put_bytes[0] += size\n if done[0] % 25 == 0 or done[0] == len(jobs):\n print(f\" {done[0]}/{len(jobs)} files, \"\n f\"{put_bytes[0]/1e6:.1f} MB sent\", flush=True)\n\n # executable bit for the adapter\n ftp = conn()\n ftp.sendcmd(\"SITE CHMOD 755 /app.cgi\")\n print(\"chmod 755 /app.cgi OK\")\n print(\"UPLOAD COMPLETE\")\n\n\nif __name__ == \"__main__\":\n main()\n",
"structuredPatch": [],
"originalFile": null
}
raw content_json (database row)
[{"type":"thinking","thinking":"Bug in home.html: `{{ state|first:\"CURRENT POSITION\" }}` — that's not valid; state is a dict. In Django templates, dict lookup: `{{ state.CURRENT_POSITION }}` won't work because key has a space (\"CURRENT POSITION\"). Keys with spaces can't be accessed via dot. I need to pass position separately from the view. Let me fix home view to pass position=state.get(\"CURRENT POSITION\"). Fix template accordingly.\n\nContinue with remaining templates: dashboard.html, roadmap.html, ledger.html, ledger_detail.html, experiments.html, experiment_detail.html, collection.html, collection_item.html, paper.html, live.html, feedback.html. Then CSS and app.js.","signature":""},{"type":"text","text":"Fixing a template bug (dict keys with spaces can't be dot-accessed), then continuing templates."},{"type":"tool_use","id":"Edit_43","name":"Edit","input":{"file_path":"D:\\Python\\Quantum\\web\\dashboard\\views.py","old_string":"def home(request):\n return render(request, \"dashboard/home.html\", {\n \"stats\": rd.summary_stats(),\n \"state\": rd.parse_state(),\n })","new_string":"def home(request):\n state = rd.parse_state()\n return render(request, \"dashboard/home.html\", {\n \"stats\": rd.summary_stats(),\n \"position\": state.get(\"CURRENT POSITION\", \"\"),\n })"},"extra_content":null},{"type":"tool_use","id":"Edit_44","name":"Edit","input":{"file_path":"D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\home.html","old_string":" <pre id=\"home-position\" class=\"state-box\">{{ state|first:\"CURRENT POSITION\" }}</pre>","new_string":" <pre id=\"home-position\" class=\"state-box\">{{ position }}</pre>"},"extra_content":null},{"type":"tool_use","id":"Write_45","name":"Write","input":{"file_path":"D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\dashboard.html","content":"{% extends \"dashboard/base.html\" %}\n{% block title %}Dashboard{% endblock %}\n{% block nav_dashboard %}active{% endblock %}\n{% block content %}\n<h1>Mission Dashboard</h1>\n\n<div class=\"grid-2\">\n <section class=\"card\">\n <h2>Current position <span class=\"live-chip\">live</span></h2>\n <pre id=\"dash-position\" class=\"state-box\">{{ state.CURRENT_POSITION }}</pre>\n </section>\n <section class=\"card\">\n <h2>Next action <span class=\"live-chip\">live</span></h2>\n <pre id=\"dash-next\" class=\"state-box\">{{ state.NEXT_ACTION }}</pre>\n <h3>Blockers</h3>\n <pre id=\"dash-blockers\" class=\"state-box small\">{{ state.BLOCKERS }}</pre>\n </section>\n</div>\n\n<section class=\"card\">\n <h2>Progress</h2>\n <div class=\"stat-grid\">\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.checklist.done }}</div>\n <div class=\"stat-label\">tasks done</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.checklist.partial }}</div>\n <div class=\"stat-label\">in progress</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.checklist.open }}</div>\n <div class=\"stat-label\">open</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.results }}</div>\n <div class=\"stat-label\">ledger results</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ stats.experiments }}</div>\n <div class=\"stat-label\">experiments</div></div>\n <div class=\"stat\"><div class=\"stat-num\">{{ new_feedback }}</div>\n <div class=\"stat-label\">new feedback</div></div>\n </div>\n <h3>Phases</h3>\n <table class=\"tbl\">\n <thead><tr><th>Phase</th><th>Done</th><th>Partial</th><th>Open</th><th>Status</th></tr></thead>\n <tbody>\n {% for p in stats.checklist.phases %}\n <tr>\n <td>{{ p.name }}</td>\n <td>{{ p.done }}</td><td>{{ p.partial }}</td><td>{{ p.open }}</td>\n <td>{% if p.marker == \"✅\" %}<span class=\"tag tag-ok\">complete</span>\n {% elif p.done > 0 or p.partial > 0 %}<span class=\"tag tag-run\">active</span>\n {% else %}<span class=\"tag tag-open\">pending</span>{% endif %}</td>\n </tr>\n {% endfor %}\n </tbody>\n </table>\n</section>\n\n<div class=\"grid-2\">\n <section class=\"card\">\n <h2>Recent activity (git)</h2>\n <ul class=\"commit-list\">\n {% for c in commits %}<li><code>{{ c }}</code></li>{% endfor %}\n </ul>\n </section>\n <section class=\"card\">\n <h2>Recent sessions</h2>\n <table class=\"tbl\">\n <thead><tr><th>#</th><th>Date</th><th>Summary</th></tr></thead>\n <tbody>\n {% for s in sessions %}\n <tr><td>{{ s.id }}</td><td>{{ s.date }}</td>\n <td class=\"wrap\">{{ s.summary|truncatewords:25 }}</td></tr>\n {% endfor %}\n </tbody>\n </table>\n </section>\n</div>\n{% endblock %}\n"},"extra_content":null},{"type":"tool_use","id":"Write_46","name":"Write","input":{"file_path":"D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\roadmap.html","content":"{% extends \"dashboard/base.html\" %}\n{% block title %}Roadmap{% endblock %}\n{% block nav_roadmap %}active{% endblock %}\n{% block content %}\n<h1>Research Blueprint & Roadmap</h1>\n<p class=\"muted\">Rendered live from <code>NGUYEN.md</code> — the project's\nmaster plan. Last updated: {{ mtime }}</p>\n<article class=\"card md\">{{ html|safe }}</article>\n{% endblock %}\n"},"extra_content":null},{"type":"tool_use","id":"Write_47","name":"Write","input":{"file_path":"D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\ledger.html","content":"{% extends \"dashboard/base.html\" %}\n{% block title %}Results Ledger{% endblock %}\n{% block nav_ledger %}active{% endblock %}\n{% block content %}\n<h1>Results Ledger</h1>\n<p class=\"muted\">Every claim with its honesty tag. Click through for the full\nstatement, proof, dependencies, and adversarial review.</p>\n<table class=\"tbl\">\n <thead><tr><th>ID</th><th>Claim</th><th>Tag</th><th>Track</th><th>Date</th></tr></thead>\n <tbody>\n {% for r in results %}\n <tr>\n <td><a href=\"{% url 'ledger_detail' r.id %}\">{{ r.id }}</a></td>\n <td class=\"wrap\">{{ r.title }}</td>\n <td><span class=\"tag {% if r.tag == 'PROVED-CONDITIONAL' %}tag-cond{% elif 'PROVED' in r.tag %}tag-ok{% else %}tag-num{% endif %}\">{{ r.tag }}</span></td>\n <td>{{ r.track }}</td>\n <td>{{ r.date }}</td>\n </tr>\n {% endfor %}\n </tbody>\n</table>\n{% endblock %}\n"},"extra_content":null},{"type":"tool_use","id":"Write_48","name":"Write","input":{"file_path":"D:\\Python\\Quantum\\web\\dashboard\\templates\\dashboard\\ledger_detail.html","content":"{% extends \"dashboard/base.html\" %}\n{% block title %}{{ row.id }}{% endblock %}\n{% block nav_ledger %}active{% endblock %}\n{% block content %}\n<p><a href=\"{% url 'ledger' %}\">← Results Ledger</a></p>\n<h1>{{ row.id }} — {{ row.title }}</h1>\n<p>\n <span class=\"tag {% if row.tag == 'PROVED-CONDITIONAL' %}tag-cond{% elif 'PROVED' in row.tag %}tag-ok{% else %}tag-num{% endif %}\">{{ row.tag }}</span>\n <span class=\"muted\">Track {{ row.track }} · {{ row.date }} · file updated {{ mtime }}</span>\n</p>\n{% if row.dependencies %}<p class=\"muted\">Dependencies: {{ row.dependencies }}</p>{% endif %}\n<article class=\"card md\">{{ html|safe }}</article>\n{% endblock %}\n"},"extra_content":null}]