> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pnbr.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Identical bytes make no new version

> An upload of identical bytes resolves to the File that already holds them, so it makes no new File and no new version.

Troubleshooting · files

> **Use when**
>
> An upload printed `deduplicated` or an old File id, and you expected a new File or a new version.

> **Looking for something else?**
>
> Different bytes that need a new version (card [File](https://docs.pnbr.io/concepts/file.md)). A new edition uploaded as a separate File (problem [A new edition is a separate File](https://docs.pnbr.io/troubleshooting/two-editions-two-files.md)).

## Signs

* `penumbra files upload <local-path>` prints the id of a File that exists, on a `file:` line.
* The operation lines include `canonical: deduplicated version <version-id>`. The upload prints them when it places the File or when you pass `--wait`.
* With a destination, the `path:` line ends with `(already there: same content)`.
* `penumbra files list` shows no new File, and `penumbra files versions <file>` shows no new version.
* The name, tags or description that you passed do not appear on the File.

## Why it happens

When an upload has the same bytes as the current version of a live File in the
project, Penumbra returns that File. It does not change the name, the tags, the
description, the collections or the source date of the File. So Penumbra drops
the values in your upload.

The match uses only the current version. Bytes from an older version of a File
match nothing, so they make a new File. A File in the trash matches nothing
either.

A replace is different. It always adds a version, even when the bytes equal the
current bytes. The new version has the same text but new passages. The old
passages leave search, and the entities that cite them then cite a version that
is no longer current.

## What Penumbra does

By itself:

* Resolves an upload of identical bytes to the File that holds them, and makes no new File and no new version.
* Matches only a live File whose current version holds the bytes, in the same project.
* Keeps the name, tags, description, collections and source date of the File that exists. It drops the values in the new upload.
* Places the File at your destination only if it has no path. Otherwise it keeps its path.
* Adds a version for `penumbra files replace` with identical bytes.
* Makes a new File for a Markdown document that you create with `penumbra files new`, even when its text equals the text of another File.
* The default MCP catalog has no tool that uploads or replaces the bytes of a File.

You must:

* Tell the person which File holds the bytes: give its id and its path.
* Use the commands for tags, description, source date and path if you need those values on the File.
* Use a replace only for different bytes.

Not handled:

* No upload option makes a second File from identical bytes.
* The text output of the CLI does not list the values that Penumbra dropped.

## Do

1. Read the output of the upload. If it shows `deduplicated`, the File exists.
   Note the `file:` line and the `path:` line.
2. Ask if this is the document that the person meant. If the person called the
   upload a new edition, check it. Identical bytes cannot be a new edition of
   the same File. Tell the person.
3. Read the File that the upload named: `penumbra files show <file-id>`. If it
   is not the original of this document, the new edition may be in the project
   already as its own File (problem [two-editions-two-files](https://docs.pnbr.io/troubleshooting/two-editions-two-files.md)).
4. If you want the values from your upload on the File, set them:
   `penumbra files tags <file> --add <tag>`,
   `penumbra files describe <file> --text "<text>"` and
   `penumbra files source-date <file> <date>`. MCP: call `update_file`.
5. If you want another path, run `penumbra files move <file> <destination>`. The
   destination is the full path with the file name.
6. If the person needs an independent copy of the bytes, tell the person that no
   command makes one. Ask how to go on.

## Don't

* Don't upload again with a new name or new tags to force a new File. The result
  is the same File, and Penumbra drops your values.
* Don't run `penumbra files replace` with the same bytes to get a version. It
  makes a version with the same text. The old passages leave search, and the
  entities that cite them cite a version that is no longer current (problem
  [entities-cite-replaced-version](https://docs.pnbr.io/troubleshooting/entities-cite-replaced-version.md)).
* Don't tell the person that the upload added a document. No new File exists.

## Check

* `penumbra files show <file>` shows the File id from the upload output, and the
  tags and description that you set.
* `penumbra files versions <file>` shows the same versions as before.
* The person knows which File holds the bytes.

## Related

Card [file](https://docs.pnbr.io/concepts/file.md). Recipes [new-edition](https://docs.pnbr.io/guides/new-edition.md) and [bring-in-a-corpus](https://docs.pnbr.io/guides/bring-in-a-corpus.md). Problems
[two-editions-two-files](https://docs.pnbr.io/troubleshooting/two-editions-two-files.md), [entities-cite-replaced-version](https://docs.pnbr.io/troubleshooting/entities-cite-replaced-version.md) and
[file-has-no-source-date](https://docs.pnbr.io/troubleshooting/file-has-no-source-date.md).

## Keep going

[File](https://docs.pnbr.io/concepts/file.md) · [Bring in a new edition of a document](https://docs.pnbr.io/guides/new-edition.md) · [A new edition is a separate File](https://docs.pnbr.io/troubleshooting/two-editions-two-files.md)

Penumbra Grammar 0.6.26


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.