<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.nanako.org/changelog</id>
    <title>Nanako Docs Blog</title>
    <updated>2026-09-16T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.nanako.org/changelog"/>
    <subtitle>Nanako Docs Blog</subtitle>
    <icon>https://docs.nanako.org/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Long filenames no longer stretch the translate and parse pages]]></title>
        <id>https://docs.nanako.org/changelog/2026/09/16/long-filename-layout</id>
        <link href="https://docs.nanako.org/changelog/2026/09/16/long-filename-layout"/>
        <updated>2026-09-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Uploading a file with a very long name no longer pushes the task list out of its column on the PDF translation and document parsing pages.]]></summary>
        <content type="html"><![CDATA[<p>On desktop, uploading a file with a very long name could stretch the two-column
layout on the PDF translation and document parsing pages, pushing the task list
out of view instead of shortening the name.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fixed">Fixed<a href="https://docs.nanako.org/changelog/2026/09/16/long-filename-layout#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">Long filenames are now truncated inside their column on the PDF translation
and document parsing pages, so the two-column layout keeps its proportions</li>
<li class="">Hovering a truncated filename shows the full name as a tooltip</li>
</ul>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Delete translation and parsing records]]></title>
        <id>https://docs.nanako.org/changelog/2026/07/30/delete-task-records</id>
        <link href="https://docs.nanako.org/changelog/2026/07/30/delete-task-records"/>
        <updated>2026-07-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Remove a finished task and its files from storage in one click.]]></summary>
        <content type="html"><![CDATA[<p>Finished PDF translations and document parses can now be deleted, and the files
go with them. This is a real deletion from storage, not a row quietly hidden
from the list.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="added">Added<a href="https://docs.nanako.org/changelog/2026/07/30/delete-task-records#added" class="hash-link" aria-label="Direct link to Added" title="Direct link to Added" translate="no">​</a></h3>
<ul>
<li class="">A delete button on every finished task in <strong>PDF translation</strong> and <strong>Document
parsing</strong>. It permanently removes the source file and every result from object
storage. This cannot be undone.</li>
<li class=""><code>DELETE /api/v1/translate/tasks/:id/record</code> and
<code>DELETE /api/v1/mineru/tasks/:id/record</code> do the same over the API. Both return
<code>400</code> for a task that is still running — cancel it first, otherwise its worker
may write results after the deletion and leave them stranded.</li>
<li class="">If storage is unreachable, the whole request fails with <code>503</code> and nothing is
hidden. A record never disappears while its files are still there.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changed">Changed<a href="https://docs.nanako.org/changelog/2026/07/30/delete-task-records#changed" class="hash-link" aria-label="Direct link to Changed" title="Direct link to Changed" translate="no">​</a></h3>
<ul>
<li class="">Cancelling is untouched. <code>DELETE /api/v1/translate/tasks/:id</code> and
<code>DELETE /api/v1/mineru/tasks/:id</code> still only cancel an in-flight task.
Cancelling and deleting are separate endpoints on purpose, so the same request
never means two different things depending on the task's state.</li>
</ul>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Notifications are live]]></title>
        <id>https://docs.nanako.org/changelog/2026/07/30/notifications</id>
        <link href="https://docs.nanako.org/changelog/2026/07/30/notifications"/>
        <updated>2026-07-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[An in-app inbox, email alerts, and per-app notification preferences.]]></summary>
        <content type="html"><![CDATA[<p>Nanako now tells you when something finishes instead of making you check.</p>
<!-- -->
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Status checked 2026-09-10</div><div class="admonitionContent_BuS1"><p>This entry records the P0 notification release. The checked implementation still
contains the in-app inbox, live SSE updates with polling fallback, preferences,
per-authorized-app mute controls, and email delivery when its worker/channel is
enabled. Browser Web Push and APNs remain future channels: there are no device
registration endpoints, and their preference controls are disabled as
unavailable. References below to push-subscription cleanup describe reserved
model/session behavior, not a currently usable push channel.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-shipped">What shipped<a href="https://docs.nanako.org/changelog/2026/07/30/notifications#what-shipped" class="hash-link" aria-label="Direct link to What shipped" title="Direct link to What shipped" translate="no">​</a></h2>
<ul>
<li class=""><strong>Message center</strong> — an inbox in the top bar with an unread badge. Messages
arrive without a page reload.</li>
<li class=""><strong>Email alerts</strong> — the same events can reach your inbox. Off by default for
every category; you opt in.</li>
<li class=""><strong>Preferences page</strong> — decide per category and per channel what you want.
Third-party apps you have authorised can be muted individually without
revoking their access.</li>
<li class=""><strong>Translation completion</strong> is the first event wired up. A PDF translation
that finishes — or fails — now notifies you.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="notes">Notes<a href="https://docs.nanako.org/changelog/2026/07/30/notifications#notes" class="hash-link" aria-label="Direct link to Notes" title="Direct link to Notes" translate="no">​</a></h2>
<p>Notifications are delivered by a separate background process. If you self-host
Nanako, enabling the feature also means deploying that process; the message
center will otherwise fill up with items that never leave <code>pending</code>. See the
deployment docs.</p>
<p>The P0 data model also tied future push subscriptions to login sessions so a
device revocation could disable those subscriptions. Push delivery itself did
not ship in P0 and is still unavailable in the checked implementation.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[OAuth 2.0 documentation for third-party developers]]></title>
        <id>https://docs.nanako.org/changelog/2026/07/30/oauth2-developer-docs</id>
        <link href="https://docs.nanako.org/changelog/2026/07/30/oauth2-developer-docs"/>
        <updated>2026-07-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A complete integration guide for adding Sign in with Nanako to your own product.]]></summary>
        <content type="html"><![CDATA[<p>Everything you need to let people sign in to your product with their Nanako
account is now documented: the flow, every endpoint and parameter, every scope
and claim, every error, and the security requirements.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="added">Added<a href="https://docs.nanako.org/changelog/2026/07/30/oauth2-developer-docs#added" class="hash-link" aria-label="Direct link to Added" title="Direct link to Added" translate="no">​</a></h3>
<ul>
<li class=""><a class="" href="https://docs.nanako.org/nanako/oauth2/">OAuth 2.0</a> — overview, supported client types, token
lifetimes, and what the provider does and does not implement</li>
<li class=""><a class="" href="https://docs.nanako.org/nanako/oauth2/register">Registering an application</a> — developer approval,
application creation, redirect URI rules and credential handling</li>
<li class=""><a class="" href="https://docs.nanako.org/nanako/oauth2/authorization-code">Authorization code flow</a> — the complete
integration with runnable requests, including PKCE, refresh and revocation</li>
<li class=""><a class="" href="https://docs.nanako.org/nanako/oauth2/scopes">Scopes</a> — the four scopes, the claims each returns,
and how scope is validated</li>
<li class=""><a class="" href="https://docs.nanako.org/nanako/oauth2/endpoints">Endpoint reference</a> — every parameter and response
field for the four OAuth endpoints</li>
<li class=""><a class="" href="https://docs.nanako.org/nanako/oauth2/errors">Errors</a> — every error, its cause, and whether to retry</li>
<li class=""><a class="" href="https://docs.nanako.org/nanako/oauth2/security">Security requirements</a> — what an integration must
get right</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="notes">Notes<a href="https://docs.nanako.org/changelog/2026/07/30/oauth2-developer-docs#notes" class="hash-link" aria-label="Direct link to Notes" title="Direct link to Notes" translate="no">​</a></h3>
<p>Two limits are worth knowing before you start: the discovery document at
<code>/.well-known/openid-configuration</code> lists endpoint URLs that do not resolve, so
configure the endpoints by hand; and a browser-only application cannot complete
the token exchange without an operator allowlist entry. Both are covered in the
documentation.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[docs.nanako.org is live]]></title>
        <id>https://docs.nanako.org/changelog/2026/07/28/docs-site-launch</id>
        <link href="https://docs.nanako.org/changelog/2026/07/28/docs-site-launch"/>
        <updated>2026-07-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Nanako ecosystem now has a public documentation site.]]></summary>
        <content type="html"><![CDATA[<p>The Nanako ecosystem now has a public documentation site at
<a href="https://docs.nanako.org/" target="_blank" rel="noopener noreferrer" class="">docs.nanako.org</a>.</p>
<!-- -->
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Status checked 2026-09-10</div><div class="admonitionContent_BuS1"><p>This entry records the 2026-07-28 launch event. The repository still configures
<code>docs.nanako.org</code>, bilingual Nanako docs, changelog search and conditional
Cloudflare deployment, but repository configuration does not prove the site is
currently reachable. Nanako remains the only docs section; NanoStart and
NanoUptime are external first-party applications and still have no sections
here. No OpenAPI renderer is wired into this site.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-shipped">What shipped<a href="https://docs.nanako.org/changelog/2026/07/28/docs-site-launch#what-shipped" class="hash-link" aria-label="Direct link to What shipped" title="Direct link to What shipped" translate="no">​</a></h2>
<ul>
<li class=""><strong>Nanako documentation</strong> with a bilingual skeleton (English default,
Simplified Chinese under <code>/zh-CN/</code>)</li>
<li class=""><strong>Changelog</strong> — this page</li>
<li class=""><strong>Full-text search</strong> across both languages, including CJK tokenization</li>
<li class=""><strong>Continuous deployment</strong> — merging a change to <code>docs-site/</code> on <code>main</code>
publishes it automatically, with no manual step</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-updates-work">How updates work<a href="https://docs.nanako.org/changelog/2026/07/28/docs-site-launch#how-updates-work" class="hash-link" aria-label="Direct link to How updates work" title="Direct link to How updates work" translate="no">​</a></h2>
<p>Documentation lives in the main site repository alongside the code it
describes, so a change to an API and the change to its documentation ship in
the same commit and are reviewed in the same pull request.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-next">What's next<a href="https://docs.nanako.org/changelog/2026/07/28/docs-site-launch#whats-next" class="hash-link" aria-label="Direct link to What's next" title="Direct link to What's next" translate="no">​</a></h2>
<p>At launch, the plan was to add NanoStart and NanoUptime sections and generate an
API reference from NanoUptime's machine-readable description. That paragraph
was a roadmap statement, not a claim about the current site; see the status note
above.</p>]]></content>
    </entry>
</feed>