lab: automated intel and verification sync codex/intel-20260317-000751

这个提交包含在:
hao
2026-03-17 00:07:51 -07:00
父节点 dddbe19df8
当前提交 1f2744825f
修改 88 个文件,包含 733 行新增170 行删除

查看文件

@@ -8,35 +8,86 @@
h1, h2 { margin-bottom: .5rem; }
.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1rem; margin: 1rem 0 2rem; }
.card { background: white; border: 1px solid #cbd5e1; border-radius: 14px; padding: 1rem; box-shadow: 0 4px 18px rgba(15,23,42,.06); }
table { width: 100%%; border-collapse: collapse; background: white; border-radius: 12px; overflow: hidden; }
.filters { display:flex; flex-wrap:wrap; gap:.75rem; margin: 1rem 0; }
input, select { padding: .6rem .75rem; border: 1px solid #cbd5e1; border-radius: 10px; background: white; }
table { width: 100%%; border-collapse: collapse; background: white; border-radius: 12px; overflow: hidden; margin-bottom: 2rem; }
th, td { padding: .75rem; border-bottom: 1px solid #e2e8f0; text-align: left; font-size: .92rem; }
code { background: #e2e8f0; padding: .1rem .35rem; border-radius: 6px; }
.muted { color: #475569; }
</style>
</head>
<body>
<h1>websafe Local Lab Dashboard</h1>
<p>LAB ONLY | AUTHORIZED TARGETS ONLY | 本地静态看板</p>
<div id="summary" class="cards"></div>
<h2>Recent Runs</h2>
<h2>System Coverage</h2>
<table>
<thead><tr><th>Run</th><th>Advisory</th><th>Status</th><th>Mode</th><th>Finished</th><th>Report</th></tr></thead>
<thead><tr><th>System</th><th>Total</th><th>Verified Real</th><th>Verified Synthetic</th><th>Blocked</th><th>Manual</th><th>Browser</th><th>Latest</th></tr></thead>
<tbody id="systemRows"></tbody>
</table>
<h2>Recent Runs</h2>
<div class="filters">
<input id="search" placeholder="Search advisory or run id">
<select id="systemFilter"><option value="">All systems</option></select>
<select id="statusFilter"><option value="">All statuses</option></select>
<select id="familyFilter"><option value="">All profiles</option></select>
</div>
<table>
<thead><tr><th>Run</th><th>System</th><th>Advisory</th><th>Status</th><th>Mode</th><th>Profile</th><th>Finished</th><th>Artifacts</th></tr></thead>
<tbody id="rows"></tbody>
</table>
<script>
async function main() {
const summary = await fetch('./summary.json').then(r => r.json());
const runs = await fetch('./runs.json').then(r => r.json());
const [summary, runs, systems] = await Promise.all([
fetch('./summary.json').then(r => r.json()),
fetch('./runs.json').then(r => r.json()),
fetch('./systems.json').then(r => r.json())
]);
const summaryRoot = document.getElementById('summary');
const cards = [{label: 'Run Count', value: summary.run_count}];
const cards = [{label: 'Advisories', value: summary.advisory_count}, {label: 'Run Count', value: summary.run_count}];
for (const [key, value] of Object.entries(summary.statuses)) {
cards.push({label: key, value});
}
summaryRoot.innerHTML = cards.map(item => `<div class="card"><strong>${item.label}</strong><div style="font-size:2rem;margin-top:.5rem;">${item.value}</div></div>`).join('');
const systemRows = document.getElementById('systemRows');
systemRows.innerHTML = systems.map(item => `<tr><td><code>${item.system_id}</code></td><td>${item.total}</td><td>${item.verified_real}</td><td>${item.verified_synthetic}</td><td>${item.blocked}</td><td>${item.manual}</td><td>${item.browser_present}/${item.browser_required}</td><td>${item.latest_update || ''}</td></tr>`).join('');
const systemFilter = document.getElementById('systemFilter');
const statusFilter = document.getElementById('statusFilter');
const familyFilter = document.getElementById('familyFilter');
const search = document.getElementById('search');
const distinct = (values) => Array.from(new Set(values.filter(Boolean))).sort();
systemFilter.innerHTML += distinct(runs.map(item => item.system_id)).map(value => `<option value="${value}">${value}</option>`).join('');
statusFilter.innerHTML += distinct(runs.map(item => item.verification_status)).map(value => `<option value="${value}">${value}</option>`).join('');
familyFilter.innerHTML += distinct(runs.map(item => item.repro_profile_id)).map(value => `<option value="${value}">${value}</option>`).join('');
const rows = document.getElementById('rows');
rows.innerHTML = runs.map(item => {
const report = item.report_refs && item.report_refs.report_html ? item.report_refs.report_html : '';
return `<tr><td><code>${item.run_id}</code></td><td><code>${item.advisory_id}</code></td><td>${item.verification_status}</td><td>${item.verification_mode}</td><td>${item.finished_at || ''}</td><td>${report ? `<a href="../../../../${report.replace('/Users/x/websafe/', '')}">open</a>` : '-'}</td></tr>`;
}).join('');
function renderRows() {
const query = search.value.trim().toLowerCase();
const filtered = runs.filter(item => {
if (systemFilter.value && item.system_id !== systemFilter.value) return false;
if (statusFilter.value && item.verification_status !== statusFilter.value) return false;
if (familyFilter.value && item.repro_profile_id !== familyFilter.value) return false;
if (query) {
const haystack = `${item.run_id} ${item.advisory_id} ${item.system_id} ${item.repro_profile_id}`.toLowerCase();
if (!haystack.includes(query)) return false;
}
return true;
});
rows.innerHTML = filtered.map(item => {
const links = [];
if (item.dashboard_refs && item.dashboard_refs.report_html) links.push(`<a href="${item.dashboard_refs.report_html}">report</a>`);
if (item.dashboard_refs && item.dashboard_refs.timeline) links.push(`<a href="${item.dashboard_refs.timeline}">timeline</a>`);
if (item.dashboard_refs && item.dashboard_refs.bundle) links.push(`<a href="${item.dashboard_refs.bundle}">bundle</a>`);
if (item.browser_links && item.browser_links.length) links.push(`<a href="${item.browser_links[0]}">browser</a>`);
if (item.container_links && item.container_links.length) links.push(`<a href="${item.container_links[0]}">logs</a>`);
const reason = item.blocked_reason ? `<div class="muted">${item.blocked_reason}</div>` : '';
return `<tr><td><code>${item.run_id}</code>${reason}</td><td><code>${item.system_id}</code></td><td><code>${item.advisory_id}</code></td><td>${item.verification_status}</td><td>${item.verification_mode}</td><td><code>${item.repro_profile_id}</code></td><td>${item.finished_at || ''}</td><td>${links.join(' | ') || '-'}</td></tr>`;
}).join('');
}
[systemFilter, statusFilter, familyFilter, search].forEach(node => node.addEventListener('input', renderRows));
renderRows();
}
main();
</script>

查看文件

@@ -1,4 +1,108 @@
[
{
"run_id": "gitea-livecheck-20260316",
"system_id": "gitea",
"advisory_id": "gitea--CVE-2025-68939",
"repro_profile_id": "file-upload-generic",
"verification_status": "blocked-artifact",
"verification_mode": "real",
"artifact_mode": "official-image",
"target_env": "local-docker",
"compose_services": [
"app"
],
"baseline_refs": [],
"attack_steps": [],
"browser_refs": [],
"browser_evidence": {
"required": true,
"present": false,
"refs": [],
"baseline_refs": [],
"proof_refs": [],
"baseline_title": null,
"proof_title": null
},
"container_log_refs": [],
"request_log_refs": [],
"compose_refs": [
"/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316/compose/compose.yaml"
],
"timeline": [
{
"at": "2026-03-17T07:02:55+00:00",
"step": "select-advisory",
"status": "completed",
"detail": "gitea--CVE-2025-68939"
},
{
"at": "2026-03-17T07:02:55+00:00",
"step": "resolve-repro-profile",
"status": "completed",
"detail": "file-upload-generic"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "provision-compose-environment",
"status": "blocked-artifact",
"detail": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "baseline-snapshot",
"status": "skipped",
"detail": "no baseline urls or provisioning blocked"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "browser-replay-before-attack",
"status": "skipped",
"detail": "baseline browser capture unavailable"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "controlled-attack-chain",
"status": "skipped",
"detail": "provisioning blocked"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "browser-replay-after-attack",
"status": "skipped",
"detail": "proof browser capture unavailable"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "collect-logs-and-evidence",
"status": "skipped",
"detail": "container_logs=0"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "update-registry-and-reports",
"status": "completed",
"detail": "gitea-livecheck-20260316"
}
],
"started_at": "2026-03-17T07:02:55+00:00",
"finished_at": "2026-03-17T07:02:56+00:00",
"blocked_reason": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?",
"report_refs": {
"bundle_dir": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316",
"report_md": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316/report.md",
"report_html": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316/report.html",
"timeline": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316/timeline.mmd"
},
"dashboard_refs": {
"report_html": "./runs/gitea-livecheck-20260316/report.html",
"report_md": "./runs/gitea-livecheck-20260316/report.md",
"timeline": "./runs/gitea-livecheck-20260316/timeline.mmd",
"bundle": "./runs/gitea-livecheck-20260316/run.json"
},
"browser_links": [],
"container_links": [],
"request_links": []
},
{
"run_id": "gitea-gitea--CVE-2025-68939-20260317063330",
"system_id": "gitea",
@@ -28,7 +132,19 @@
"report_md": "/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330/report.md",
"report_html": "/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330/report.html",
"timeline": "/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330/timeline.mmd"
}
},
"dashboard_refs": {
"report_html": "./runs/gitea-gitea--CVE-2025-68939-20260317063330/report.html",
"report_md": "./runs/gitea-gitea--CVE-2025-68939-20260317063330/report.md",
"timeline": "./runs/gitea-gitea--CVE-2025-68939-20260317063330/timeline.mmd",
"bundle": "./runs/gitea-gitea--CVE-2025-68939-20260317063330/run.json"
},
"browser_links": [],
"container_links": [],
"request_links": [
"./runs/gitea-gitea--CVE-2025-68939-20260317063330/logs/attack.json",
"./runs/gitea-gitea--CVE-2025-68939-20260317063330/logs/baseline.json"
]
},
{
"run_id": "nextjs-nextjs--CVE-2025-29927-20260317063047",
@@ -68,6 +184,18 @@
"report_md": "/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/report.md",
"report_html": "/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/report.html",
"timeline": "/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/timeline.mmd"
}
},
"dashboard_refs": {
"report_html": "./runs/nextjs-nextjs--CVE-2025-29927-20260317063047/report.html",
"report_md": "./runs/nextjs-nextjs--CVE-2025-29927-20260317063047/report.md",
"timeline": "./runs/nextjs-nextjs--CVE-2025-29927-20260317063047/timeline.mmd",
"bundle": "./runs/nextjs-nextjs--CVE-2025-29927-20260317063047/run.json"
},
"browser_links": [],
"container_links": [],
"request_links": [
"./runs/nextjs-nextjs--CVE-2025-29927-20260317063047/logs/attack.json",
"./runs/nextjs-nextjs--CVE-2025-29927-20260317063047/logs/baseline.json"
]
}
]

查看文件

@@ -0,0 +1 @@
../../../../06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330

查看文件

@@ -0,0 +1 @@
../../../../06-case-studies/generated-runs/gitea-livecheck-20260316

查看文件

@@ -0,0 +1 @@
../../../../06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047

查看文件

@@ -1,80 +1,79 @@
{
"run_count": 2,
"generated_at": "2026-03-17T07:06:50+00:00",
"advisory_count": 89,
"run_count": 3,
"statuses": {
"blocked-artifact": 1,
"blocked-artifact": 2,
"triage-manual": 1
},
"recent_runs": [
"recent_failures": [
{
"run_id": "gitea-livecheck-20260316",
"advisory_id": "gitea--CVE-2025-68939",
"status": "blocked-artifact",
"blocked_reason": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
},
{
"run_id": "gitea-gitea--CVE-2025-68939-20260317063330",
"system_id": "gitea",
"advisory_id": "gitea--CVE-2025-68939",
"repro_profile_id": "file-upload-generic",
"verification_status": "blocked-artifact",
"verification_mode": "real",
"artifact_mode": "official-image",
"target_env": "local-docker",
"compose_services": [
"app"
],
"baseline_refs": [],
"attack_steps": [],
"browser_refs": [],
"container_log_refs": [],
"request_log_refs": [
"/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330/logs/attack.json",
"/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330/logs/baseline.json"
],
"timeline": [],
"started_at": "2026-03-17T06:33:30+00:00",
"finished_at": "2026-03-17T06:33:30+00:00",
"blocked_reason": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?",
"report_refs": {
"bundle_dir": "/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330",
"report_md": "/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330/report.md",
"report_html": "/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330/report.html",
"timeline": "/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330/timeline.mmd"
}
"status": "blocked-artifact",
"blocked_reason": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
},
{
"run_id": "nextjs-nextjs--CVE-2025-29927-20260317063047",
"system_id": "nextjs",
"advisory_id": "nextjs--CVE-2025-29927",
"repro_profile_id": "authz-bypass-generic",
"verification_status": "triage-manual",
"verification_mode": "real",
"artifact_mode": "official-source",
"target_env": "local-docker",
"compose_services": [
"app"
],
"baseline_refs": [
"/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/logs/baseline.json"
],
"attack_steps": [
{
"kind": "note",
"tool": null,
"args": [],
"status": "planned"
}
],
"browser_refs": [],
"container_log_refs": [],
"request_log_refs": [
"/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/logs/attack.json",
"/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/logs/baseline.json"
],
"timeline": [],
"started_at": "2026-03-17T06:30:47+00:00",
"finished_at": "2026-03-17T06:30:47+00:00",
"blocked_reason": "dry-run only",
"report_refs": {
"bundle_dir": "/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047",
"report_md": "/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/report.md",
"report_html": "/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/report.html",
"timeline": "/Users/x/websafe/06-case-studies/generated-runs/nextjs-nextjs--CVE-2025-29927-20260317063047/timeline.mmd"
}
"status": "triage-manual",
"blocked_reason": "dry-run only"
}
],
"systems": [
{
"system_id": "gitea",
"display_name": "Gitea",
"total": 37,
"verified_real": 0,
"verified_synthetic": 0,
"blocked": 1,
"manual": 36,
"browser_required": 0,
"browser_present": 0,
"latest_update": "2026-03-03T04:57:57.697708Z"
},
{
"system_id": "nextjs",
"display_name": "Next.js",
"total": 26,
"verified_real": 0,
"verified_synthetic": 0,
"blocked": 0,
"manual": 26,
"browser_required": 0,
"browser_present": 0,
"latest_update": "2026-03-13T22:14:13.665535Z"
},
{
"system_id": "undici",
"display_name": "Undici",
"total": 14,
"verified_real": 0,
"verified_synthetic": 0,
"blocked": 0,
"manual": 14,
"browser_required": 0,
"browser_present": 0,
"latest_update": "2026-03-14T09:19:54.772219Z"
},
{
"system_id": "vite",
"display_name": "Vite",
"total": 12,
"verified_real": 0,
"verified_synthetic": 0,
"blocked": 0,
"manual": 12,
"browser_required": 0,
"browser_present": 0,
"latest_update": "2026-02-04T04:37:24.129476Z"
}
]
}

查看文件

@@ -0,0 +1,50 @@
[
{
"system_id": "gitea",
"display_name": "Gitea",
"total": 37,
"verified_real": 0,
"verified_synthetic": 0,
"blocked": 1,
"manual": 36,
"browser_required": 0,
"browser_present": 0,
"latest_update": "2026-03-03T04:57:57.697708Z"
},
{
"system_id": "nextjs",
"display_name": "Next.js",
"total": 26,
"verified_real": 0,
"verified_synthetic": 0,
"blocked": 0,
"manual": 26,
"browser_required": 0,
"browser_present": 0,
"latest_update": "2026-03-13T22:14:13.665535Z"
},
{
"system_id": "undici",
"display_name": "Undici",
"total": 14,
"verified_real": 0,
"verified_synthetic": 0,
"blocked": 0,
"manual": 14,
"browser_required": 0,
"browser_present": 0,
"latest_update": "2026-03-14T09:19:54.772219Z"
},
{
"system_id": "vite",
"display_name": "Vite",
"total": 12,
"verified_real": 0,
"verified_synthetic": 0,
"blocked": 0,
"manual": 12,
"browser_required": 0,
"browser_present": 0,
"latest_update": "2026-02-04T04:37:24.129476Z"
}
]

查看文件

@@ -1,6 +1,6 @@
# 最新同步摘要
- 渲染时间: `2026-03-17T06:35:58+00:00`
- 渲染时间: `2026-03-17T07:06:50+00:00`
- 系统数量: `62`
- Advisory 数量: `89`
- 重点 Markdown 数量: `89`

查看文件

@@ -1,5 +1,5 @@
{
"generated_at": "2026-03-17T06:35:58+00:00",
"generated_at": "2026-03-17T07:06:50+00:00",
"system_count": 62,
"advisory_count": 89,
"markdown_count": 89,

查看文件

@@ -51,9 +51,9 @@
"triage_reasons": [],
"verification_status": "blocked-artifact",
"verification_mode": "real",
"last_verified_at": "2026-03-17T06:33:30+00:00",
"last_run_id": "gitea-gitea--CVE-2025-68939-20260317063330",
"evidence_bundle": "/Users/x/websafe/06-case-studies/generated-runs/gitea-gitea--CVE-2025-68939-20260317063330",
"last_verified_at": "2026-03-17T07:02:56+00:00",
"last_run_id": "gitea-livecheck-20260316",
"evidence_bundle": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316",
"browser_evidence": {
"required": false,
"present": false,

查看文件

@@ -0,0 +1,95 @@
{
"run_id": "gitea-livecheck-20260316",
"system_id": "gitea",
"advisory_id": "gitea--CVE-2025-68939",
"repro_profile_id": "file-upload-generic",
"verification_status": "blocked-artifact",
"verification_mode": "real",
"artifact_mode": "official-image",
"target_env": "local-docker",
"compose_services": [
"app"
],
"baseline_refs": [],
"attack_steps": [],
"browser_refs": [],
"browser_evidence": {
"required": true,
"present": false,
"refs": [],
"baseline_refs": [],
"proof_refs": [],
"baseline_title": null,
"proof_title": null
},
"container_log_refs": [],
"request_log_refs": [],
"compose_refs": [
"/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316/compose/compose.yaml"
],
"timeline": [
{
"at": "2026-03-17T07:02:55+00:00",
"step": "select-advisory",
"status": "completed",
"detail": "gitea--CVE-2025-68939"
},
{
"at": "2026-03-17T07:02:55+00:00",
"step": "resolve-repro-profile",
"status": "completed",
"detail": "file-upload-generic"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "provision-compose-environment",
"status": "blocked-artifact",
"detail": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "baseline-snapshot",
"status": "skipped",
"detail": "no baseline urls or provisioning blocked"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "browser-replay-before-attack",
"status": "skipped",
"detail": "baseline browser capture unavailable"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "controlled-attack-chain",
"status": "skipped",
"detail": "provisioning blocked"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "browser-replay-after-attack",
"status": "skipped",
"detail": "proof browser capture unavailable"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "collect-logs-and-evidence",
"status": "skipped",
"detail": "container_logs=0"
},
{
"at": "2026-03-17T07:02:56+00:00",
"step": "update-registry-and-reports",
"status": "completed",
"detail": "gitea-livecheck-20260316"
}
],
"started_at": "2026-03-17T07:02:55+00:00",
"finished_at": "2026-03-17T07:02:56+00:00",
"blocked_reason": "unable to get image 'gitea/gitea:1.22.6': Cannot connect to the Docker daemon at unix:///Users/x/.docker/run/docker.sock. Is the docker daemon running?",
"report_refs": {
"bundle_dir": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316",
"report_md": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316/report.md",
"report_html": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316/report.html",
"timeline": "/Users/x/websafe/06-case-studies/generated-runs/gitea-livecheck-20260316/timeline.mmd"
}
}