Files
BFM-decomp/decomp-architect/templates/CONTRIBUTING.skeleton.md
T
Drew T 9235800fb7 tools+docs(phase-33.5): task 11 — kit part 2: the firewall pack (templates/gitignore.decomp extracted byte-for-byte from the wiki fence — gitignore_template_check now runs in tools-health; firewall.txt with purge:/glob:/required:/pending:/fixture: rules; audit_public.template.py generalised from the repo's audit with its sources in the config, refusing zero sources; firewall-fixture/ = 16 synthetic bytes + sha1, the planted negative control), no-rom.template.yml, the docs/.run READMEs, ops-setup.decomp.md, bootstrap.template.sh (skeleton), CLAUDE.decomp-overlay.md (the four fail-safes + session-start extras), pa-overlays.md (7 fenced blocks: DIGEST, the 🛑 checkpoint block, the PhaseEnd narrative axis, effort rows, cookbook entry shape + triage table, wave-playbook skeleton, settings/mcp), the LICENSE/NOTICE/README/CONTRIBUTING skeletons, .clang-format + make-format.snippet.mk; tools/MANIFEST.md (325 tool files by ladder phase from one read-only survey, coverage 325/325, as Phase-N tasks); tools/kit_lint.py (fence-aware leak grep, the PLACEHOLDERS set-diff, in-memory compile / bash -n / JSON+YAML, the gitignore diff, TODO counts, coverage; --selftest = the R39 control) wired into tools-health; decomp-architect/README.md in doc_links DEFAULT; SETUP row; PLACEHOLDERS Used-in cells reconciled; make tools-health OK on this tree (detached run, .run/P33.5/tools_health_t11.log); story-timeline regenerated by the report step; log + checkpoint (NEXT = task 12, Max)
2026-09-07 19:22:51 -06:00

3.1 KiB

Contributing to {{PROJECT_NAME}}

Bring your own copy of the game

Every contributor extracts from their own legally obtained copy. Nothing derived from it is committed — no executable, payloads, disassembly, assets, build output, memory images, database, vendor SDK, or notes that paste the target's instructions. The .gitignore firewall stops the ordinary case; tools/audit_public.py refuses the rest and runs in CI on every push; review git status before every commit.

What "done" means

A function is matched when its compiled output is instruction-identical to the original, register allocation included, and the whole binary's hash check still passes with it linked. "Functionally equivalent" is never done. Unmatched C lives under the non-matching guard with the assembly stub in the default build. A match is verified from a clean rebuild, never an incremental one; a pull request states which compilation each claim survived (standalone / the real translation unit / the whole binary).

Names, types and formatting

A symbol is renamed only on recorded evidence — a string it prints, a cross-reference chain, a debug menu, a live-memory datapoint, a community label with provenance. If you are not sure what something does, leave it unnamed rather than name it wrongly; the address-named placeholder is honest and greppable. One definition per structure; a duplicate type is a defect. Run make format before committing (.clang-format is the community's style); mark anything that exists only to force a match with // !FAKE: and its reason; mark an original bug with //! @bug.

AI use — conduct

{{AI_DISCLOSURE}}

The rules that keep that honest, for every contributor and every agent:

  1. The byte gate is the only claim of success. Never report a match the gate has not proven; "it compiled" and "looks equivalent" are not results. "Banked" is written from a tool's printed success line.
  2. Names and types are evidence-based, never guessed. A model may propose a name; a person with recorded evidence asserts one. Hallucinated meaning is the specific way a model damages a decompilation without any test catching it.
  3. Outward text is written by a person. Issues, pull requests, forum posts and outreach to other projects are written by their author the way a developer writes — short, plain, from the facts — never a model draft with the tells removed. Before contributing to another project, read and follow its own AI-contribution policy.
  4. No automated traffic against community infrastructure. Shared services are used by a person in a browser; anything repetitive is replicated locally.
  5. Agents assist; a person owns. Every change is justifiable by a person from the record (the phase logs, the decision log, the cookbook's byte proofs).

Submitting

Small, per-function or per-family pull requests; the hash check green on every binary the change touches; the clean fleet verification for anything that touches a shared body, a shared header or the executable; a commit message that names what was matched and how it was verified; no AI-attribution trailers.