# publish/manifest.txt -- what may leave this repository.
#
# Read by publish/scrub.py. Every file tracked at the exported commit must match
# exactly one class; [deny] beats [decide] beats [allow], and a file that matches
# nothing stops the export until someone classifies it. Globs are relative to
# the repository root, '/'-separated and case-sensitive: '*' stays inside one
# directory, '**' crosses directories. Quote a glob that contains spaces.
#
#   [allow]   <glob>  <why it may be published>
#   [deny]    <glob>  <why it may not>
#   [decide]  <glob>  <the open question>  -- excluded until a human moves it
#   [exempt]  <glob>  <check> <max hits>  <why the hit is not game content>
#
# The allowlist is only the first gate. scrub.py content-checks every selected
# file as well (console containers, PPU/SPU ELFs, disc media, lifted code,
# disassembly, key material, Microsoft SDK libraries, non-image binaries, size),
# whatever this file says.
#
# The player download is not a git tree; check its staged folder with
# `scrub.py --scan <folder>` (same content checks, no manifest; ps3recomp's own
# lifter templates and tests stay under the --bulk threshold).
#
# PUBLISH FROM A FRESH EXPORT, NEVER BY PUSHING THIS BRANCH: the development
# history contains every [deny] file below. `scrub.py --out <empty dir>`, then
# `git init` in that directory and commit the result as the first commit.

[settings]
max-size  8388608
# Personal data (e-mail addresses, C:\Users\<name> paths) is reported on every
# run. Switch to "refuse" once the tree is meant to be free of it.
privacy   refuse

# ===========================================================================
[allow]
# ---- repository front matter (written for the public tree) ----------------
README.md                       player/developer front page
LICENSE                         MIT licence for our own code
NOTICE                          third-party licence notices (generated by publish/make_notice.py)
NOTICE_linux                    third-party licence notices of the Linux download (generated by publish/make_notice.py --linux)
NOTICE_HD                       third-party licence notices of the HD pack download (generated by publish/make_notice.py --hd)
CONTRIBUTING.md                 contributor rules
.gitignore                      ignore rules (keeps game data and build output out of commits)
.gitattributes                  line-ending/binary attributes
.github/**                      issue and pull-request templates
publish/**                      this manifest, the scrubber and the NOTICE generator

# ---- the end-user builder and its packaging (our code) --------------------
builder/**                      builder (if it lives at the root)
packaging/**                    release packaging (if it lives at the root)
"THP8 Launcher.cmd"              builder entry point
imports.json                    the EBOOT's import NIDs, stub addresses and names (facts about the binary)
**/imports.json                 same, wherever the builder keeps it

# ---- build configuration and our own source --------------------------------
CMakeLists.txt                  game build definition (our code; globs the lift generated on the player's PC)
src/compat/**                   POSIX shim header (our code)
src/title/**                    title-specific runtime defaults and dev switches (our code)
mods_p8plus/plugins/*.ini       Project 8 Plus plugin settings (our config)

# ---- tools: build, lift, harness (our code) --------------------------------
tools/*.sh                      build/lift scripts (our code)
tools/*.cmd                     toolchain/launcher scripts (our code)
tools/*.ps1                     toolchain environment script (our code)
tools/*.cmake                   zig toolchain file (our code)
tools/linux/**                  our Linux/WSL/Proton port tooling (scripts and the SDL2 kit helper; no game data, no machine paths)
tools/relift.sh                 drives the lift of the player's own EBOOT (our code)
tools/local.env.example         example of the git-ignored tools/local.env (placeholders only)
tools/thp8_spu_gen.py           SPU extraction/lift driver; holds addresses, sizes and fingerprints only (our code)
tools/title_patch.py            post-lift source patcher (our code)
tools/spu_title_patch.py        post-lift SPU patcher: native SPURS job-manager claim hooks (pm-native); pins digests of the lifted job manager (our code)
tools/symskin.py                generator of the native-skinning headers (runs on the player's PC over the lift; our code; its OUTPUT is never shipped)

# ---- ps3recomp patch series --------------------------------------------------
patches/*.patch                 our changes to ps3recomp (MIT upstream)
patches/ps3recomp-thp8.patch    our changes to ps3recomp (MIT upstream), one combined diff
patches/ps3recomp-thp8.log      the ps3recomp commits the combined diff contains
patches/README.md               how to apply the patch
patches/UPSTREAM                the upstream ps3recomp commit + the patched tree hash (packaging/fetch_ps3recomp.sh)

# ---- documentation and progress record ---------------------------------------
docs/*.md                       documentation
# Pictures of the game (owner correction 2026-10-08: screenshots and frame captures may be published): PNG/JPG under docs/.
docs/*.png                      pictures for the documentation
docs/*.jpg                      pictures for the documentation


# ---- work/: development notes, analysis and scripts -------------------------
# Notes and analysis describe the binary by addresses, names, sizes and
# behaviour (facts). Anything that carries the game's own bytes, code, a
# listing of it, or someone else's binaries is in [deny] below.

# ===========================================================================
# ---- the project-8-plus monorepo: Project 8 Plus (mod/) and the website (site/) ----------------
mod/LICENSE                     MIT licence of the mod layer
mod/NOTICE                      third-party notices of the mod layer
mod/native/**                   plugin, script host, live link, p8audio sources (our code + stb_vorbis, public domain/MIT)
mod/tools/**                    the add-on and creator tools the release ships (our code)
mod/docs/**                     modding and editor documentation
mod/examples/**                 example mods of our own content (their binary assets are generated by make_assets.py, not committed)
site/**                         the website's source (screens and clips are built locally, never committed)

[deny]
# DECIDED (coordinator 2026-10-10, batch21): the native-skinning headers tools/symskin.py makes from the lifted SPU job code are
# game-derived: they are generated on the player's PC (builder title stage), verified against data/expected_skin.json, and never
# shipped, committed or published. The generator (tools/symskin.py) and the hand-written skin_ops.h are ours.
src/title/skin/skin_p*.h        generated skinning headers (game-derived): never committed or published
src/title_gen/**                generated on the player's PC from the lift
# Owner decision 2026-10-05: publish a CURATED docs/ subset only (README, SETUP, KNOWN_ISSUES,
# HOW_IT_WORKS); never the raw research notes, logs, audits or dumps of the development.
work/**                         raw research notes, audits, logs and analysis scripts (curated docs/ instead)
docs/*.txt                      raw development log and checklists (curated docs/ instead)
# Machine-specific tooling of the development PC (shared-machine run slot, fixed D:\ paths).
tools/harness/**                dev test harness bound to the development PC's paths and run slot
tools/runslot.sh                shared-machine run-slot queue of the development PC
tools/lowprio.*                 shared-machine helper of the development PC
tools/play_common.cmd           dev launcher bound to the development PC's paths (the builder writes the player's)
play.cmd                        dev launcher bound to the development PC's paths (the builder writes the player's)
play_p8plus.cmd                 dev launcher bound to the development PC's paths (the builder writes the player's)
# ---- the game and anything translated from it ------------------------------
src/recomp*/**                  lifted PPU code: a translation of the game's executable
src/gen/**                      generated from the game's executable by the lift
src/spu_gen/**                  generated: lifted Havok/FMOD/job SPU code; spu_workloads.c registers it and embeds code signatures copied from the game
analysis/**                     lift intermediates derived from the game's executable
game/**                         a copy of the disc
vfs/**                          a copy of the disc
decrypted/**                    decrypted game binaries
hdd0/**                         a console HDD tree (saves, data cache)
work/spu/disasm/**              disassembly of the game's SPU programs
work/spu/manifest.json          generated with the SPU lift; holds 16-byte code signatures copied from the game's SPU programs
work/lifter/view_*.txt          a game function's disassembly beside its lifted C
work/lifter/syntax_check.cpp    lifter output (lifted game code) used for a syntax check
work/rsx/harness/callgraph.pkl  call graph extracted from the game's disassembly

# ---- other people's files --------------------------------------------------
work/lifter/dev/**              snapshots of ps3recomp's lifter and its tests (upstream files; our changes are in patches/)
work/lifter/ppu_lifter.py.before_audit  snapshot of ps3recomp's lifter (upstream file)
work/hle/ppu_hle_nids_test.cpp  generated by ps3recomp's gen_hle_nids.py (build output, regenerated by every build)
work/rsx/harness/ucrtbase.lib   import library generated from Microsoft's ucrtbase.dll
work/rsx/harness/ucrtbase.def   export list of Microsoft's ucrtbase.dll
work/rsx/harness/ucrt_exports.txt  export list of Microsoft's ucrtbase.dll
work/rsx/harness/rsxdec.dll     build output linked against Microsoft's ucrtbase
work/rsx/harness/rsxdec.lib     build output (import library)

# ---- game DATA, not pictures of the game (owner correction 2026-10-08) ------------------------------------
# Screenshots and frame captures may be published as release/site media, but they are not committed to this repository
# (docs/shots/**, site/public/media/** above; coordinator 2026-10-24); extracted or derived game assets may not be published at all. scrub.py's 'game-image' check enforces the same split on content (DDS headers, texture-pack directories, raw dumps).
**/frames/**                    raw frame dumps, wherever they sit
**/*.dds                        extracted / derived textures (DDS)

# ===========================================================================
docs/shots/**                   game screenshots: kept out of the public repository (pictures of the game)
site/public/media/**            the site's screenshots and clips (pictures of the game): built locally, never committed

[decide]
# (owner decision 2026-10-05: the three borderline work/ files -- lifter audit, shader-corpus
# summary, RPCS3 syscall-name table -- stay out; work/** is denied as a whole.)

# ===========================================================================
[exempt]
# Hits that are not game content. Each names one check and a maximum count, so
# a later bulk listing in the same file still refuses.
tools/title_patch.py            lifted  6  the two one-line lifted snippets it must find to patch (exact-match anchors, our code)
patches/ps3recomp-thp8.patch    lifted  30 ppu_lifter/ppu_codegen_opt source: C++ text templates the LIFTER emits (generator code, not a lifted game function)
NOTICE                          privacy 60 third-party licence texts carry their authors' e-mail addresses
NOTICE_linux                    privacy 60 third-party licence texts carry their authors' e-mail addresses
builder/p8ui/assets/fonts/*.ttf binary  1  upstream font files of the launcher (Inter, Barlow Condensed, JetBrains Mono: SIL OFL 1.1; Lucide: ISC), licences in NOTICE section 4, versions in builder/p8ui/assets/VERSIONS.txt
site/src/fonts/*.woff         binary  1  the website's web fonts (Inter, Barlow Condensed, JetBrains Mono: SIL OFL 1.1), licences in site/src/fonts/LICENSES.md
src/title/thp8_pm_native.c      lifted  30  declarations and calls of the lifted SPU job-manager functions BY NAME (our native transliteration; the lifted bodies are not in this file)
tools/spu_title_patch.py        lifted  15  the patcher quotes the names of the lifted thp8pm functions it hooks (anchors and a docstring; our code)
builder/tests/test_pm_native.py lifted  4   one test edits a lifted function header by name (our code)
src/title/thp8_skin_native.c     lifted  4   names of the lifted job_skin functions in comments (our hand-written native job, not lifted code)
