<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: NAN</title>
    <description>The latest articles on DEV Community by NAN (@anuis258).</description>
    <link>https://dev.to/anuis258</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3944314%2Fe1deb22c-5bd5-4d14-ad58-7bda2af889f2.png</url>
      <title>DEV Community: NAN</title>
      <link>https://dev.to/anuis258</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anuis258"/>
    <language>en</language>
    <item>
      <title>The settings that produced your output are not in your output</title>
      <dc:creator>NAN</dc:creator>
      <pubDate>Wed, 09 Sep 2026 04:39:43 +0000</pubDate>
      <link>https://dev.to/anuis258/the-settings-that-produced-your-output-are-not-in-your-output-13gk</link>
      <guid>https://dev.to/anuis258/the-settings-that-produced-your-output-are-not-in-your-output-13gk</guid>
      <description>&lt;p&gt;Somebody drops this in a channel:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Gemini handles the edge case fine, look: &lt;em&gt;[screenshot of an AI Studio response]&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three weeks later you try the same thing and get something else. Who was wrong?&lt;/p&gt;

&lt;p&gt;Neither of you, probably. You ran a different experiment and had no way to know, because the thing that was shared was the output, and the output does not carry the conditions that produced it.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Studio is not a chat app
&lt;/h2&gt;

&lt;p&gt;That framing matters. ChatGPT and Claude are products; you have a conversation and the conversation is the artifact.&lt;/p&gt;

&lt;p&gt;AI Studio is a bench. You are tuning a prompt, and the responses are &lt;em&gt;samples&lt;/em&gt;, not the point. The thing you are actually building lives around the transcript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;system instruction&lt;/strong&gt;, in its own collapsible panel above&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;model and version&lt;/strong&gt;, in a dropdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;temperature, top-p, top-k&lt;/strong&gt;, output length, safety settings — in the configuration panel on the right&lt;/li&gt;
&lt;li&gt;optionally a &lt;strong&gt;structured output schema&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that is in the message stream. The transcript is one variable in an experiment whose other variables sit in surrounding UI.&lt;/p&gt;

&lt;p&gt;Copy the transcript and you have copied the readout of a meter without noting what you were measuring.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frzcsn46qtyypbuj01wep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frzcsn46qtyypbuj01wep.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The reproducibility bill
&lt;/h2&gt;

&lt;p&gt;For a colleague to actually reproduce a result, they need every one of these:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Where it lives&lt;/th&gt;
&lt;th&gt;Survives a copy-paste?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The turns&lt;/td&gt;
&lt;td&gt;message stream&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System instruction&lt;/td&gt;
&lt;td&gt;collapsible panel&lt;/td&gt;
&lt;td&gt;only if expanded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model + version&lt;/td&gt;
&lt;td&gt;dropdown&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Temperature / top-p&lt;/td&gt;
&lt;td&gt;right-hand config&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output schema&lt;/td&gt;
&lt;td&gt;config&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seed&lt;/td&gt;
&lt;td&gt;not exposed&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four of six are furniture, not content. And temperature above zero means even a perfect replication gives a different sample — which is fine, as long as everyone knows that is what happened.&lt;/p&gt;

&lt;p&gt;The failure mode is not dramatic. Nobody notices the conditions are missing, because the output looks complete. It reads like a finding. It is a single draw from a distribution whose parameters nobody wrote down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do about it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Put the parameters in the prompt file, not in your memory.&lt;/strong&gt; If you are iterating seriously, keep a text file next to the work: model, version, temperature, top-p, and the system instruction verbatim. It is thirty seconds and it is the difference between an experiment and an anecdote.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quote the system instruction when you share a result.&lt;/strong&gt; It is the single highest-value piece of context. A response without it is uninterpretable — you cannot tell whether the model was clever or whether the prompt did the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Say the temperature out loud.&lt;/strong&gt; "Temperature 0.2, three of three runs agreed" is a claim. A screenshot is a vibe. If you ran it once at 1.0, say that too; it is still useful, just differently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask for structured output as a code block.&lt;/strong&gt; If you want JSON to survive into a document as formatted JSON, it has to be &lt;em&gt;rendered&lt;/em&gt; as a code block. Ask for it inside fences. Prose-shaped JSON exports as prose, because there is no block for anything to preserve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never share a screenshot as evidence.&lt;/strong&gt; It captures the fewest variables of any method available and cannot be searched, quoted or diffed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build an export tool for this, so read the next part with that in mind.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/chat-exporter-for-ai-stud/fndepoleiimljpfiojbfnjkaonpehdjj" rel="noopener noreferrer"&gt;Chat Exporter for AI Studio&lt;/a&gt; writes a session to Word, PDF, Google Docs, Notion, Markdown or JSON. It captures the system instruction alongside the turns, keeps every user turn and model response labelled and in order, and preserves code blocks and structured output as blocks rather than wrapped text. Free tier, paid for unlimited.&lt;/p&gt;

&lt;p&gt;Here is the honest part, and it is the reason this article is not a pitch: &lt;strong&gt;it does not capture the model parameters.&lt;/strong&gt; Temperature, top-p and the rest live in the configuration panel, which is not part of the conversation, so they are not in the exported document. If reproducibility is what you need, you still have to write those down yourself.&lt;/p&gt;

&lt;p&gt;Same for the system instruction if its panel is collapsed — it has to be expanded to be on the page at all. And the export buttons only appear once there is at least one response, since they attach per message.&lt;/p&gt;

&lt;p&gt;I would rather say that plainly than have you find out from a document that was missing half the experiment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The general shape
&lt;/h2&gt;

&lt;p&gt;This is not really about AI Studio. Any tool where &lt;strong&gt;configuration is separate from output&lt;/strong&gt; has the same hole, and prompt benches are the current example.&lt;/p&gt;

&lt;p&gt;The question worth asking of anything you export: &lt;em&gt;could someone reproduce this from what I just saved?&lt;/em&gt; If the answer is no, the missing pieces are almost always the settings — and settings are exactly what interfaces put in side panels, where no export reaches.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you run prompt experiments seriously, how do you version the config? I keep a plain text file per prompt, which works and is clearly not the right answer.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A Claude conversation is not a transcript any more</title>
      <dc:creator>NAN</dc:creator>
      <pubDate>Wed, 09 Sep 2026 04:34:22 +0000</pubDate>
      <link>https://dev.to/anuis258/a-claude-conversation-is-not-a-transcript-any-more-3ddg</link>
      <guid>https://dev.to/anuis258/a-claude-conversation-is-not-a-transcript-any-more-3ddg</guid>
      <description>&lt;p&gt;Export a Claude session that used Artifacts and read the result. It goes something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; Can you write the parser?&lt;br&gt;
&lt;strong&gt;Claude:&lt;/strong&gt; Here's a parser that handles the nested case.&lt;br&gt;
&lt;strong&gt;Me:&lt;/strong&gt; It breaks on empty input.&lt;br&gt;
&lt;strong&gt;Claude:&lt;/strong&gt; Good catch — I've added a guard clause.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjmx4qbhejon1qtbqq2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjmx4qbhejon1qtbqq2f.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Four turns, no parser. It reads like the commentary track of a film with the film missing.&lt;/p&gt;

&lt;p&gt;The code was never in the message stream. It was in the Artifact panel the whole time, and the panel is a different document.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two documents, one session
&lt;/h2&gt;

&lt;p&gt;A plain chat log is one thing: an append-only list of turns. Whatever happened is in the list, in order. That model held for years and every export tool assumed it.&lt;/p&gt;

&lt;p&gt;Artifacts break the assumption. You now have:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The conversation&lt;/strong&gt; — append-only, chronological, and increasingly &lt;em&gt;about&lt;/em&gt; something rather than containing it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The artifact&lt;/strong&gt; — a single document, revised in place. Turn three does not append to it; turn three &lt;em&gt;replaces&lt;/em&gt; it. What you see is the current state, not the accumulation.&lt;/p&gt;

&lt;p&gt;The relationship between them is not containment, it is reference. The chat discusses the artifact the way a code review discusses a diff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this makes "export the conversation" ambiguous
&lt;/h2&gt;

&lt;p&gt;There are at least three defensible things you could mean, and they produce genuinely different documents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The transcript only.&lt;/strong&gt; Faithful to the message stream. Useless on its own if the substance lived in the panel — that is the commentary-track output above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The final artifact only.&lt;/strong&gt; The thing you actually built. Loses every constraint you discovered along the way, which is often the expensive knowledge. Six months later "why is there a guard clause here" has no answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Both, stitched.&lt;/strong&gt; The transcript with the artifact's final state attached, or interleaved at the point it was created. Most useful, most work, and requires deciding where the document goes in a stream that never contained it.&lt;/p&gt;

&lt;p&gt;There is a fourth, mostly hypothetical: transcript plus every artifact revision. That would be the complete record. It is also not available to anything running on the page, because superseded versions are application state, not DOM — the same reason you cannot select text that has scrolled out of a virtualised list.&lt;/p&gt;

&lt;h2&gt;
  
  
  The panel has to be open
&lt;/h2&gt;

&lt;p&gt;A practical consequence that catches people: if the Artifact panel is collapsed when you export, the artifact is not on the page to capture.&lt;/p&gt;

&lt;p&gt;This is not a tool being lazy. Panels that mount their contents on open are the normal pattern, and an extension reads the rendered document, same as your clipboard does. Closed panel, no nodes, nothing to read.&lt;/p&gt;

&lt;p&gt;Same story for extended thinking. Claude folds the reasoning away once the answer lands. Expand it first or it is not in the export.&lt;/p&gt;

&lt;p&gt;The habit that fixes both: &lt;strong&gt;before you export, open everything you want to keep.&lt;/strong&gt; Artifact panel, thinking block, any collapsed section. It takes five seconds and it is the difference between a record and a commentary track.&lt;/p&gt;

&lt;h2&gt;
  
  
  Long code is a separate problem
&lt;/h2&gt;

&lt;p&gt;Claude will happily return several hundred lines in one block, which surfaces a formatting question rather than an extraction one.&lt;/p&gt;

&lt;p&gt;In Word, long lines wrap rather than truncate. People see a line break mid-statement and conclude the export cut their code off. It did not — the content is there, the renderer is wrapping it. It is still miserable to read.&lt;/p&gt;

&lt;p&gt;If the code matters more than the prose around it, export to Markdown and open it somewhere that does horizontal scrolling properly. A word processor is a poor code viewer and no export setting changes that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build one of these tools, so weigh this accordingly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/chat-exporter-for-claude/hicmkebicnokjcbblmeblimkocnnkiio" rel="noopener noreferrer"&gt;Chat Exporter for Claude&lt;/a&gt; writes a conversation to Word, PDF, Google Docs, Notion, Markdown or JSON. Long code blocks come out whole with indentation and language intact, rendered maths becomes a real equation object rather than a picture, extended thinking stays a separate marked block, and nested lists and tables map to their proper equivalents. Free tier, paid for unlimited.&lt;/p&gt;

&lt;p&gt;It reads what is rendered, which is the honest limit. A collapsed Artifact panel is not in the export because it is not on the page. Superseded artifact versions are gone for the same reason. And long code in a &lt;code&gt;.docx&lt;/code&gt; still wraps, because that is Word.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shift underneath
&lt;/h2&gt;

&lt;p&gt;We are past the point where a chat log is the record of what happened. The interesting output increasingly lives in a side panel, a canvas, an artifact — a document with its own lifecycle, referenced by the conversation rather than contained in it.&lt;/p&gt;

&lt;p&gt;Every tool built on "a conversation is a list of messages" is going to keep quietly dropping the part you cared about. Worth checking what yours captured before you rely on it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Has anyone found a workflow for keeping artifact history rather than just its final state? Copying to a repo at each step is the only thing I have, and it is manual.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Where does the answer end and the interface begin?</title>
      <dc:creator>NAN</dc:creator>
      <pubDate>Wed, 09 Sep 2026 04:28:18 +0000</pubDate>
      <link>https://dev.to/anuis258/where-does-the-answer-end-and-the-interface-begin-1l47</link>
      <guid>https://dev.to/anuis258/where-does-the-answer-end-and-the-interface-begin-1l47</guid>
      <description>&lt;p&gt;Paste a Microsoft Copilot answer into a document and read it back:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The endpoint returns JSON2 and supports cursor pagination3. Rate limits apply per key1.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those digits are citation markers. On screen they are small superscript chips you click to see a source. In your document they are noise welded to the last word of each clause, and you get to pick them out by hand.&lt;/p&gt;

&lt;p&gt;The obvious reading is "the clipboard mangled it". The more useful reading is that nobody ever decided what counts as the message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv13325jq0sim0srrmww4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv13325jq0sim0srrmww4.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A chat reply is not one thing
&lt;/h2&gt;

&lt;p&gt;Open devtools on any assistant reply. The container holding "the answer" also holds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the prose&lt;/li&gt;
&lt;li&gt;inline citation references, inside the sentence flow&lt;/li&gt;
&lt;li&gt;a sources list, usually collapsed&lt;/li&gt;
&lt;li&gt;copy / thumbs-up / regenerate buttons&lt;/li&gt;
&lt;li&gt;suggested follow-up chips&lt;/li&gt;
&lt;li&gt;sometimes a model badge or timestamp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it lives in one subtree. There is no attribute that says &lt;em&gt;this part is the answer and that part is furniture&lt;/em&gt;. The distinction exists in your head and in the CSS, nowhere else.&lt;/p&gt;

&lt;p&gt;So when anything walks that subtree — the clipboard, an extension, a screen reader — it has to guess. And the guesses differ, which is why the same answer comes out differently depending on how you took it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why citation markers are the hard case
&lt;/h2&gt;

&lt;p&gt;Most interface elements sit &lt;em&gt;around&lt;/em&gt; the text. Buttons come after. Chips come below. A naive "take the paragraph" rule handles them fine.&lt;/p&gt;

&lt;p&gt;Citation markers sit &lt;em&gt;inside&lt;/em&gt; it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
  The endpoint returns JSON&lt;span class="nt"&gt;&amp;lt;sup&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"citation"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"…"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/sup&amp;gt;&lt;/span&gt;
  and supports cursor pagination&lt;span class="nt"&gt;&amp;lt;sup&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"citation"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"…"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;3&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/sup&amp;gt;&lt;/span&gt;.
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is one paragraph. The reference is a child of the sentence. Take the paragraph's text content and the digits come with it, because as far as the DOM is concerned they &lt;em&gt;are&lt;/em&gt; the sentence.&lt;/p&gt;

&lt;p&gt;This is also why they survive a paste that drops everything else. They are not decoration attached to the message; they are inline content inside a text node's neighbourhood.&lt;/p&gt;

&lt;p&gt;Perplexity has the mirror-image problem, incidentally. There, the same structure means references get flattened to bare numbers and the links are lost — you keep the marker and lose the source. With Copilot in a document you tend to keep the marker and not want it at all. Same markup, opposite complaint, depending on whether you are archiving research or drafting prose.&lt;/p&gt;

&lt;h2&gt;
  
  
  There is no correct answer, only a choice
&lt;/h2&gt;

&lt;p&gt;Three defensible positions, and which is right depends entirely on what the document is for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strip them.&lt;/strong&gt; You are writing prose. The references were never going to be clickable in a printed doc anyway, and clean text matters more. This is what most people want most of the time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep them as real footnotes.&lt;/strong&gt; You are writing something that gets reviewed or cited. Convert each marker into a proper footnote and append the sources. More faithful, more work, and the output format has to support footnotes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep them inline as links.&lt;/strong&gt; You are pasting into Notion or a wiki where a numbered link still functions. Least transformation, but only works where links are live.&lt;/p&gt;

&lt;p&gt;A tool that only does one of these will be wrong for somebody. Worth knowing which one yours picked.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rest of the furniture
&lt;/h2&gt;

&lt;p&gt;Once you start looking, the boundary question shows up everywhere in a chat export.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow-up chips&lt;/strong&gt; are the sneakiest, because they read like content. "Would you like me to compare these?" is a sentence, sits in the message container, and lands in your document as though the assistant said it. It did not — the interface offered it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copy and feedback buttons&lt;/strong&gt; usually contribute nothing to text content, so they vanish quietly. Usually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Collapsed sources&lt;/strong&gt; are absent unless expanded, which is a different failure again: the boundary was drawn correctly, but the content had not mounted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build an export tool, so read on accordingly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/chat-exporter-for-microso/inmiconkfkeicnnhljojilechleofccg" rel="noopener noreferrer"&gt;Chat Exporter for Copilot&lt;/a&gt; takes the first position above: citation markers are stripped from the body so the exported text reads as prose. It writes to Word, PDF, Google Docs, Notion, Markdown or JSON, converts Copilot's KaTeX maths into a real equation object rather than an image, and keeps Markdown tables as tables. It works on both consumer Copilot and Microsoft 365 Copilot. Free tier, paid for unlimited.&lt;/p&gt;

&lt;p&gt;Two things it does not hide. Follow-up chips are part of the message container, so if you export everything they come too — there is an answers-only mode precisely because that boundary is a preference, not a fact. And exporting mid-stream catches the pre-render state, so maths that has not been typeset yet exports as source.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Copy operations do not know what a message is.&lt;/strong&gt; They know what a DOM subtree is. Everything you think of as "the answer" is a convention layered on top of markup that was designed for display, not extraction.&lt;/p&gt;

&lt;p&gt;When an export brings along something you did not want, it is rarely a parsing failure. It is usually a boundary drawn in a different place than the one in your head.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you export chats regularly: strip citations, footnote them, or keep them inline? I lean strip, but I suspect that says more about what I write than about what is right.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>writing</category>
      <category>productivity</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Getting maths out of ChatGPT and into Word without it turning into backslashes</title>
      <dc:creator>NAN</dc:creator>
      <pubDate>Wed, 09 Sep 2026 04:04:47 +0000</pubDate>
      <link>https://dev.to/anuis258/getting-maths-out-of-chatgpt-and-into-word-without-it-turning-into-backslashes-3hf5</link>
      <guid>https://dev.to/anuis258/getting-maths-out-of-chatgpt-and-into-word-without-it-turning-into-backslashes-3hf5</guid>
      <description>&lt;p&gt;Ask ChatGPT to derive something. You get a clean equation on screen. Copy it into a document and you get one of three outcomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;-b &lt;span class="k"&gt;\pm&lt;/span&gt; &lt;span class="k"&gt;\sqrt&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;b&lt;span class="p"&gt;^&lt;/span&gt;2-4ac&lt;span class="p"&gt;}}{&lt;/span&gt;2a&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…or a jumble of characters that looks like the equation went through a blender…&lt;/p&gt;

&lt;p&gt;…or, occasionally, a picture.&lt;/p&gt;

&lt;p&gt;None of these is what you wanted, and which one you get is close to arbitrary. The reason is that "the equation on screen" is not one thing. It is several representations layered on top of each other, and copying picks one more or less by accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is actually sitting there
&lt;/h2&gt;

&lt;p&gt;The model emits LaTeX. A renderer — KaTeX and MathJax are the common ones — turns that string into something a browser can paint.&lt;/p&gt;

&lt;p&gt;The important part is what the renderer leaves behind. KaTeX output looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"katex"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"katex-mathml"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;math&amp;gt;&amp;lt;semantics&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;mfrac&amp;gt;&lt;/span&gt;…&lt;span class="nt"&gt;&amp;lt;/mfrac&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;annotation&lt;/span&gt; &lt;span class="na"&gt;encoding=&lt;/span&gt;&lt;span class="s"&gt;"application/x-tex"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;\frac{a}{b}&lt;span class="nt"&gt;&amp;lt;/annotation&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/semantics&amp;gt;&amp;lt;/math&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"katex-html"&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- dozens of absolutely-positioned spans --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpr0uxw9osfr1ja75iov6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpr0uxw9osfr1ja75iov6.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three representations, all present at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MathML&lt;/strong&gt; — semantic. &lt;code&gt;&amp;lt;mfrac&amp;gt;&lt;/code&gt; means "this is a fraction". Machines understand it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The original LaTeX&lt;/strong&gt;, tucked inside &lt;code&gt;&amp;lt;annotation&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual spans&lt;/strong&gt; — the thing you actually see, built from positioned glyphs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That third one is marked &lt;code&gt;aria-hidden="true"&lt;/code&gt; because it is meaningless to a screen reader. It is a drawing.&lt;/p&gt;

&lt;p&gt;Now the three bad outcomes make sense. Grab the visual layer and you get the blender output — those positioned glyphs in document order, which is not reading order. Grab the annotation and you get raw LaTeX. Only the MathML carries the structure, and it is invisible, so nothing grabs it by accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Word cannot just take MathML
&lt;/h2&gt;

&lt;p&gt;Word does not store equations as MathML. It uses &lt;strong&gt;OMML&lt;/strong&gt; — Office Math Markup Language, its own XML dialect living inside the &lt;code&gt;.docx&lt;/code&gt; package.&lt;/p&gt;

&lt;p&gt;So a faithful conversion is a chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LaTeX  →  MathML  →  OMML  →  equation object in Word
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Word can do the middle step itself when you paste MathML, though which paste path triggers it is inconsistent across versions and platforms. Doing the conversion before the document is written is more predictable.&lt;/p&gt;

&lt;p&gt;Google Docs is a separate problem again: its equation support is thinner, so the realistic target there is a rendered image or plain text, not an editable object.&lt;/p&gt;

&lt;p&gt;That difference is worth knowing before you pick a destination. If you need to &lt;em&gt;edit&lt;/em&gt; the maths later, Word is the format that can hold it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The streaming trap
&lt;/h2&gt;

&lt;p&gt;There is a timing failure that catches people and looks like a tool bug.&lt;/p&gt;

&lt;p&gt;ChatGPT streams tokens. The LaTeX source appears in the DOM first, and the renderer runs a beat later. Copy during that window and you copy the source, because the rendered form does not exist yet.&lt;/p&gt;

&lt;p&gt;This is why "it exported as backslashes that one time" is usually not random. Let the answer finish rendering, then take it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each route actually gives you
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ctrl+C into Word.&lt;/strong&gt; Unpredictable. Depends on what your selection covered and which clipboard flavour Word asked for. Sometimes fine, often not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copy the LaTeX deliberately.&lt;/strong&gt; If your destination speaks LaTeX — Obsidian, Notion, a repo, Overleaf — this is the &lt;em&gt;best&lt;/em&gt; outcome, not a failure. Many renderers expose a copy-as-LaTeX affordance for exactly this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshot.&lt;/strong&gt; Always works, always dead. Fine for a slide, useless in anything you will edit or search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A converter that walks the chain.&lt;/strong&gt; Reads the MathML that is already in the page and writes OMML into the &lt;code&gt;.docx&lt;/code&gt; directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I wrote one of those, so weigh this accordingly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/chat-exporter-for-chatgpt/dpkjafcpblcdbpnajlnjakmhhabcickg" rel="noopener noreferrer"&gt;Chat Exporter for ChatGPT&lt;/a&gt; exports a conversation to Word, PDF, Google Docs, Notion, Markdown or JSON. The maths path is the LaTeX → MathML → OMML chain above, so equations land in Word as real equation objects you can click into, rather than images or source strings. Code blocks keep their language label, and Markdown tables come out as actual tables. Free tier, paid for unlimited.&lt;/p&gt;

&lt;p&gt;Its limits follow from the same mechanics. Export mid-stream and you get the pre-render state, same as copying mid-stream. Google Docs still cannot hold an editable equation, because that is a Docs constraint and no extension changes it. And images generated inside ChatGPT sit on short-lived URLs — on an old conversation those may already have expired at OpenAI's end, in which case there is nothing left to fetch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule worth remembering
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rendered maths is a drawing next to a description.&lt;/strong&gt; Copy tends to take the drawing. Anything that produces an editable equation is reading the description instead — the MathML that was sitting there the whole time, hidden behind &lt;code&gt;aria-hidden&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When an export gives you backslashes, it read the annotation. When it gives you gibberish, it read the drawing. Neither is broken; both grabbed the wrong layer.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you work with maths-heavy notes, which destination have you settled on? I have not found anything that beats Word for editability, and I would be glad to be wrong.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Your Grok research has a shelf life, and nobody warns you about it</title>
      <dc:creator>NAN</dc:creator>
      <pubDate>Mon, 07 Sep 2026 08:15:25 +0000</pubDate>
      <link>https://dev.to/anuis258/your-grok-research-has-a-shelf-life-and-nobody-warns-you-about-it-2h2n</link>
      <guid>https://dev.to/anuis258/your-grok-research-has-a-shelf-life-and-nobody-warns-you-about-it-2h2n</guid>
      <description>&lt;p&gt;Most AI answers are built from training data. They age, but they age quietly — the model said what it said, and that text is stable.&lt;/p&gt;

&lt;p&gt;Grok is different in a way that matters if you keep notes. It reaches into live X posts and runs real-time search, so a lot of its answers are assembled from things that exist right now and may not exist next quarter.&lt;/p&gt;

&lt;p&gt;I noticed this the boring way: I went back to a thread from a few months earlier, followed three citations, and got two "post unavailable" pages and one account that had gone private.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fluzhd81ppe9yzs49hjjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fluzhd81ppe9yzs49hjjc.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What decays, and how fast
&lt;/h2&gt;

&lt;p&gt;Web link rot is well documented — studies of news and academic citations repeatedly land somewhere around a quarter of links breaking within a few years. Social posts are a harsher case than the average web page, for reasons that have nothing to do with servers going down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deletion is normal behaviour.&lt;/strong&gt; People delete posts they regret, prune old accounts, or clear timelines wholesale. On the open web, deleting a page is unusual. On social, it is routine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edits are invisible after the fact.&lt;/strong&gt; A post can change after it was cited. What Grok read and what you find later are not guaranteed to match, and there is no diff to consult.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accounts go private or get suspended.&lt;/strong&gt; The content still exists; you just cannot see it. This breaks a citation as thoroughly as deletion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visibility is account-dependent.&lt;/strong&gt; Whether a given post resolves for you can depend on who you are logged in as.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that is a failure of Grok. It is what happens when an answer is grounded in a medium where the primary sources are individually owned and freely deletable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuplidhlvrulpz4lk1ocv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuplidhlvrulpz4lk1ocv.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is worse than a normal dead link
&lt;/h2&gt;

&lt;p&gt;A dead footnote in an article is annoying. A dead citation inside an AI answer is worse, because of what surrounds it.&lt;/p&gt;

&lt;p&gt;The answer is still there, still fluent, still confident. The reasoning still reads as sound. Only the evidence underneath is gone — and prose does not visibly degrade when its sources vanish. You end up with something that looks exactly like a well-researched note and functions like an unsourced claim.&lt;/p&gt;

&lt;p&gt;If you are using these threads for anything that gets revisited — a decision log, competitive research, a piece you will write later — that gap is the whole problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What archiving actually has to capture
&lt;/h2&gt;

&lt;p&gt;Saving "the answer" is not enough. Three layers matter, and most quick methods drop at least one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The claim.&lt;/strong&gt; The prose. Every method gets this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The evidence.&lt;/strong&gt; The DeepSearch sources and the citations attached to specific statements. This is the layer that rots, so it is the layer worth capturing while it resolves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The reasoning.&lt;/strong&gt; Grok's Think mode output — the working, not just the conclusion. Six months later this is often the most useful part, because it tells you what the model considered and what it discarded. It is also the part most likely to be missing, since it collapses once the answer arrives.&lt;/p&gt;

&lt;p&gt;A screenshot gets layer one and a picture of layers two and three that you cannot follow. A copy-paste usually gets layer one and drops the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical habits
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Archive at read time, not at need time.&lt;/strong&gt; The moment you decide a thread is worth keeping is the moment its sources are most likely to still resolve. Coming back later is the failure mode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save the sources as URLs, not as numbers.&lt;/strong&gt; A citation that survives as the character "3" is not a citation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push important sources to a web archive.&lt;/strong&gt; For anything load-bearing, submit the URL to the Wayback Machine yourself rather than assuming someone else did. This is the single highest-value habit here and costs about ten seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep the reasoning.&lt;/strong&gt; Expand Think mode before you save. Future-you wants the working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Timestamp it.&lt;/strong&gt; "Grok, March" is a materially different claim from "Grok, today" when the underlying corpus is a live feed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build an export tool for this, so weigh the next paragraph accordingly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/chat-exporter-for-grok-%E2%80%94/lpdigbdioiihckladadgoclmebomdfhj" rel="noopener noreferrer"&gt;Chat Exporter for Grok&lt;/a&gt; writes a thread out to Word, PDF, Google Docs, Notion, Markdown or JSON, with DeepSearch citations still attached to the statements they support and Think mode reasoning kept as its own block instead of folded away. It is one way to do the archiving-at-read-time habit without it being a chore.&lt;/p&gt;

&lt;p&gt;It captures what a page can capture. It does not resurrect a post that was already deleted, and it cannot read an embedded X post, which renders in a cross-origin iframe. For anything you truly need to survive, the Wayback submission is the step that actually protects you, tool or no tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;An answer grounded in a live feed inherits that feed's mortality. The text stays; the evidence leaves. If a thread is worth returning to, capture the claim, the evidence and the reasoning while all three still resolve — because the one that disappears silently is the one you will want.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Curious how others handle this. Do you archive AI research threads at all, or treat them as disposable?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tooling</category>
      <category>extensions</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why Perplexity citations break the moment you paste them (and what to do about it)</title>
      <dc:creator>NAN</dc:creator>
      <pubDate>Mon, 07 Sep 2026 08:02:34 +0000</pubDate>
      <link>https://dev.to/anuis258/why-perplexity-citations-break-the-moment-you-paste-them-and-what-to-do-about-it-39cb</link>
      <guid>https://dev.to/anuis258/why-perplexity-citations-break-the-moment-you-paste-them-and-what-to-do-about-it-39cb</guid>
      <description>&lt;p&gt;A Perplexity answer is worth reading because of the little numbered chips scattered through it. Take those away and you are left with confident prose from an unnamed source — which is exactly what you get when you select an answer, hit Ctrl+C, and paste it into a document.&lt;/p&gt;

&lt;p&gt;I kept hitting this while collecting research notes, so I went and looked at what the browser is actually doing. The answer turned out to be more interesting than "copy-paste is lossy".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5epo38yit6z14o9jl6yh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5epo38yit6z14o9jl6yh.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a citation actually is on the page
&lt;/h2&gt;

&lt;p&gt;Those &lt;code&gt;[1]&lt;/code&gt; &lt;code&gt;[2]&lt;/code&gt; markers are not text. In the rendered DOM each one is roughly an anchor wrapping a styled span:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/source"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"noopener"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"citation-chip"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The number you see is a label. The value is the &lt;code&gt;href&lt;/code&gt; next to it, plus the entry it points at in the sources list further down the page.&lt;/p&gt;

&lt;p&gt;When you copy a selection, the browser puts several representations on the clipboard at once. The two that matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;text/plain&lt;/code&gt; — a flattened string. Every element becomes its text content. The anchor disappears; &lt;code&gt;1&lt;/code&gt; survives as the character "1".&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;text/html&lt;/code&gt; — a serialised fragment of the selected DOM, anchors and all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the information is not lost at copy time. It is lost at &lt;strong&gt;paste&lt;/strong&gt; time, depending on what the destination asks for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the destination decides
&lt;/h2&gt;

&lt;p&gt;Paste into a plain-text field and you get &lt;code&gt;text/plain&lt;/code&gt;. That is the whole story — the URLs were never offered.&lt;/p&gt;

&lt;p&gt;Paste into Word or Google Docs and it asks for &lt;code&gt;text/html&lt;/code&gt;, which &lt;em&gt;does&lt;/em&gt; carry the anchors. In practice you still lose them, for two reasons.&lt;/p&gt;

&lt;p&gt;First, the sources list lives outside your selection. Unless you deliberately scrolled down and included it, the chips now point at URLs while the reference list they belong to stayed behind in the tab.&lt;/p&gt;

&lt;p&gt;Second, editors rewrite what they accept. Google Docs keeps simple &lt;code&gt;&amp;lt;a href&amp;gt;&lt;/code&gt; but discards the surrounding classes, so a numbered chip collapses into a bare digit with a link buried under it. Word's HTML importer is more aggressive again. Neither is a bug exactly — they are sanitising foreign markup, which is the right instinct in general and unhelpful here.&lt;/p&gt;

&lt;p&gt;There is a third failure mode people hit with Pro Search. A multi-step search renders progressively. Select while a step is still resolving and you copy the DOM as it exists at that instant, which is a partial answer with dangling references.&lt;/p&gt;

&lt;h2&gt;
  
  
  The options, honestly assessed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Print to PDF.&lt;/strong&gt; Fastest thing that works. &lt;code&gt;Ctrl+P&lt;/code&gt; renders the whole page, sources included, and the links stay clickable in most PDF viewers. The output is a screenshot of a web page — page furniture, sidebars, awkward breaks — so it is fine for an archive and poor for anything you intend to edit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paste as HTML deliberately.&lt;/strong&gt; In Google Docs, paste normally rather than as plain text, then scroll up and copy the sources list separately. Tedious, but it costs nothing and the links survive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Markdown by hand.&lt;/strong&gt; If you already work in Obsidian or a repo, rewriting the citations as reference-style links gives you the cleanest artifact. It also takes the longest, so it only pays off for something you will reread.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A browser extension.&lt;/strong&gt; Reads the DOM before the clipboard flattens it, walks the anchors, and writes a document with the references and the source list already reconciled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build one of those extensions, so treat the next paragraph as what it is.&lt;/p&gt;

&lt;p&gt;I wrote &lt;a href="https://chromewebstore.google.com/detail/chat-exporter-for-perplex/cceloekgkcopaedlgfkfdpjcpalkncla" rel="noopener noreferrer"&gt;Chat Exporter for Perplexity&lt;/a&gt; after doing the manual dance one time too many. It exports a thread to Word, PDF, Google Docs, Notion, Markdown or JSON, keeps the inline references pointing at their sources, and brings the source list along instead of leaving it in the tab. Pro Search threads come out as one document with the order of the investigation intact, and it behaves the same inside Spaces. Free tier, paid plan for unlimited exports.&lt;/p&gt;

&lt;p&gt;Two honest limits. It reads what is rendered, so if the sources panel is collapsed those links are not on the page to capture — expand it first. And exporting mid-stream on a Pro Search gets you the steps that finished, same as selecting mid-stream does.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part worth keeping
&lt;/h2&gt;

&lt;p&gt;Whatever route you take, the rule underneath is the same: &lt;strong&gt;the citation is the &lt;code&gt;href&lt;/code&gt;, not the number&lt;/strong&gt;. Anything that reduces the page to its text content has thrown the answer's provenance away and kept its confidence, which is the worst half to keep.&lt;/p&gt;

&lt;p&gt;If you do nothing else, expand the sources list before you copy. Most of the loss people blame on the AI is really the clipboard doing exactly what it was asked.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Curious what the other tools do here — if you have a workflow for keeping research citations intact across Perplexity, NotebookLM or similar, I would like to read it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>The moment you edit the Canvas, the document stops knowing who wrote it</title>
      <dc:creator>NAN</dc:creator>
      <pubDate>Thu, 02 Jul 2026 10:10:49 +0000</pubDate>
      <link>https://dev.to/anuis258/chat-exporter-for-gemini-save-conversations-as-word-pdf-notion-markdown-3fmb</link>
      <guid>https://dev.to/anuis258/chat-exporter-for-gemini-save-conversations-as-word-pdf-notion-markdown-3fmb</guid>
      <description>&lt;p&gt;Gemini drafts something in Canvas. You read it, disagree with a paragraph, and rewrite it in place. Then you fix a heading, delete a bullet, tighten the conclusion.&lt;/p&gt;

&lt;p&gt;Export the result and you have a clean document. What you do not have — anywhere — is a record of which sentences were yours.&lt;/p&gt;

&lt;p&gt;That is not a gap in the export. The document itself does not carry it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6pxo8zbcyaht5mqh3edi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6pxo8zbcyaht5mqh3edi.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Canvas is an editor, not a panel
&lt;/h2&gt;

&lt;p&gt;This is the distinction that matters and it is easy to miss, because visually it looks like any other side panel.&lt;/p&gt;

&lt;p&gt;A read-only panel holds output. Whatever is in it came from the model, so the provenance question never arises — the container answers it.&lt;/p&gt;

&lt;p&gt;Canvas hands you a cursor. The moment you use it, the panel holds a document with two authors and no way to distinguish them. Your paragraph and the model's paragraph are the same kind of node in the same tree, styled identically, because in the editor's model they &lt;em&gt;are&lt;/em&gt; the same kind of thing. It is a text editor. Text is text.&lt;/p&gt;

&lt;h2&gt;
  
  
  The transcript does not save you
&lt;/h2&gt;

&lt;p&gt;The intuitive fix is that the chat records what the model produced, so you could diff.&lt;/p&gt;

&lt;p&gt;You cannot, for two reasons.&lt;/p&gt;

&lt;p&gt;The transcript records the model's &lt;em&gt;turns&lt;/em&gt;, not the document's &lt;em&gt;states&lt;/em&gt;. Gemini says "I've tightened the introduction" — that sentence is in the stream; the introduction it produced is in the panel, which has since been overwritten by the next revision.&lt;/p&gt;

&lt;p&gt;And your edits leave no turn at all. You typed into a text box. Nothing was sent, nothing was logged, nothing appears in the conversation. From the transcript's point of view, your edits did not happen.&lt;/p&gt;

&lt;p&gt;So the two records drift apart from the first keystroke. The transcript is a partial account of one author's contributions; the document is the merged result of two.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why anyone should care
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Disclosure.&lt;/strong&gt; Plenty of contexts now ask you to declare AI assistance — coursework, journals, some workplaces. Try answering "which parts" honestly a week after a Canvas session. The truthful answer is usually "I no longer know", which is uncomfortable when the question was asked in good faith.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review.&lt;/strong&gt; A reviewer's attention is finite and should go where it is needed. Model-drafted passages want checking for confident wrongness; your own want checking for the things you always get wrong. A document that hides the seam gets uniform, thinner attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your own memory.&lt;/strong&gt; This is the one that bites soonest. Six months on, you cannot remember whether a claim was something you knew or something you accepted. Those are different epistemic states and the file records neither.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually helps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Edit outside the Canvas.&lt;/strong&gt; Export first, then revise in your own editor. Now the export is a clean record of what the model produced, and your changes live in a file with a history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you must edit in place, do it in one pass at the end.&lt;/strong&gt; Export before you start. Two artifacts, in order, and the diff between them is your contribution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Say what you did, not what you used.&lt;/strong&gt; "Drafted by Gemini, restructured and fact-checked by me" carries more than a checkbox, and you can write it honestly at the time — which is the only time you still know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;I build an export tool, so weigh this accordingly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/chat-exporter-for-gemini/fggpnllcccjdcoebaobnnmahhikahcoh" rel="noopener noreferrer"&gt;Chat Exporter for Gemini&lt;/a&gt; puts an export button in the Canvas toolbar, so the Canvas document exports on its own with headings, lists and code intact, separately from the surrounding chat. It also handles Gems, carries grounded sources across, and turns Gemini's KaTeX maths into a real equation object. Free tier, paid for unlimited.&lt;/p&gt;

&lt;p&gt;It cannot tell you who wrote what, and neither can anything else that reads the page. That information was never recorded. What it can do is make the export-first workflow above cheap enough that you actually do it — which is the only version of this problem that has a solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  The general point
&lt;/h2&gt;

&lt;p&gt;Read-only output has provenance by construction. Editable output does not, and the interfaces are converging on editable.&lt;/p&gt;

&lt;p&gt;Any surface where you can revise the model's work in place has this property, and none of them are tracking authorship at the span level. Until one does, the only reliable record of what you contributed is the one you make yourself, at the moment you make the change.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Genuinely curious whether anyone has solved this rather than worked around it. Span-level attribution in a collaborative editor is not a new problem — Google Docs has had suggestion mode for years — so the absence feels like a choice.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gemini</category>
      <category>writing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Export Your DeepSeek Chats to Word, PDF, Google Docs, Markdown &amp; Notion in One Click</title>
      <dc:creator>NAN</dc:creator>
      <pubDate>Thu, 21 May 2026 14:51:47 +0000</pubDate>
      <link>https://dev.to/anuis258/export-your-deepseek-chats-to-word-pdf-google-docs-markdown-notion-in-one-click-nc9</link>
      <guid>https://dev.to/anuis258/export-your-deepseek-chats-to-word-pdf-google-docs-markdown-notion-in-one-click-nc9</guid>
      <description>&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/chat-exporter-for-deepsee/kmdnohdgmhkddohbggikkapnahhddepn" rel="noopener noreferrer"&gt;I Built a Chrome Extension to Export DeepSeek Chats &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I use DeepSeek a lot for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;coding&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;research&lt;/li&gt;
&lt;li&gt;writing
But exporting conversations was frustrating.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhikemtup6zax5cth8q8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhikemtup6zax5cth8q8g.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy-paste usually breaks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code blocks&lt;/li&gt;
&lt;li&gt;tables&lt;/li&gt;
&lt;li&gt;formatting&lt;/li&gt;
&lt;li&gt;Markdown structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built DeepSeek Exporter — a Chrome extension that exports DeepSeek chats into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;Word (.docx)&lt;/li&gt;
&lt;li&gt;Google Docs&lt;/li&gt;
&lt;li&gt;Markdown (.md)&lt;/li&gt;
&lt;li&gt;Notion
all in one click.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwd289ghv3hi3b6i2cmx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwd289ghv3hi3b6i2cmx1.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Features&lt;br&gt;
Export entire chats or selected messages&lt;/p&gt;

&lt;p&gt;You can export:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;full conversations&lt;/li&gt;
&lt;li&gt;only selected messages&lt;/li&gt;
&lt;li&gt;only prompts&lt;/li&gt;
&lt;li&gt;only AI responses&lt;/li&gt;
&lt;li&gt;Markdown support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7vd832kjx0gwks3schj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7vd832kjx0gwks3schj.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One feature I cared about most was preserving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code blocks&lt;/li&gt;
&lt;li&gt;tables&lt;/li&gt;
&lt;li&gt;headings&lt;/li&gt;
&lt;li&gt;lists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Obsidian&lt;/li&gt;
&lt;li&gt;GitHub README&lt;/li&gt;
&lt;li&gt;MkDocs&lt;/li&gt;
&lt;li&gt;Logseq&lt;/li&gt;
&lt;li&gt;Direct Notion export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can push conversations directly into a Notion database.&lt;/p&gt;

&lt;p&gt;Good for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;knowledge bases&lt;/li&gt;
&lt;li&gt;research logs&lt;/li&gt;
&lt;li&gt;AI archives&lt;/li&gt;
&lt;li&gt;Custom styling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before exporting, you can customize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fonts&lt;/li&gt;
&lt;li&gt;heading sizes&lt;/li&gt;
&lt;li&gt;colors&lt;/li&gt;
&lt;li&gt;alignment&lt;/li&gt;
&lt;li&gt;Challenges While Building&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some difficult parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;preserving Markdown formatting&lt;/li&gt;
&lt;li&gt;converting tables consistently&lt;/li&gt;
&lt;li&gt;handling nested code blocks&lt;/li&gt;
&lt;li&gt;keeping exports clean across PDF/Word/Docs&lt;/li&gt;
&lt;li&gt;Why I Built This&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted a faster workflow for saving AI conversations without messy formatting or manual cleanup.&lt;/p&gt;

&lt;p&gt;Would love feedback from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;developers&lt;/li&gt;
&lt;li&gt;writers&lt;/li&gt;
&lt;li&gt;researchers&lt;/li&gt;
&lt;li&gt;heavy AI users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What export format or integration should I add next?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>extensions</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
