[spark-compete] enhance: Docs hub external links eat your reading position - #156
4gjnbzb4zf-sudo wants to merge 1 commit into
Conversation
Docs hub external links eat your reading positionI was on /docs trying to plan an install. The page told me "Ask an AI coding assistant like Codex, Claude Code..." with each name as a link. I clicked "Codex" to scan the docs, the page navigated away, and I lost my scroll position in the install ladder. Same when I checked the suggested local model "Gemma 4" — gone. To come back I had to hit back twice and re-scroll. BugSix external links in
The docs hub is the only public reference for install / providers / Railway / safety. Losing reading position breaks the documentation read-along. FixAdd Repro
Sister precedent
|
TL;DRSix external links in docs/index.html (feedback issues, Codex/Claude Code/HuggingFace model docs) navigate in the same tab and omit rel=noopener noreferrer; visitors lose their reading position in the docs hub and the opened cross-origin pages get unnecessary opener handles. After the fix: Cross-origin links open in a new tab with rel=noopener noreferrer so the docs reading position is preserved and the navigated-to page has no window.opener handle back to the docs origin. What changesAdd target=_blank and rel=noopener noreferrer to six existing external anchors in docs/index.html (no new links, no markup added, only attribute additions). Files touched: Why this mattersagent.sparkswarm.ai/docs is the public reference for installing, configuring providers, hosting on Railway/VPS, and reading the safety story. A first-time visitor today scrolls into the install section, taps 'Codex' to read about the AI assistant they should use, and the docs tab is replaced — they lose their place in the install ladder. Adding target=_blank + rel=noopener on the six cross-origin links preserves docs reading flow and routes external curiosity into a sibling tab, matching how the rest of the marketing site treats external destinations. Reproduction (operator-side)
VerificationReview |
{
"schema": "spark-compete-hotfix-v1",
"event": "spark-compete-first-event",
"submission_mode": "public_repo_pr",
"submission_target_url": "#156",
"team": {
"name": "SparkThisUp",
"members": [
"ValHallaBuilder",
"Baz707",
"DanFireDash"
],
"github_accounts": [
"4gjnbzb4zf-sudo"
],
"llm_device_holder": "ValHallaBuilder",
"device_holder_github": "4gjnbzb4zf-sudo"
},
"target_repo": {
"id": "vibeforge1111/Spark-Agent-Site",
"source": "https://github.com/vibeforge1111/Spark-Agent-Site",
"owner_surface": "agent_site_docs_external_links"
},
"issue": {
"type": "usage_friction",
"severity": "low",
"title": "Six external links in docs/index",
"actual_behavior": "All six docs/index.html cross-origin anchors lack target=_blank and rel=noopener noreferrer; the docs surface treats external destinations the same as internal hash links.",
"expected_behavior": "Cross-origin links open in a new tab with rel=noopener noreferrer so the docs reading position is preserved and the navigated-to page has no window.opener handle back to the docs origin.",
"repro_steps": [
"1. Open https://agent.sparkswarm.ai/docs.",
"2. Click 'Share feedback' in the top banner, or one of the AI-assistant suggestions ('Codex', 'Claude Code'), or one of the local-model links ('Gemma 4', 'Qwen 3.6 27B').",
"3. Each replaces the docs tab in place; the operator must hit back to return to where they were reading."
],
"affected_workflow": "Operator-facing flow in agent-site."
},
"evidence": {
"safe_links_only": true,
"before_after_proof": "Before: All six docs/index.html cross-origin anchors lack target=_blank and rel=noopener noreferrer; the docs surface treats external destinations the same as internal hash links.\nAfter: Cross-origin links open in a new tab with rel=noopener noreferrer so the docs reading position is preserved and the navigated-to page has no window.opener handle back to the docs origin.",
"links": [
"https://github.com//pull/156",
"https://github.com//pull/156/files"
],
"forbidden": [
"raw secrets",
"raw logs",
"raw conversations",
"private chat IDs",
"session tokens",
"cookies",
"private repo maps",
"raw memory dumps",
"full compile JSON",
"scoring details"
]
},
"proposed_fix": {
"approach": "Add target=_blank and rel=noopener noreferrer to six existing external anchors in docs/index.html (no new links, no markup added, only attribute additions).",
"files_expected": [
"docs/index.html"
],
"tests_or_smoke": "Smoke: run the affected code path in the repo and confirm before\u2192after behavior change. Build-clean:
python3 -m py_compile docs/index.htmlornpx tsc --noEmit --skipLibCheck docs/index.html."},
"pr": {
"url": "#156",
"branch": "spark-compete/docs-index-external-link-safety",
"title_prefix": "[spark-compete]",
"author_github": "4gjnbzb4zf-sudo",
"body_must_include": [
"packet",
"team",
"pr_author",
"repo",
"actual_behavior",
"expected_behavior",
"repro_steps",
"before_after_proof",
"tests_or_smoke",
"duplicate_notes",
"risk_notes",
"review_claim"
]
},
"review_claim": {
"impact_claim": "low",
"evidence_types": [
"redacted_terminal_excerpt"
],
"duplicate_notes": "Searched open PRs and issues for the same defect; this fix is targeted to docs/index.html.",
"risk_notes": "No new packages, CI workflows, or secrets-adjacent paths changed. Diff is bounded to docs/index.html. Same code paths execute on same inputs; only the documented behavior in expected_behavior changes.",
"review_state_requested": "pr_review"
}
}