Repository navigation
Link URLs in the Console - #942
Merged
Merged
Conversation
A shared linkify filter escapes text and wraps each https:// URL in a link: pull requests, causes, Tickets, references, idle Passes and the Command details facts. Issue subjects link to their issue. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The conversation renderer shares the linkify core, so URLs in Command and Session logs are links too. A closing parenthesis the URL opened stays in the link. Security finding links use the same filter, and a Row's issue address is an Option set only for https URLs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Role and tool-name headings now use the same escaping as the linked log text and the templates, instead of a second hand-written escaper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #918
Summary
URLs that appear in Console text are now links. A new
linkifyfilter escapes the text and turns eachhttps://URL in it into a link. The Inbox, History and Security pages, Command details, and Command and Session logs all use it.The issue's example row, after this change:
JacobStephens2/thirdshift#812links to the issue.https://github.com/.../pull/834is a link.Only
https://URLs become links, as Security findings already did, sojavascript:and other schemes stay plain text.Evidence
urls_in_inbox_and_peek_text_are_links_and_other_text_stays_escapedfailed againstmain. The PR, cause, subject, Ticket and Command details text were plain.After: it passes:
keeps_a_closing_paren_that_belongs_to_the_urlfailed on the first commit:…Rust_(programming_language\">…</a>).After: it passes.logs_inventory_matches_cli_and_reads_current_layout_onlynow asserts that the Command log and the Session log each contain an<a href>for their URL.cargo test --locked: exit 0 (55 test binaries, 0 failed). That run was on c48b664.cargo test --locked --test console: 40 passedcargo test --bin thirdshift console::: 9 passedcargo clippy --all-targets: cleannode --test tests/logs.test.cjs: 4 passednpm test): 35/35 on the first commit. On a later run one timing-sensitive heartbeat test timed out while the machine's load average was about 20 on 4 cores.node --test tests/inbox.test.cjsthen passed 22/22.Merge Danger
Door: two-way
This only changes how text is rendered. No stored data or CLI output changes.
Blast Radius: markup
.subjectspan now wraps an<a>. Browser tests that find rows by.subjecttext still pass.<) instead of<. Browsers display both the same.Unaddressed findings
Standards
subject()andissue_url()take the sameOption<&Issue>(src/logs/status/inbox.rs,subject_url: issue_url(facts.issue.as_ref())). Declined.subject()is also used for Landing references, which need no URL.subject()would widen three call sites to save one helper.inbox_over_http_matches_status_and_embeds_only_local_resourcesassumes every subject is linked (tests/console.rs,.split("</a></span>")). Declined.expectedalready requires every fixture Command to have an issue, so each subject is linked.docs/code-navigation.mdrow for Inbox and peek rendering. Declined. The index has no row for Inbox or peek rendering today. The Logs row already namessrc/console/conversation.rs, the caller of the new module. The reviewer found no change required.Spec
Warning:line, issue titles, branch names in Command details, and Console log events. Declined.Warning:line is fixed text fromsrc/logs/status/inbox.rs("logs.waiting_line_minutes must be less than …") and holds no URL.https://URLs.Security
hrefgo through askama's HTML escaper, onlyhttps://URLs become links, and the Console already sendsReferrer-Policy: same-origin.Security review outcome
No unaddressed introduced findings.
Review coverage
Both reviewers read every changed file. There are no generated-output exclusions and no unread changed files.
🤖 Generated with Claude Code
Built with claude · claude-opus-5-5 · medium