- Assembly 68.3%
- C 17.7%
- Shell 9%
- JSONiq 2.7%
- RPGLE 1.4%
- Other 0.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The check stage of the housekeeping Build compiled every object and then died on a name-resolution failure inside one CHKOBJ, which the script reported as a missing object. Only an IBM i object-not-found message means missing; anything else is retried three times. Claude-Session: https://claude.ai/code/session_01HPdKaFBKQVs8hzfgXMrnwV |
||
| .vscode | ||
| db/sql | ||
| docs | ||
| native | ||
| recovery | ||
| scripts | ||
| .gitattributes | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| README.md | ||
| sourcerer.json | ||
| test-1-open-for-business.sh | ||
| test-2-cannot-afford.sh | ||
| test-3-closing-time.sh | ||
rpg-lemonade-tng
The lemonade stand, recovered. rpg-lemonade is deployed to pub400 and every
one of its deployments ends with a routine source loss: four source members
disappear from the development library and two programs lose their debug
data and observability in production and development. This repository is the
twin that a recovery worker rebuilt from that box, with no access to the
original source. It deploys through the same Binjovi pipeline, with the same
three behaviour reels, from what the box still gives up:
| origin | what it is | where |
|---|---|---|
exact_source_captured |
the surviving members, exported twice and compared byte for byte | native/ |
generated_ddl |
the SQL tables, procedures and functions as QSYS2.GENERATE_SQL text |
db/sql/ |
object_metadata |
catalog rows for every object: compile attributes, bound modules, service programs, exported symbols | recovery/application/ |
retained_binary_only |
the lost executables as save-file dumps plus an on-box retained copy | recovery/objects/*/archive.savf, recovery/retained.json |
disassembly_captured |
the Ghidra 11.1.2 + PowerAS bundle of each stripped program: instructions, layout, interpretation | recovery/objects/*/recovery/bundle/ |
permission_denied / insufficient_evidence |
what the host refused or what no tool can produce | recovery/gaps.json |
recovery/README.md is the provenance table. It is generated by
scripts/recovery-report.sh from the receipts and the file hashes, so it shows
exactly which files came from surviving source and which came from the
Ghidra techniques. docs/RECOVERY.md records the run that produced release 1.
How it deploys
scripts/deploy.sh installs the twin into $LIB (SOMEARA1 for the Build
check, SOMEARA2 for the release stage): it uploads the surviving members and
compiles them with the commands of sourcerer.json, which were derived from
the recovered catalog metadata; it duplicates each lost executable from its
retained copy, because pub400 denies RSTOBJ (the committed archive.savf
is the portable form for a host that can restore). The pipeline then records
the three scenarios (test-*.sh), saves the release objects into LEMTNGSF
and, on deploy, copies them to production. sourcerer manifest validate
proves the manifest offline.
Reconstruction
A lost program becomes source again only through a reconstruction kit
(its bundle, metadata, the surviving callers and the reels) and a native
gate: compile in the release library, replay the scenarios. Until then it
stays retained_binary_only. Nothing here is original source, and the
provenance table never says otherwise.