# SH3012: The final package holds what the game's disclosure part doesn't allow

Source: https://zafnok.github.io/shuyi-engine/learn/errors/sh3012/

Class: operation, exit code 1.

`export` read the final package back, after every copy its target makes, and
held it to the `disclosure` part of `shuyi.ron`. Something in it, or beside it,
isn't allowed: a file of the game or of a pack the part doesn't name, a path it
forbids, one of its canaries, or a file beside the package that this export
didn't make. The package, its archive and its debug file were removed, and for
the web the files in `web.dist`. `exposure-report.json` stays, and lists what
it held. The message names each file and where it came from. A canary is named
by its place in the part, never by its text.

**How to fix it.** For each line of the message:

- A file or a pack's file that isn't meant to ship yet: take it out of what is
  built (out of the folder `web.music` names, the files `GameTools::audio`
  answers, or what the game bakes).
- One that is meant to ship: add its whole path to `allowed_files` or
  `allowed_pack_entries`.
- A canary or a forbidden path in a program: find what embeds it (an
  `include_dir!` of a whole folder, an `include_str!`), and keep that out of
  this build.
- A file beside the package: it would go along with an upload of the folder.
  Delete it, or export into a folder of its own with `--out`. A package left by
  an older version counts.
- A pack that doesn't read: bake it again. A program that embeds a pack keeps it
  whole, or it can't be listed: `wasm-opt` can split one in a `.wasm`, so a web
  build ships its pack as a file instead.

Then export again.

For example:

```text
export: error[SH3012]: the package breaks shuyi.ron's `disclosure`, and was removed (exposure-report.json lists all it held):
  music/future.ogg (web.music: music/future.ogg) isn't in disclosure.allowed_files
```
