Links a transcript wrote open from the chat page, and read as links #87
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/claude-code-query!87
Loading…
Reference in a new issue
No description provided.
Delete branch "cc-chat"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Slice 08-links-that-open (effort cc-chat)
Goal (the use). I ask Gladys for a link to something she named and reach it in one click from
the chat page. No copying an id, no retyping a URL.
Fit test. A real conversation where every URL opens, a link reads as a link before it is
clicked, the conversation is still there when I come back, and nothing quoted from somewhere else
became a link to somewhere I did not expect.
Fit passed on this repository's half, on Michal's read of a real session: "Links work in both
cases correctly" — his own message and the agent's reply. The card settles both halves, and
Michal moved the other half — the instructions that make Gladys write a link instead of an id —
into its own session on 2026-10-13. The card is unchanged; that decision is recorded in the
tracker's fit log, and the work rides the effort map as
gladys-writes-links.What ships
www.host and an email address typed out in prose become links. CommonMark core doesnot autolink, and only the tables extension was loaded;
AutolinkExtensionnow runs beside it.No id pattern is recognised anywhere — CC-D4 stands.
rel="noopener noreferrer", so thecomposer and the follow survive. A
mailto:link opens the mail program and gets no tab.cc-body adraws the underline and keeps the colour of the words aroundit, so no text changes contrast. A host reset takes the browser's underline away: measured on
the
proceduresdashboard, where the same anchor computesunderlinewith this stylesheet andnonewithout it.<a href="">, whichreads as a link and opens the page it sits on. This also covers a written
[x](javascript:...), and typedftp://,file:///andjavascript://.where it stood, and the reference took that link as a child, so the page carried an anchor
inside an anchor — found by the security review, reproduced by a red test, fixed by
appendWithoutNesting.ui.test: 303 tests, exit 0, no warnings.__.checkFormatclean.Review
Five skills — style, testing, security, scala3, composition. No critical findings. Report:
project-management/efforts/cc-chat/slices/08-links-that-open/review-slice-2026-10-13.md.The security review verified the invariants against the real jars rather than assuming: no
destination can run code (explicit or autolinked), the allow-list holds, the autolink extension
emits only plain
Linknodes so nothing evades the renderer, the image path cannot smuggle ascheme past it, and the attribute provider only ever sees an already-sanitised
href. It alsorecorded two things deliberately: a destination that writes no scheme (
/matters/x,//host/x)is not scheme-checked and is left as written — now said plainly in the doc comment and pinned by
a test; and autolinking makes previously inert untrusted text one-click navigable, which is this
slice's deliberate trade, with tabnabbing and referrer leakage closed by
rel.Declined, with reasons
would also rewrite
ImageAsReference, which this slice has no reason to touch, to save twolines.
test, and building that for one rule is disproportionate. It was measured by hand in a browser
instead, by reading the computed style with the stylesheet enabled and disabled.
Flushed to the effort map
gladys-writes-linksas the next candidate slice, carrying what this slice measured: whichdashboard addresses are real pages (
/matters/<id>and/email-refs/<id>are;/inbox/<id>isnot), that a root-relative link needs no origin, and that the dashboard chat and Telegram share
one composed prompt.
tool output;
ContextItem.Viewing(url)reflow; awww.host autolinking tohttp://.One thing to know before this helps Gladys
Live Gladys runs 0.6.1, which has none of this: her markdown links look like text and open in
place. A release carries it to her.
0.7.0-SNAPSHOTexists only in~/.ivy2/local, and theworktree
/home/mph/ops/procedures-cc-chat-links(branchcc-chat-links) already takes it.Lessons
One entry, triaged with Michal and promoted: a fit read on
ui.demoproves markup and behaviour,never appearance inside a consumer's page →
CLAUDE.md.🤖 Generated with Claude Code
https://claude.ai/code/session_01XTrxcxBQiNjXh79dN8Sh5x